ActiveMQ:如何将旧邮件出列?

Kic*_*obo 4 java activemq-classic jms

我正在学习如何使用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();
Run Code Online (Sandbox Code Playgroud)

这是我的生产者代码:

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();
Run Code Online (Sandbox Code Playgroud)

是否有任何其他配置我应该添加到ActiveMQ,以便我的消费者可以收到旧消息?

Aar*_*lla 6

你必须让你的消费者"永久".否则,AMQ会在取消订阅后立即"忘记"他们.为此,请使用Session.createDurableSubscriber()