ActiveMQ에는 실제로 메시지가 수신되었음을 알리는 AUTO Acknowledge라는 기능이 있습니다 (생산자를 인정하지 않음).소비자의 승인을 생산자에게 보내고 activemq 및 rabbitmq에서 처리합니다.
ActiveMQ 또는 RabbitMQ에서 소비자의 승인을 보낼 수 있는지 알고 싶습니다. 생산자에서 확인 응답 메시지를 처리하고 응답을받지 못하면 소비자에게 다시 메시지를 보냅니다.
ActiveMQ에는 실제로 메시지가 수신되었음을 알리는 AUTO Acknowledge라는 기능이 있습니다 (생산자를 인정하지 않음).소비자의 승인을 생산자에게 보내고 activemq 및 rabbitmq에서 처리합니다.
ActiveMQ 또는 RabbitMQ에서 소비자의 승인을 보낼 수 있는지 알고 싶습니다. 생산자에서 확인 응답 메시지를 처리하고 응답을받지 못하면 소비자에게 다시 메시지를 보냅니다.
비동기 매체를 통해 동기식 유즈 케이스를 수행하려고합니다.
의심 RPC를 피할 때 : https://www.rabbitmq.com/tutorials/tutorial-six-python.html 및 https://www.rabbitmq.com/direct-reply-to.html
을 심지어 저자는 그것을 피하기 위해 조언을 통지하십시오 - 여기에 설명 된대로
는 RabbitMQ의 경우는, RPC를 사용할 수 있습니다. 가능한 경우 RPC와 같은 차단 대신 비동기 파이프 라인을 사용해야합니다. 결과는 비동기 적으로 다음 계산 단계로 푸시됩니다.
RabbitMQ 자바 클라이언트는 자동 응답 (ACK) com.rabbitmq.client.Channel.basicConsume
을 통해 제공합니다.
은 적어도 ActiveMQ를위한 -이 내장되어 당신은 단순히 당신이 소비 메시지를 모니터링 할 큐에 대한 자문 주제를 듣고 activemq.xml
<policyEntry queue=">" advisoryForConsumed="true"/>
에 전원을 켜해야합니다.. 그런 다음 메시지 ID를 추출 할 수 있으며 미해결 요청을 "체크"하지 않을 수 있습니다.
완전한 종단 간 확인을 위해 더 많은 맞춤 설정을 권합니다. 나는. 제작자 앱은 생성 된 메시지의 상태에 대한 응답을받는 "응답"대기열을 청취해야합니다. 나는. 처리가 실패한 경우 이유 등을 알고 싶을 수 있습니다.
어쨌든 여기에 ActiveMQ의 수신 확인을 수신하는 제작자가있는 코드가 있습니다.
public void run() throws Exception {
ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory("tcp://localhost:61616");
conn = cf.createConnection();
sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination dest = sess.createQueue("duck");
MessageConsumer mc = sess.createConsumer(AdvisorySupport.getMessageConsumedAdvisoryTopic(dest));
mc.setMessageListener(this);
conn.start();
MessageProducer mp = sess.createProducer(sess.createQueue("duck"));
mp.send(sess.createTextMessage("quack"));
}
public void onMessage(Message msg) {
try {
String msgId = msg.getStringProperty("orignalMessageId");
System.out.println("Msg: " + msgId + " consumed");
} catch (Exception e) {
e.printStackTrace();
}
}
MQ를 신뢰하지 않거나 동기/차단 호출을 찾고있는 것처럼 들립니다. 후자 인 경우 HTTP와 같은 방식으로 설계된 무언가로 이동하지 않으시겠습니까? – chrylis