java - 使用相同 onMessage 的多个 MessageListener 的线程安全性?

标签 java spring jms spring-jms

如何确保有两个监听器容器:

<bean id="listenerContainer"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="messageListener" ref="MessageListener" />
    <property name="connectionFactory" ref="tcf" />
    <property name="destinationName" value="${jms-topic}" />
    <property name="pubSubDomain" value="true" />
</bean>

<bean id="listenerContainer-2"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="messageListener" ref="MessageListener" />
    <property name="connectionFactory" ref="tcf" />
    <property name="destinationName" value="${jms-topic-2}" />
    <property name="pubSubDomain" value="true" />
</bean>

<bean id="MessageListener" class="com.my.url.jms.listener.DefaultMessageListener">
    <property name="transformer" ref="transformer" />
    <property name="publisher" ref="publisher" />
</bean>

接收来自不同主题的消息。线程安全吗?

正如您所看到的,它们使用相同的消息监听器,该监听器也依赖于其他一些 spring bean。所有消息都将由同一个类中的同一个 onMessage 方法接收。

public class SomeKlass implements MessageListener {


    public void onMessage(Message message) {        
            //Do some work
    }

}

有人可以建议我解决此类问题的最佳实践吗?来自两个主题的消息需要以相同的方式处理,因此我只需要一个 MessageListener。

谢谢

最佳答案

是的,只要您在 SomeKlass 中没有任何您似乎没有的状态,这绝对没问题。

关于java - 使用相同 onMessage 的多个 MessageListener 的线程安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13034605/

相关文章:

java - Struts 不从参数列表中排除提交操作

java - 在 Java 中减少二维数组

java - 将一定大小初始化为数组

spring - RESTful 中的 JSON 注入(inject)

grails - Grails Routing-JMS插件-部署到weblogic中时出现问题

java - Autowiring 似乎失败

java - 如何在创建索引请求中创建索引类型和id?

spring - 如何删除 Spring Actuator 提供的默认 Metrics 数据

jms - 持久交付和非持久交付之间的区别

jms - 是否有任何可移植 TIBCO EMS 可用于测试?