ActiveMQ请求和应答模式

一、代码实现

要实现ActiveMQ的请求和应答模式,需要3部分组成:ActiveMQ消息总线、Client端(消息的发送者)、Server端(消息的接收者)

1、ActiveMQ消息总线

变量:

activemqBusAddress:消息总线部署的IP地址

activemqUsername:与消息总线建立连接需要的用户名

activemqPassword:与消息总线建立连接需要的用户密码

componentId:每个Client需要有唯一的componentId作为标示

connection:连接信息,类型Connection

session:为每一个连接创建session,用于存储消息信息,类型Session

方法:

initActiveMQ():初始化ActiveMQ,建立连接

destroy():销毁ActiveMQ,释放内存

2、Client(消息的producer)

1)两个队列:

ActiveMQQueue requestQueue = new ActiveMQQueue(RequestQueue);//用于消息发送的队列,RequestQueue为一个字符串,表示队列名字(同一类型的消息需要使用同一个请求队列)

ActiveMQQueue responseQueue = new ActiveMQQueue(ResponseQueue);//用于接收响应的队列,ResponseQueue为一个字符串,表示队列名字(不同的Client应用不同的队列名字标识)

2)消息发送

MessageProducer producer1 = activeMQBus.getProducer(requestQueue);//定义消息发送者

Message textMessage1 = activeMQBus.createTextMessage("消息内容");//设置消息内容

textMessage1.setJMSReplyTo(responseQueue);//指定响应返回的队列

textMessage1.setJMSCorrelationID(activeMQBus.getComponentId());//设置ClientID

producer1.send(textMessage1);//发送消息

3)响应接收

MessageConsumer consumer = activeMQBus.getConsumer(responseQueue);//定义响应接受者

consumer.setMessageListener(new MessageListener(){//设置监听等待响应

@Override

public void onMessage(final Message message) {

// TODO Auto-generated method stub

try {

message.acknowledge();//接收响应

String request = ((TextMessage) message).getText();//获得响应内容

} catch (JMSException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

3、Server(消息的Consumer)

1)一个队列:

MessageConsumer consumer = activeMQBus.getConsumer(requestQueue);//用于接收消息的队列,RequestQueue为一个字符串,表示队列名字(RequestQueue应于消息发送的队列名相同)

2)消息接收

consumer.setMessageListener(new MessageListener(){//设置消息接收监听

@Override

public void onMessage(final Message message) {

// TODO Auto-generated method stub

try {

message.acknowledge();//接收消息

String request = ((TextMessage) message).getText();//获得消息内容

//3)发送响应

TextMessage response = (TextMessage) activeMQBus.createTextMessage("响应的文本内容");//设置响应的内容

MessageProducer producer = activeMQBus.getProducer(message.getJMSReplyTo());//根据请求的队列设置响应的发送者

producer.send(response);//发送响应

} catch (JMSException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});

二、测试结果

1、  Client的每一条消息都会随机的被某一个Server接收,并未发生重复接收或遗漏的现象。

2、  Server端在成功接收消息后,会将响应信息返回给发送消息的相应Client上。

时间: 2024-10-02 02:53:06

ActiveMQ请求和应答模式的相关文章

saltstack系列(二)——zmq应答模式

python zeromq介绍 1.ZeroMQ并不是一个对socket的封装,不能用它去实现已有的网络协议. 2.有自己的模式,不同于更底层的点对点通讯模式. 3.有比tcp协议更高一级的协议(当然ZeroMQ不一定基于TCP协议,它也可以用于进程间和进程内通讯). 4.改变了通讯都基于一对一的连接这个假设. zeromq通讯模型 1.请求应答模型 由请求端发起请求,并等待回应端回应请求.从请求端来看,一定是一对对收发配对的:反之,在回应端一定是发收对.请求端和回应端都可以是1:N的模型.通常

JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式

最近在学习JSP相关基础知识,我们都知道JSP当中存在一组不使用new关键字就可以在脚本和表达式中使用的对象,在Web开发中经常使用.为了能更好的理解这些对象,在此对JSP内置对象作一些归纳. 目录: JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式 JSP内置对象——out(待更新) JSP内置对象——request/response(待更新) JSP内置对象——session(待更新) JSP内置对象——application(待更新) JSP内置对象——其他

WCF系列教程之消息交换模式之请求与答复模式(Request/Reply)

1.使用WCF请求与答复模式须知 (1).客户端调用WCF服务端需要等待服务端的返回,即使返回类型是void (2).相比Duplex来讲,这种模式强调的是客户端的被动接受,也就是说客户端接受到响应后,消息交换就结束了 (3).在这种模式下,服务端永远是服务端,客户端就是客户端,职责分明. (4).它是缺省的消息交换模式,设置OperationContract便可以设置为此种消息交换模式 2.代码示例 服务层接口IReqReplyService.cs代码如下: using System; usi

WCF初探-4:WCF消息交换模式之请求与答复模式

1.请求与答复模式( Request/Reply) 这种交换模式是使用最多的一中,它有如下特征: 调用服务方法后需要等待服务的消息返回,即便该方法返回 void 类型 相比Duplex来讲,这种模式强调的是客户端的被动接受,也就是说客户端接受到响应后,消息交换就结束了. 在这种模式下,服务端永远是服务端,客户端就是客户端,职责分明. 它是缺省的消息交换模式,设置OperationContract便可以设置为此种消息交换模式 接下来我们通过实例来演示一下,参照WCF消息交换模式之单向模式中的例子,

Http请求和相应模式(B/S)

B/S模式 服务器端的接受数据 :浏览器端 表单格式 <form></form> GET:请求方式, /index.html  Web浏览器上的资源路径 uname=bjxt&pwd=1233456   请求的资源 修改为POST请求模式 POST请求模式  Web浏览器资源的路径 请求参数不存在了,其实是读取数据的方式不对,因为每次读取信息都是一行一行的读取, 然而POST的消息体与消息报头隔离有多行,所以无法读到消息体 改变接收信息中读取信息的方式 结果: 最后一行就是

iOS 自动处理 Http 请求的应答内容字符编码

iOS 请求 URL 返回内容的字符集编码处理自适应 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 我们来看一下如何访问 "web service",暂时先不考虑安全链接问

ActiveMQ发布-订阅消息模式

一.订阅杂志我们很多人都订过杂志,其过程很简单.只要告诉邮局我们所要订的杂志名.投递的地址,付了钱就OK.出版社定期会将出版的杂志交给邮局,邮局会根据订阅的列表,将杂志送达消费者手中.这样我们就可以看到每一期精彩的杂志了. 仔细思考一下订杂志的过程,我们会发现这样几个特点:1.消费者订杂志不需要直接找出版社:2.出版社只需要把杂志交给邮局:3.邮局将杂志送达消费者.邮局在整个过程中扮演了非常重要的中转作用,在出版社和消费者相互不需要知道对方的情况下,邮局完成了杂志的投递. 二. 发布-订阅消息模

ARP的一次请求与应答

ARP: 我们知道,网络层和网络层以上使用的是IP地址,但在实际网络的链路上传送数据帧时,数据包首先是被网卡接受到再去处理上层协议的,所以最终还是必须使用该网络的硬件地址.但IP地址和下面的网络的硬件地址之间由于格式不同而不存在简单的映射关系(例如,IP地址有32位,而局域网的硬件地址是48位).此外,在一个网络上可能经常会有新的主机加进来,或撤走一些主机.更换网络适配器也会使主机的硬件地址改变.地址解析协议(ARP)解决这个问题的方法是,在主机ARP高速缓存中应存放一个从IP地址到硬件地址的映

ActiveMQ队列、主题模式区别

1.ActiveMQ队列模式如下图,生产者创建消息到消息中间件,再"均分给消费者". 2.ActiveMQ主题模式如下图,生产者创建消息到消息中间件,消费者会接受到订阅的主题中所有的消息.在主题模式下,消费者获取不到订阅之前的中间件中的消息. 原文地址:https://www.cnblogs.com/GrapefruitTea/p/9941169.html