ActiveMQ : 이전 메시지를 탈신하는 방법은 무엇입니까?
문제
나는 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()
제휴하지 않습니다 StackOverflow