使用spring-integration进行简单的发布/订阅

时间:2015-07-28 01:54:39

标签: spring-integration hornetq

我在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能否以某种方式简化?

2 个答案:

答案 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);