문제

나는 ActiveMQ를 사용하는 방법을 배우고 있으며 이제 우리는 다음과 같은 문제에 직면하고 있습니다.

가입자가 두 명인 activeemq에 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에 추가해야 할 다른 구성이 있습니까?

도움이 되었습니까?

해결책

소비자를 "영구적으로"만들어야합니다. 그렇지 않으면, AMQ는 구독을 취소하자마자 그들에 대해 "잊어 버린다". 이렇게하려면 사용하십시오 Session.createDurableSubscriber()

다른 팁

a라는 것이 있습니다 소급 소비자 정책 브로커를 설정할 수도 있습니다. 이것은 내구성이 없지만 놓친 '최근'메시지를 받기를 원할 수도있는 주제 가입자를위한 것입니다. 가입 복구 정책

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top