【问题标题】:Topic is not delivered to all Message Driven Beans in a Glassfish Cluster主题未传递到 Glassfish 集群中的所有消息驱动 Bean
【发布时间】:2014-10-20 11:05:39
【问题描述】:

我在 glassfish 3.1.2.2 集群上创建了一个主题工厂和一个主题池。 该集群有一个嵌入式常规,并安装了主代理 jms。

在向池中发送消息后,我认为机器上连接到池的所有消息驱动 bean 都会收到消息。但只有一个集群实例轮流获取消息。在大多数情况下,这非常好。但在这里我想在任何地方收到它。

我必须如何设置集群 jms 以广播到所有正在侦听的 MDB。我坚持一个话题会做到这一点。

@Resource(mappedName="jms/TestTopicFactory")
private TopicConnectionFactory topicConnectionFactory;

@Resource(mappedName="jms/TestTopicPool")
private Topic topic;

----

TextMessage topicmsg = session.createTextMessage("topic " + i++);

TopicConnection topicConnection = topicConnectionFactory.createTopicConnection();
TopicSession topicSession = topicConnection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
TopicPublisher publisher = topicSession.createPublisher(topic);
publisher.publish(topicmsg);


----


@MessageDriven(
    mappedName="jms/TestTopicPool",
    activationConfig = { @ActivationConfigProperty(
            propertyName = "destinationType", propertyValue = "javax.jms.Topic")
    })
public class MessageDrivenBeanTopic implements MessageListener {

@Override
public void onMessage(Message message) {
    try {
        TextMessage text = (TextMessage)message;
        System.out.println(text.getText());
    } catch (Throwable t) {   
        t.printStackTrace();
    }
}

谢谢

【问题讨论】:

    标签: glassfish message-driven-bean jms-topic


    【解决方案1】:

    我看到另一个问题,您需要向每个集群实例上不同的消息驱动 bean 添加一个 clientid。

    @ActivationConfigProperty(propertyName = "clientID", propertyValue="${com.sun.aas.instanceName}")
    

    所以经纪人知道他必须向每个听众传递信息。

    【讨论】:

      猜你喜欢
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 2010-12-24
      相关资源
      最近更新 更多