一:为什么需要请求响应模式
在消息中间中,生产者只负责生产消息,而消费者只负责消费消息,两者并无直接的关联。但是如果生产者想要知道消费者有没有消费完,或者用不用重新发送的时候,这时就要用到请求响应模式。
应用场景:
1:主要确定mq有没有正确的消费消息。
2:当某一个业务发送mq,但是需要返回结果,这时候就要用到请求响应模式。应用的场景不是很多。
二:具体的代码操作
第一种:activeMQ的spring代码
在生产者的xml配置文件中,加上一个监听的。
<jms:listener-container destination-type="queue" container-type="default"
connection-factory="connectionFactory" acknowledge="auto">
<jms:listener destination="tempqueue" ref="getResponse"></jms:listener>
</jms:listener-container>
2:生产的java代码
jmsTemplate.send(queueName, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
Message message1 = session.createTextMessage(message);
//发送的时候,告诉消费者应答消息发送到那里
Destination destination = session.createTemporaryQueue();
MessageConsumer messageConsumer = session.createConsumer(destination);
messageConsumer.setMessageListener(getResponse);
message1.setJMSReplyTo(destination);
String uid = System.currentTimeMillis()+"";
message1.setJMSCorrelationID(uid);
return message1;
}
});
3:生产者创建一个消费
@Component public class GetResponse implements MessageListener { public void onMessage(Message message) { try { System.out.println("GetResponse accept msg :"+((TextMessage)message).getText()); }catch (Exception e){ e.printStackTrace(); } } }