Как читать старые сообщения из очереди ActiveMQ с помощью Apache Camel - PullRequest
0 голосов
/ 07 июля 2019

У меня есть клиент Apache Camel (потребитель), который прослушивает сообщения из удаленной темы ActiveMQ. Я заметил, что он читает сообщения только во время работы Consumer.

если потребитель не слушает, а производитель отправляет сообщения, он навсегда ставится в очередь и выбирается потребителем.

Я хочу, чтобы мой Клиент читал все сообщения в очереди, когда он работает

    public static void main(String[] args) throws Exception
    {
        ActiveMQComponent amq = new ActiveMQComponent();
        amq.setConnectionFactory( new ActiveMQConnectionFactory() );
        amq.setUsername("admin");
        amq.setPassword("admin");
        amq.setBrokerURL("tcp://localhost:8161");

        Main main = new Main();
        main.bind("activemq", amq);
        main.addRouteBuilder(new MyRouter());
        main.run(args);
    }

Ниже приведен код маршрутизатора

    public void configure() throws Exception
    {
        from("activemq:topic:saadtopic")
        .transform(simple(" ${body}"))
        .to("stream:out");
    }

ActiveMQ = 5.15.9 ApacheCamel = 2.24.1

enter image description here

1 Ответ

2 голосов
/ 08 июля 2019

Если вы не используете долговременные подписки и отправляете сообщение в тему, у которой нет подписчиков, сообщение по существу удаляется, и его больше никогда не увидеть. Посредник сохраняет сообщения Темы только в том случае, если существует постоянная подписка с автономным подписчиком, и сообщение помечается как постоянное.

Если вы хотите, чтобы у вас был доступ к сообщениям, отправляемым, когда потребители не работают, вам нужно убедиться, что эти потребители запускались хотя бы один раз и создали подписки на длительные темы.

...