一:为什么需要请求响应模式

  在消息中间中,生产者只负责生产消息,而消费者只负责消费消息,两者并无直接的关联。但是如果生产者想要知道消费者有没有消费完,或者用不用重新发送的时候,这时就要用到请求响应模式。

  应用场景:

  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();
}
}
}

4:修改消费端代码

try {
System.out.println("QueueReceiver1 accept msg : "+((TextMessage)message).getText());
//业务工作
reploy.send(((TextMessage)message).getText(),message);  //消费完成以后发送一个消息,告诉生产者已经消费成功。
}catch (Exception e){
e.printStackTrace();
}
5:创建消费者发送消息
public void send(final String consumerMsg, Message produceMessage) throws Exception{
jmsTemplate.send(produceMessage.getJMSReplyTo(), new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
Message msg = session.createTextMessage("ReplyTo "+consumerMsg);
return msg;
}
});
} 以上就是在spring当中使用,请求-应答模式。 第二种:在spring-boot当中使用请求-应答
1:mq的发送者
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service; import javax.jms.Destination; /**
* mq发送者
*/
@Service
public class ActivePro { @Autowired
private JmsMessagingTemplate jmsTemplate; public void sendMessage(Destination destination, String message){
jmsTemplate.convertAndSend(destination,message);
} @JmsListener(destination = "boot.reploy")
public void receiveQueue(String text){
System.out.println(text);
}
}

 2:mq的消费者

import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component; /**
* mq的消费者
*/
@Component
public class ActiveCon { @JmsListener(destination = "boot1.queue")
@SendTo("boot.reploy")
public String receiveQueue(String text){
System.out.println(text);
return "I am tom";
}
}

 3:测试的

    @Test
public void contextLoads2() {
try {
Destination destination =
new ActiveMQQueue("boot1.queue");
produce.sendMessage(destination,"aaaaa");
System.in.read();
}catch (Exception e){
e.printStackTrace();
}
}
												

activeMQ的request-response请求响应模式的更多相关文章

  1. NetMQ(二): 请求响应模式 Request-Reply

    ZeroMQ系列 之NetMQ 一:zeromq简介 二:NetMQ 请求响应模式 Request-Reply 三:NetMQ 发布订阅模式 Publisher-Subscriber 四:NetMQ ...

  2. 浅谈WCF的三种通信模式:请求响应模式、数据报模式和双工通讯模式

    一: WCF的服务端与客户端在通信时有三种模式:请求响应模式.数据报模式和双工通讯模式. 说一下基本知识,  1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契 ...

  3. WCF消息交换模式之请求-响应模式

    WCF的消息交换模式(MEP)有三种:请求/响应.单向模式和双工模式.WCF的默认MEP是请求/响应模式. 请求/响应模式操作签名代码如下,无需指定模式,默认就是. [OperationContrac ...

  4. 一: WCF的服务端与客户端在通信时有三种模式:请求响应模式、数据报模式和双工通讯模式。

    说一下基本知识,  1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契约 2.要想将方法作为wcf服务方法发布给外部调用,则一定要加上    [Operatio ...

  5. request和response——请求响应对象

    请求对象--request 获取get请求的值 一次请求,返回一个响应. 地址栏:http://127.0.0.1:8000/day3/get_request?lan=python 问号:代表请求参数 ...

  6. 【JavaWeb】请求和响应Request&Response

    请求 请求对象 关于请求 顾名思义,意思就是请求一个"对象" 请求不到的,别想了 请求,就是使用者希望从服务器端索取一些资源,向服务器发出询问.在B/S架构中,就是客户浏览器向服务 ...

  7. “一切都是消息”--MSF(消息服务框架)之【请求-响应】模式

    在前一篇, “一切都是消息”--MSF(消息服务框架)入门简介, 我们介绍了MSF基于异步通信,支持请求-响应通信模式和发布-订阅通信模式,并且介绍了如何获取MSF.今天,我们来看看如何使用MSF来做 ...

  8. “一切都是消息”--iMSF(即时消息服务框架)之【请求-响应】模式(点对点)

    MSF的名字是 Message Service Framework 的简称,由于目前框架主要功能在于处理即时(immediately)消息,所以iMSF就是 immediately Message S ...

  9. javaweb中重定向和请求转发(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的区别

    先来两张图,方便理解: 可以看出,重定向时,是服务器向游览器重新发送了一个response命令,让游览器再次向url2发送请求,以获取url2的资源 而请求转发时,类似于是服务器自己向自己发了一个跳转 ...

随机推荐

  1. restful知识点之五解析器_响应器_分页器

    解析器 request.post:当数据时content-type urlencoded类型时才有数据 当content-type:是formdata时需要从request.body里取数据 requ ...

  2. 搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)--配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  3. 找工作笔试面试那些事儿(13)---操作系统常考知识点总结 ZZ 【操作系统】

    http://blog.csdn.net/han_xiaoyang/article/details/11285485 上一节对数据库的知识做了一个小总结,实际找工作过程中,因为公司或单位侧重点不一样, ...

  4. nginx部署及简单优化

    研究nginx优化时反复安装清理nginx,为方便做了一个简单部署脚本,用的最新稳定版1.14.0,默认路径,加入systemd系统进程管理中,可以通过systemd管理nginx的启动.终止.重载. ...

  5. MySQL 数据库--权限管理

    权限管理 1.创建账号 创建本地账号 create user 'luke'@'localhost' identified by '123'; #mysql -uluke -p123 创建远程账号 cr ...

  6. MySQL 数据库 -- 数据操作

    数据的增删改 一 介绍 MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过 ...

  7. ajax post data 获取不到数据

    ajax post  data  获取不到数据,注意 content-type的设置 .post/get关于 jQuery data 传递数据.网上各种获取不到数据,乱码之类的.好吧今天我也遇到了,网 ...

  8. php给图片加文字

    在图片上加文字是论坛,博客,新闻网站上最喜欢用的功能,防止盗图.这里看看代码是如何实现的. 首先还是upload_image.php这个文件,注意这里的caption文本框中输入的内容最终会写到图片上 ...

  9. Github文件夹下载到本地

    1.如图:需要将以下文件夹下载到本地. https://github.com/aspnet/Docs/tree/master/aspnet/mvc/overview/getting-started/i ...

  10. mac使用指南--软件安装部分

    最近因为开发需要,换了个mac,发现和Windows下面的操作和习惯真是千差万别啊,在这里记录一下,有需要的也可以参考一下. 安装前强烈建议根据个人习惯设置好触控板!!!什么单击双击选中拖拽的统统设好 ...