Spring 入站通道适配器和应用程序事件列表消息生产者之间的区别

Difference between Spring Inbound channel adapters and application event listing message producers

我正在使用 Spring 集成和 STOMP 开发 POC。初始 POC 成功。 我遵循了 https://docs.spring.io/spring-integration/reference/html/stomp.html#stomp

中提到的适配器配置

在我的 POC 中,我没有包含上面的最后两个 @Bean 定义 link。

入站通道适配器和消息处理程序足以处理传入的消息。

现在,我的问题是: 入站通道适配器应用程序事件列表消息生产者有什么区别? ApplicationListener是不是像例子中提到的那样遵循DSLhere?

谢谢,

马赫什

好吧,正如您在有关 STOMP 支持的 Spring 集成文档中注意到的那样,STOMP 通道适配器发出了一些 ApplicationEvents。如果您处理这些事件的逻辑非常简单并且不需要进一步分发,您确实可以使用常规 ApplicationListener (@EventListener) 来处理它们。但是,如果您的逻辑非常复杂并且您可能需要将偶数(或其部分)存储在某个数据库中,或者通过电子邮件发送,在一些聚合之后并行执行,等等,那么 ApplicationEventListeningMessageProducer 确实要好得多当我们已经有 Spring 集成时的解决方案。

但是,如果您谈论 StompInboundChannelAdapter 性质以及与上述事件的关系,则需要查看 StompIntegrationEvent 实现。您很快意识到 STOMP 帧中没有 payload 的事件。所以,这就是 StompInboundChannelAdapter 真正做的事情——它根据 STOMP 帧的主体生成消息。

从该通道适配器发出的所有提到的事件都更多地与该适配器状态共享有关,以便在您的应用程序中进行可能的管理。