用于多个jms服务器的单jms使用者

时间:2013-01-02 12:27:02

标签: jms weblogic middleware

我使用的是分布式jms队列,weblogic是我的app服务器。我的集群环境中部署了三台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。这不起作用。有任何建议请..

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

“队列成员可以通过在管理控制台中配置Forward Delay属性将消息转发给其他队列成员,默认情况下禁用该属性。此属性定义带有消息的分布式队列成员的时间量(以秒为单位),但是没有消费者的人会在将消息转发给其他有消费者的队列成员之前等待。“

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

您可以通过管理每个队列来配置此功能。