Whi*_*cal 1 spring jms spring-integration spring-jms spring-boot
我得到了一个JmsConfig配置类,它通过以下方式处理来自主题的 JMS 事件:
@Bean ConnectionFactory,包含一个 ActiveMQ 实现@Bean JmsListenerContainerFactory实例化 aDefaultJmsListenerContainerFactory并通过 Boot 的DefaultJmsListenerContainerFactoryConfigurer@Bean MessageConverter包含一个MappingJackson2MessageConverter并设置一个自定义ObjectMapper@JmsListener在我的服务方法上使用指向 myfactory 的注释。这是我对该主题的唯一用途,仅订阅。现在我想转到Spring Integration。在阅读了很多之后,如果我不需要双向使用(丢弃网关)也不需要轮询机制(丢弃@InboundChannelAdapter),我将寻求一个message-driven-channel-adapter传统的 XML 配置措辞。我发现 Java 习惯用法应该通过新的 Spring Integration DSL 库来完成,因此,我寻找合适的代码片段。
这似乎JmsMessageDrivenChannelAdapter是正确的等价物,我找到了一种方法:
IntegrationFlows.from(Jms.messageDriverChannelAdapter(...))
但问题是这仅接受 ActiveMQ ConnectionFactory 或AbstractMessageListenerContainer,但没有我的引导预配置JmsListenerContainerFactory!
这应该如何以最终方式实施?
JmsListenerContainerFactory特定于@JmsListener,它是用于配置DefaultMessageListenerContainer. Boot 不为 raw 提供自动配置选项DefaultMessageListenerContainer;你必须自己接线。但是您仍然可以使用引导属性...
@Bean
public IntegrationFlow flow(ConnectionFactory connectionFactory,
JmsProperties properties) {
return IntegrationFlows.from(Jms.messageDrivenChannelAdapter(container(connectionFactory, properties)))
...
.get();
}
private DefaultMessageListenerContainer container(ConnectionFactory connectionFactory,
JmsProperties properties) {
DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
container.setConcurrentConsumers(properties.getListener().getConcurrency());
container.setMaxConcurrentConsumers(properties.getListener().getMaxConcurrency());
...
return container;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
524 次 |
| 最近记录: |