【问题标题】:JMS QPID handle reconnectJMS QPID 句柄重新连接
【发布时间】:2019-05-01 09:09:52
【问题描述】:

我正在使用带有 QPID 的 JMS,并且想知道如果无法再访问代理,如何配置重新连接:

try (Connection connection = jmsFactory.createConnection(); Session session = connection.createSession()) {
            Queue queue = session.createQueue("queue:testQueue");
            Topic topic = session.createTopic("topic:testTopic");
            TextMessage message = session.createTextMessage("toQueue");
            TextMessage message2 = session.createTextMessage("toTopic");

            MessageProducer producer = session.createProducer(queue);
            producer.send(message);
            MessageProducer producer2 = session.createProducer(topic);
            producer2.send(message2);
            MessageConsumer consumer = session.createConsumer(queue);
            consumer.setMessageListener(new MessageListener() {

                @Override
                public void onMessage(Message message) {
                    try {
                        String content = extractBody(message);
                        System.out.println("From: " + message.getJMSDestination() + " Content: " + content);
                        message.acknowledge();
                    } catch (JMSException e) {
                        System.out.println("CANNOT GET CONTENT= " + e);
                    }
                }
            });
            connection.start();
            consumer.close();
  }catch ...

如果代理不再可用,我想重新连接,直到代理再次备份。

【问题讨论】:

    标签: java jms qpid


    【解决方案1】:

    如果您指的是Qpid JMS,那么客户端会提供故障转移传输来为您处理自动重新连接,这样您的代码就不需要做任何事情。 documentation 解释了如何配置它,基本上你修改你的 URI 以使用故障转移标记包装主机信息:

     failover:(amqp://123.0.0.123:5672)
    

    【讨论】:

    • 所以我必须使用这个故障转移标签作为远程 URL,如 factory.setRemoteURI("failover:(amqp://123.0.0.123:5672)");
    • 按照文档使用故障转移,您可以使用 setRemoteURI 选项或仅使用所需的 URI 创建 ConnectionFactory
    猜你喜欢
    • 2021-03-03
    • 2011-11-23
    • 2016-08-06
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 2015-04-06
    • 2017-08-14
    • 2020-04-26
    相关资源
    最近更新 更多