使用测试绑定器测试 spring-cloud-stream 总是抛出 MessageDeliveryException: Dispatcher has no subscribers for channel
Testing spring-cloud-stream with their test-binder always throws MessageDeliveryException: Dispatcher has no subscribers for channel
我正在尝试为我的消息生成器编写测试。但是每当我尝试使用注入的绑定发送消息时,我都会收到以下错误
Caused by: org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers, failedMessage=GenericMessage [payload=..., headers={spanTraceId=0761b2d61b665041, spanId=e3b298682fefe198, spanParentSpanId=549ea87126d2484d, nativeHeaders={X-B3-TraceId=[0761b2d61b665041], spanTraceId=[0761b2d61b665041], X-B3-SpanId=[e3b298682fefe198], spanId=[e3b298682fefe198], X-B3-ParentSpanId=[549ea87126d2484d], spanParentSpanId=[549ea87126d2484d], X-B3-Sampled=[0], spanSampled=[0]}, X-B3-SpanId=e3b298682fefe198, X-B3-ParentSpanId=549ea87126d2484d, X-B3-Sampled=0, X-B3-TraceId=0761b2d61b665041, id=0c885a37-a1b1-fc0a-1314-e403ec1bffdb, spanSampled=0, contentType=application/json, timestamp=1589551815143}]
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:138)
at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:105)
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:73)
... 42 more
因为我正在测试消息生产者,所以我的代码中自然没有消费者。我该如何解决这个异常?
这是我创建的显示相同行为的最小测试 class:
@RunWith(SpringRunner.class)
@ActiveProfiles("test")
@SpringBootTest(classes = {MessagingTest.SampleConfiguration.class, Application.class, EventMockConfiguration.class})
public class MessagingTest {
@Autowired
private LibraryMessageSource libraryMessageSource;
@Autowired
private InputDestination input;
@Autowired
private OutputDestination output;
@Test
public void test() throws Exception {
libraryMessageSource.creations().send(MessageBuilder.withPayload("test").build());
}
@SpringBootApplication
@Import({TestChannelBinderConfiguration.class})
public static class SampleConfiguration {
}
}
注意:Application.class我的应用程序和 EventMock 的主要 class 使用特定模拟覆盖上下文中的 bean。
public interface LibraryMessageSource {
String LIBRARY_CREATE = "messages-library-create";
String LIBRARY_UPDATE = "messages-library-update";
@Input(LIBRARY_CREATE)
MessageChannel creations();
@Input(LIBRARY_UPDATE)
MessageChannel updates();
}
Since I'm testing the message producers
您的应用程序有消费者,没有生产者
@Input(INPUT)
MessageChannel events();
并且您没有 @StreamListener
订阅它。
@Test
public void test() throws Exception {
libraryMessageSource.events().send(MessageBuilder.withPayload("test").build());
}
我正在尝试为我的消息生成器编写测试。但是每当我尝试使用注入的绑定发送消息时,我都会收到以下错误
Caused by: org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers, failedMessage=GenericMessage [payload=..., headers={spanTraceId=0761b2d61b665041, spanId=e3b298682fefe198, spanParentSpanId=549ea87126d2484d, nativeHeaders={X-B3-TraceId=[0761b2d61b665041], spanTraceId=[0761b2d61b665041], X-B3-SpanId=[e3b298682fefe198], spanId=[e3b298682fefe198], X-B3-ParentSpanId=[549ea87126d2484d], spanParentSpanId=[549ea87126d2484d], X-B3-Sampled=[0], spanSampled=[0]}, X-B3-SpanId=e3b298682fefe198, X-B3-ParentSpanId=549ea87126d2484d, X-B3-Sampled=0, X-B3-TraceId=0761b2d61b665041, id=0c885a37-a1b1-fc0a-1314-e403ec1bffdb, spanSampled=0, contentType=application/json, timestamp=1589551815143}]
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:138)
at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:105)
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:73)
... 42 more
因为我正在测试消息生产者,所以我的代码中自然没有消费者。我该如何解决这个异常?
这是我创建的显示相同行为的最小测试 class:
@RunWith(SpringRunner.class)
@ActiveProfiles("test")
@SpringBootTest(classes = {MessagingTest.SampleConfiguration.class, Application.class, EventMockConfiguration.class})
public class MessagingTest {
@Autowired
private LibraryMessageSource libraryMessageSource;
@Autowired
private InputDestination input;
@Autowired
private OutputDestination output;
@Test
public void test() throws Exception {
libraryMessageSource.creations().send(MessageBuilder.withPayload("test").build());
}
@SpringBootApplication
@Import({TestChannelBinderConfiguration.class})
public static class SampleConfiguration {
}
}
注意:Application.class我的应用程序和 EventMock 的主要 class 使用特定模拟覆盖上下文中的 bean。
public interface LibraryMessageSource {
String LIBRARY_CREATE = "messages-library-create";
String LIBRARY_UPDATE = "messages-library-update";
@Input(LIBRARY_CREATE)
MessageChannel creations();
@Input(LIBRARY_UPDATE)
MessageChannel updates();
}
Since I'm testing the message producers
您的应用程序有消费者,没有生产者
@Input(INPUT)
MessageChannel events();
并且您没有 @StreamListener
订阅它。
@Test
public void test() throws Exception {
libraryMessageSource.events().send(MessageBuilder.withPayload("test").build());
}