activeMQ的request-response请求响应模式
一:为什么需要请求响应模式
在消息中间中,生产者只负责生产消息,而消费者只负责消费消息,两者并无直接的关联。但是如果生产者想要知道消费者有没有消费完,或者用不用重新发送的时候,这时就要用到请求响应模式。
应用场景:
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请求响应模式的更多相关文章
- NetMQ(二): 请求响应模式 Request-Reply
ZeroMQ系列 之NetMQ 一:zeromq简介 二:NetMQ 请求响应模式 Request-Reply 三:NetMQ 发布订阅模式 Publisher-Subscriber 四:NetMQ ...
- 浅谈WCF的三种通信模式:请求响应模式、数据报模式和双工通讯模式
一: WCF的服务端与客户端在通信时有三种模式:请求响应模式.数据报模式和双工通讯模式. 说一下基本知识, 1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契 ...
- WCF消息交换模式之请求-响应模式
WCF的消息交换模式(MEP)有三种:请求/响应.单向模式和双工模式.WCF的默认MEP是请求/响应模式. 请求/响应模式操作签名代码如下,无需指定模式,默认就是. [OperationContrac ...
- 一: WCF的服务端与客户端在通信时有三种模式:请求响应模式、数据报模式和双工通讯模式。
说一下基本知识, 1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契约 2.要想将方法作为wcf服务方法发布给外部调用,则一定要加上 [Operatio ...
- request和response——请求响应对象
请求对象--request 获取get请求的值 一次请求,返回一个响应. 地址栏:http://127.0.0.1:8000/day3/get_request?lan=python 问号:代表请求参数 ...
- 【JavaWeb】请求和响应Request&Response
请求 请求对象 关于请求 顾名思义,意思就是请求一个"对象" 请求不到的,别想了 请求,就是使用者希望从服务器端索取一些资源,向服务器发出询问.在B/S架构中,就是客户浏览器向服务 ...
- “一切都是消息”--MSF(消息服务框架)之【请求-响应】模式
在前一篇, “一切都是消息”--MSF(消息服务框架)入门简介, 我们介绍了MSF基于异步通信,支持请求-响应通信模式和发布-订阅通信模式,并且介绍了如何获取MSF.今天,我们来看看如何使用MSF来做 ...
- “一切都是消息”--iMSF(即时消息服务框架)之【请求-响应】模式(点对点)
MSF的名字是 Message Service Framework 的简称,由于目前框架主要功能在于处理即时(immediately)消息,所以iMSF就是 immediately Message S ...
- javaweb中重定向和请求转发(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的区别
先来两张图,方便理解: 可以看出,重定向时,是服务器向游览器重新发送了一个response命令,让游览器再次向url2发送请求,以获取url2的资源 而请求转发时,类似于是服务器自己向自己发了一个跳转 ...
随机推荐
- Python Basics
廖雪峰老师博客 1. 可变参数(例如 *nums),允许传入一个list 或 tuple,但是 关键字参数(例如 **kv),允许传入一个dict,具体可参考此页: 2. set与dict类似,但只是 ...
- CentOS7安装minio
[root@localhost ~]# wget https://dl.minio.io/server/minio/release/linux-amd64/minio -bash: wget: 未找到 ...
- axios 同步问题
Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中(这是官方文档给出的一个解释说明) 它的主要作用是向后台发起异步请求,还有在请求中做更多的可控功能 1. ...
- Java基础之创建实例化对象的方式
Java中创建(实例化)对象的五种方式 1.用new语句直接创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3 ...
- hibernate对象的三种状态及转换
一.hibernate对象三种状态 Transient(瞬时状态):没有session管理,同时数据库没有对应记录 举例:new 出来的对象还没有被session管理,此时该对象处于Transient ...
- SQL Server ->> MSDB.DBO.AGENT_DATETIME函数从整型转时间日期格式
SELECT MSDB.DBO.AGENT_DATETIME(20170101,0), CAST(CAST(20170101 AS NVARCHAR(50)) AS DATETIME) 返回 2017 ...
- SQL语句的执行顺序 1>优先执行,然后依数字排序
1>…From 表 2>…Where 条件 3>…Group by 列 4>…Having 筛选条件 ...
- 使用 grep 的 -o 和 -E 选项进行正则的精确匹配
sed 命令可以很好的进行行匹配,但从某一行中精确匹配某些内容,则使用 grep 命令并辅以 -o 和 -E 选项可达到此目的.其中 -o 表示“only-matching”,即“仅匹配”之意.光用它 ...
- Python实例---基于页面的后台管理[简单版]
后台管理菜单 + 母板[css/content/js] 向后台提交数据[2种]: 1. 模态对话框(数据少操作,且Js复杂): form表单 :优点:简单,前端提交后后台处 ...
- 关于eclipse没有js、xml代码提示的解决:下载一个插件
1)eclipse打开帮助 2)Eclipse Marketplace,然后搜索AngularJS Eclipse 安装后重启就行了 xml的搜索Rinzo. 没有vpn,我的网络到达不了.