java - 如何使用 Spring JMS 发布 JMS 主题?

标签 java spring jms activemq

我有一个将消息发送到队列以由另一个系统处理的组件。它还应该每隔一段时间发布一个关于工作状态的主题。我可以只使用用于发送到队列和发布到主题的相同 JmsTemplate 吗?

我在 ActiveMQ 中创建了一个新主题,除了当我从 JmsTemplate 发送消息时,使用发送的消息创建一个具有主题名称的新队列(而不是将数据发送到实际主题),我在做什么错了吗?

这是我的配置:

<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
    <constructor-arg ref="amqConnectionFactory" />
    <property name="exceptionListener" ref="jmsExceptionListener" />
    <property name="sessionCacheSize" value="100" />
</bean>

<!--  JmsTemplate Definition -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <constructor-arg ref="connectionFactory" />
</bean>


<bean id="messageFacade" class="org.foo.MessageFacadeJms">
    <property name="jmsTemplate" ref="jmsTemplate" />
</bean>

MessageFacadeJms 是我用来发送队列消息的类(它有效),我也可以用它来发布主题吗?

我可以用它来做队列发送和主题发布吗?:

jmsTemplate.convertAndSend("TOPIC_NAME" /* or queue name */, message);

最佳答案

这可能看起来有点奇怪,您需要通过将其 pubSubDomain 属性设置为 true 来告诉 JmsTemplate 它是一个主题而不是一个队列。

这意味着您将需要两个 JmsTemplate bean,一个用于队列,一个用于主题:

<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
   <constructor-arg ref="connectionFactory" />
   <property name="pubSubDomain" value="false"/>
</bean>

<bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
   <constructor-arg ref="connectionFactory" />
   <property name="pubSubDomain" value="true"/>
</bean>

关于java - 如何使用 Spring JMS 发布 JMS 主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3518292/

相关文章:

java - 回滚具有空 'rollbackFor' 属性的方法

apache-kafka - Apache Camel 与 Apache Kafka

java - 验证由 JAVA DSA 签名的 openssl c++ 中的签名?

java - 如何使用 Graphics2D 显示 1 到 10 之间的随机数?

java - 披萨订购计划

java - 单元测试中的 JMS 依赖关系

java - 在 Eclipse 中创建 JMS 提供程序以发送/接收 JMS 消息

java - 无法比较时间范围

html - SpringMVC : Problems with specifying method in form to be DELETE

java - 我们应该如何设计不同内部微服务之间的通信