【问题标题】:JMS multiple durable subscription to one topicJMS 对一个主题的多次持久订阅
【发布时间】:2014-11-13 13:15:45
【问题描述】:

我开始 JMS 已经一个星期了。我使用 Netbeans、maven 和 glassfish 创建了 JMS。

我有一个生产者一个持久消费者,我想将另一个持久消费者添加到同一个主题(不是队列)。有可能这样做吗? 因为我希望所有消费者都消费生产者发送的所有消息,无论消费者是否离线。

有什么建议吗? 谢谢

public class DurableReceive {

@Resource(lookup = "jms/myDurableConnectionFactory")
private static ConnectionFactory connectionFactory;

@Resource(lookup = "jms/myNewTopic")
private static Topic topic;

public static void main(String[] args) {
    Destination dest = (Destination) topic;
    JMSConsumer consumer;
    boolean messageReceived = false;
    String message;
    System.out.println("Waiting for messages...");

    try (JMSContext context = connectionFactory.createContext();) {
        consumer = context.createDurableConsumer(topic, "Subscriber1");
        while (!messageReceived) {
            message = consumer.receiveBody(String.class);
            if (message != null) {
                System.out.print("Received the following message: " + message);
                System.out.println("(Received date: " + new Date() + ")\n");
            } else {
                messageReceived = true;
            }
        }
    } catch (JMSRuntimeException e) {
        System.err.println("@#$%RuntimeException occurred: " + e.toString());
        System.exit(1);
    }
}

}

【问题讨论】:

    标签: java jms-topic durable-subscription


    【解决方案1】:

    您可以为不同的持久消费者设置不同的clientID。 Jms-broker 使用 subscriptionName 和 clientId 的组合来识别唯一的客户端(因此,如果您的订阅者具有唯一的 clientID - 它可以接收自己的消息)。您可以在 JmsContext 中设置 clientID。

    【讨论】:

    • 您使用哪个框架来连接 JMS-provider?
    • 我真的不知道什么是框架,但我猜它的 java jdk?
    • 所以您正在创建一些 javax.jms.Connection 来连接到代理。只需在 connection.start() 之前调用 connecion.setClientID(uuid)
    • connectionFactory.setClientID(uuid)
    • 它不允许我在 connectionFactory 但在上下文中设置ClientID()
    猜你喜欢
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2012-05-30
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 2017-10-08
    相关资源
    最近更新 更多