【问题标题】:ActiveMQ: how to dequeue older messages?ActiveMQ:如何使旧消息出列?
【发布时间】:2010-12-22 19:19:32
【问题描述】:

我正在学习如何使用 ActiveMQ,现在我们面临以下问题。

假设我在 ActiveMQ 上有一个名为 topic.test 的主题,它有两个订阅者。 在给定的时刻,我只有一个订阅者在等待消息,而生产者为我上面提到的主题发送了一条消息。

好的,已连接的订阅者收到消息,但其他订阅者不应该稍后在连接时收到该消息吗?好吧,就我而言,它没有发生:我的订阅者只在连接时接收消息。他们没有收到在未连接时发送的所有其他消息。我可能做错了什么?

这是我为测试 ActiveMQ 而编写的一些源代码。也许你能找到它的问题所在。

我的消费代码:

        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        Connection connection = connectionFactory.createConnection();
        connection.setClientID("leitorTeste");
        conexao.start();
        Session sessao = conexao.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Topic fonte = sessao.createTopic("topic.test");
        MessageConsumer consumer = sessao.createConsumer(fonte);
        javax.jms.Message presente = null;
        while ((presente = consumer.receive()) != null) {
            System.out.println(((TextMessage) presente).getText());
        }
        consumer.setMessageListener(new LeitorMensagens());
        conexao.close();

这是我的生产者代码:

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        Connection connection = connectionFactory.createConnection();
        Session sessao = conexao.createSession(true, Session.AUTO_ACKNOWLEDGE);
        connection.start();
        Destination destino = sessao.createTopic("topic.test");
        MessageProducer produtorMensagem = sessao.createProducer(destino);
        produtorMensagem.setDeliveryMode(DeliveryMode.PERSISTENT);
        TextMessage message = sessao.createTextMessage("Hi!");
        produtorMensagem.send(message);
        sessao.commit();
        connection.close();

我是否应该向 ActiveMQ 添加任何其他配置,以便我的消费者可以获取较旧的消息?

【问题讨论】:

    标签: java jms activemq


    【解决方案1】:

    您必须让您的消费者“永久”。否则,AMQ 一旦取消订阅,就会“忘记”它们。为此,请使用Session.createDurableSubscriber()

    【讨论】:

    • 非常感谢。完美解决了我的问题
    【解决方案2】:

    您还可以在代理上设置一种称为retroactive consumer 的策略。这适用于主题订阅者 - 不是持久的,但可能希望接收他们可能错过的“最近”消息 - 另请参阅 Subscription Recovery Policy

    【讨论】:

      猜你喜欢
      • 2017-02-23
      • 2017-05-30
      • 2013-06-25
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 2015-09-23
      相关资源
      最近更新 更多