1

我正在使用分布式 jms 队列,weblogic 是我的应用服务器。我的集群环境中部署了三个 jms 服务器。例如,生产者只需使用队列 jndi 查找 'udq' 的名称发送消息。现在我已经为每个 jms 服务器关联了一个消费者,并且我能够使用该消息,到目前为止没有问题。

这是一个问题,我可以让一个消费者来使用来自 3 个 jms 服务器的消息吗?weblogic 允许使用以下语法为目标查找命名 jndi @

            qsession1 = qcon1.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
            qsession2 = qcon2.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
            qsession3 = qcon3.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

            queue1 = (Queue)ctx.lookup("JMSServer-1@UDQ");
            queue2 = (Queue)ctx.lookup("JMSServer-2@UDQ");
            queue3 = (Queue)ctx.lookup("JMSServer-3@UDQ");
            qreceiver1 = qsession1.createReceiver(queue1);
            qreceiver2 = qsession2.createReceiver(queue2);
            qreceiver3 = qsession3.createReceiver(queue3);
            qreceiver1.setMessageListener(this);
            qreceiver2.setMessageListener(this);
            qreceiver3.setMessageListener(this);

            qcon1.start();
            qcon2.start();
            qcon3.start();

我只为上述消费者实现了一个 OnMessage。这不起作用。有什么建议请..

4

2 回答 2

3

不,您不能让消费者从多个 JMS 服务器接收消息。消费者只能从一个 JMS 服务器接收消息。您需要创建多个消费者来接收来自多个 JMS 服务器的消息。

于 2013-01-03T04:11:45.967 回答
0

您可以使用“队列转发”功能。来自 wls 10.3 的在线文档:

“队列成员可以通过在管理控制台中配置转发延迟属性将消息转发给其他队列成员,默认情况下禁用该属性。该属性定义了一个分布式队列成员有消息但没有消息的时间量,以秒为单位。消费者将等待,然后再将其消息转发给其他拥有消费者的队列成员。”

这里有一个链接:http ://docs.oracle.com/cd/E13222_01/wls/docs103/jms/dds.html#wp1260816

您可以从每个队列的管理中配置此功能。

于 2015-03-24T10:51:02.580 回答