我需要限制某些JMS(activeMQ)队列之间的消息移动,以确保我不会超出消息处理期间使用的外部服务。
我过去曾经和Camel一起做过,但是考虑到这个项目完全是基于Spring的,我想我会给Spring-Integration带来些许惊喜。
我很高兴看到Java DSL在5.0.7版本中处于核心地位,并且真的想使用它代替xml。
但是...我似乎找不到使用DSL来完成简单的事情(例如为JMS创建输入和输出messageChannels)的优秀/最新文档。
任何人都可以指出我当前使用Java DSL创建可用于消费和产生消息的通道的示例,然后再在应用了某些节流功能的桥中使用吗?
答案 0 :(得分:0)
好吧,就像Java DSL示例的参考手册泄漏中的JMS章节一样,例如,到目前为止,与AMQP相似:
我相信我们也可以在JMS章节中添加类似的段落。请提出关于此事的JIRA,我们将尽快解决。同时,我建议您打开org.springframework.integration.jms.dsl.Jms
工厂,以使用适当的构建器。
另一方面,我建议您研究一下一些可能配置的现有测试用例:https://github.com/spring-projects/spring-integration/blob/master/spring-integration-jms/src/test/java/org/springframework/integration/jms/dsl/JmsTests.java
例如,要从队列中读取信息,您需要这样的配置:
@Bean
public IntegrationFlow jmsMessageDrivenFlow() {
return IntegrationFlows
.from(Jms.messageDrivenChannelAdapter(jmsConnectionFactory(), DefaultMessageListenerContainer.class)
.outputChannel(jmsMessageDrivenInputChannel())
.destination("jmsMessageDriven")
.configureListenerContainer(c -> c.clientId("foo")))
.<String, String>transform(String::toLowerCase)
.channel(jmsOutboundInboundReplyChannel())
.get();
}
要发送到JMS,您需要这样的东西:
@Bean
public IntegrationFlow jmsOutboundFlow() {
return f -> f
.handle(Jms.outboundAdapter(jmsConnectionFactory())
.destinationExpression("headers." + SimpMessageHeaderAccessor.DESTINATION_HEADER)
.configureJmsTemplate(t -> t.id("jmsOutboundFlowTemplate")));
}