我在spring-boot application.properties中设置了队列和主题,如下所示:
spring.hornetq.embedded.queues=parts.queue
spring.hornetq.embedded.topics=parts.topic
我需要将消息从一个应用程序发送到另一个应用程序。
app1 (publisher)
app2 (subscriber)
bridge (contains the integration code)
从app1我发布如下部分:
this.jmsTemplate.convertAndSend("parts.queue", message);
在桥梁项目中,我在queue
上获取它,然后将其路由到topic
。
<int:channel id="partsChannel" />
<int-jms:message-driven-channel-adapter
id="jmsPartsInbound"
acknowledge="transacted"
destination-name="parts.queue"
channel="partsChannel"
connection-factory="jmsConnectionFactory"
/>
<int-jms:outbound-channel-adapter
id="jmsPartsOutbound"
destination-name="parts.topic"
channel="partsChannel"
connection-factory="jmsConnectionFactory"
pub-sub-domain="true"
>
<int-jms:request-handler-advice-chain>
<int:retry-advice max-attempts="3">
<int:exponential-back-off initial="2000" multiplier="2" />
</int:retry-advice>
</int-jms:request-handler-advice-chain>
</int-jms:outbound-channel-adapter>
app2然后订阅parts.topic
并处理该消息。
这是有效的,但是,上面的桥接代码似乎对我正在尝试做的事情有点过分。我猜我只需要一个parts.topic而不是parts.queue。
上述弹簧集成XML能否以某种方式简化?
答案 0 :(得分:0)
嗯,找到了一个更简单的解决方案:
<int-jms:publish-subscribe-channel id="partsPubSubChannel" topic-name="parts.topic" connection-factory="jmsConnectionFactory"/>
无需排队,不需要设置jmsTemplate以在spring.jms.pub-sub-domain=true
中使用application.properties
。
this.jmsTemplate.convertAndSend(&#34; parts.topic&#34;,message);
就是这样。
答案 1 :(得分:0)
It's not entirely clear why you can't just use...
this.jmsTemplate.convertAndSend("parts.topic", message);