我已经使用 Spring Cloud Streams 启动了一个小型微服务。
我只有两个流绑定,如下所示:
cloud:
stream:
bindings:
channelone:
destination: org.queue.app.EventsOne
contentType: application/json
group: app
channeltwo:
destination: org.queue.app.EventsTwo
contentType: application/json
group: app
我使用 Serenity 开发了组件测试,并将通道注入到我想要发送测试消息的位置:
@Autowired
@Qualifier(Channels.EVENTS_ONE_CHANNEL)
SubscribableChannel eventsOneChannel
@Autowired
@Qualifier(Channels.EVENTS_TWO_CHANNEL)
SubscribableChannel eventsTwoChannel
在哪里:
Channels.EVENTS_ONE_CHANNEL and EVENTS_TWO_CHANNEL
只是定义为字符串常量:
@UtilityClass
public class Channels {
public static final String EVENTS_ONE_CHANNEL= "channelone";
public static final String EVENTS_TWO_CHANNEL= "channeltwo";
}
组件测试模块导入依赖项:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-test-support</artifactId>
</dependency>
我发送的消息如下:
eventsOneChannel.send(someMessage)
快乐的流程工作得很好。但是,我想测试侦听器无法处理消息时的错误流。
这是一个监听器的例子:
@StreamListener(Channels.EVENTS_ONE_CHANNEL)
@SendTo(Channels.DTO_GENERATED)
public BonusDTO receive(Message<String> message) {
try {
log.info("Received Event event with payload [{}]", message.getPayload());
return toDto(message.getPayload());
} catch (Exception ex) {
log.error("Error converting Event to DTO", ex);
throw new EventHandlingException(ex);
}
}
当 try/catch 抛出异常时,错误由服务激活器处理:
@ServiceActivator(inputChannel = "org.queue.app.EventsOne.app.errors")
public void handle(ErrorMessage errorMessage) {
log.info("Error");
}
运行应用程序时,如果没有 spring-cloud-stream-test,如果处理消息时发生错误,则会触发先前的服务激活并处理错误。
然而,在测试过程中并没有发生同样的情况。使用 spring-cloud-stream-test,当监听器抛出异常时,从错误通道激活的服务不会被调用。
我也想测试错误流。
这是 spring-cloud-stream-test 的限制吗?使用 spring-cloud-stream-test 时是否有任何配置、技巧或技巧可以将错误消息发送到错误通道?
鸿蒙传说
jeck猫
相关分类