Spring 如何在PublishSubscribeChannel中测试交付?
我的应用程序中有一个Spring 如何在PublishSubscribeChannel中测试交付?,spring,spring-integration,spring-cloud-stream,Spring,Spring Integration,Spring Cloud Stream,我的应用程序中有一个PublishSubscribeChannel,它应该将消息传递到同一JVM中的不同MessageHandler。处理程序使用@StreamListener注释订阅到频道。通道使用执行器,因此传递是异步的 现在,我想测试发送者和处理者是否同意通过通道发送的特定对象类型(消息的类型)。AFAIU我有两种方法来测试这一点: 查找给定频道的所有订户并验证其 签名 向通道发送消息,并验证没有处理程序引发异常 我不知道该怎么做。我想我可以(2)通过收听errorChannel(那里应该
PublishSubscribeChannel
,它应该将消息传递到同一JVM中的不同MessageHandler
。处理程序使用@StreamListener
注释订阅到频道。通道使用执行器
,因此传递是异步的
现在,我想测试发送者和处理者是否同意通过通道发送的特定对象类型(消息的类型)。AFAIU我有两种方法来测试这一点:
errorChannel
(那里应该没有消息),但我不太明白我应该等待多长时间才能收到错误消息
有什么建议吗?对于1,您可以使用反射查看通道调度程序中的处理程序集合;然后再次使用反射查看投手的
方法
然而,你的设计是有缺陷的,除非你不介意丢失信息;传入消息将在您移交给执行人后立即确认;如果服务器崩溃,消息将丢失
如果您去掉了执行器,将更简单的方法是向通道添加一个拦截器,该拦截器将在其
AfterEndCompletion()
方法中通知任何异常(满足您的2)。对于1,您可以使用反射来查看通道调度程序中的处理程序集合;然后再次使用反射查看投手的方法
然而,你的设计是有缺陷的,除非你不介意丢失信息;传入消息将在您移交给执行人后立即确认;如果服务器崩溃,消息将丢失
如果您去掉了执行器,则向通道添加拦截器会更简单,它将在其
AfterEndCompletion()
方法(满足您的2)中通知任何异常。重新设计缺陷。是的,我有这个顾虑,但由于我的处理程序执行IO,因此可能会阻塞,所以我希望同时处理传入消息。使用executor是我所知道的唯一方法。您应该增加使用者的并发性,而不是添加一个executor。对不起,我不明白,如果我的通道在一个JVM内,在没有executor的情况下增加并发性会有多大帮助。你能给我指出一些文档吗?@StreamListener
由一个侦听器容器支持,该容器通过并发性
属性管理线程-它在内部使用任务执行器。看见如果发生故障,将消息传递给您自己的执行者将导致消息丢失。您根本不应该使用发布/订阅频道;活页夹将依次调用多个@StreamListeners
,并且只有在最后一个成功时才确认消息。如果希望同时调用它们,则应为每个绑定一个新通道,每个通道都有不同的使用者组
。重新设计缺陷。是的,我有这个顾虑,但由于我的处理程序执行IO,因此可能会阻塞,所以我希望同时处理传入消息。使用executor是我所知道的唯一方法。您应该增加使用者的并发性,而不是添加一个executor。对不起,我不明白,如果我的通道在一个JVM内,在没有executor的情况下增加并发性会有多大帮助。你能给我指出一些文档吗?@StreamListener
由一个侦听器容器支持,该容器通过并发性
属性管理线程-它在内部使用任务执行器。看见如果发生故障,将消息传递给您自己的执行者将导致消息丢失。您根本不应该使用发布/订阅频道;活页夹将依次调用多个@StreamListeners
,并且只有在最后一个成功时才确认消息。如果希望同时调用它们,则应该为每个绑定一个新通道,每个通道都有一个不同的使用者组
。