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

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

  应用场景:

  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. Flume -- Transfer one type of source to another type

    Source within Flume is a kind of Server for outside client. Sink within Flume is a kind of client fo ...

  2. .NET AOP微型框架发布 --CleanAOP

    CleanAOP--简介 作者:立地(欧文) 邮箱:jarvin_g@126.com 导语: AOP为Aspect Oriented Programming的缩写. 意为:面向切面编程.将日志记录,性 ...

  3. 中专生自学Android到找到工作的前前后后

    我是一名中专生,在学校里读的是计算机专业,但是由于学校不好大部分同学都不爱学习来这里几乎大部分都是在混日子的,虽然我中考的成绩不差,但是因为家里穷考虑到以后没钱读大学我毅然来到这里,虽然是中专,但是我 ...

  4. SparseArray代替HashMap

    相信大家都明白,手机软件的开发不同于PC软件的开发,因为手机性能相对有限,内存也有限,所谓“寸土寸金”,可能稍有不慎,就会导致性能的明显降低.Android为了方便开发者,特意在android.uti ...

  5. 彻底澄清c/c++指针概念

    传统的指针概念教科书上已经写的很详细了,这里作为一些补充 在声明一个指针变量的时候 double  *ptr: 这是声明了一个ptr的指针变量,ptr本身是地址,它的数据类型是double  *,在变 ...

  6. Python学习---面向对象的学习[深入]

    类的深入学习    a. Python中一切事物都是对象     b. class Foo:             pass                obj = Foo()         # ...

  7. oracle sql练习 菜鸟入门!

    进入公司 ,首先是进行SQL培训 一下是针对oracle的emp与dept表进行的基础查询 --1.选择部门30中的所有员工: ; --2.列出所有办事员(CLERK)的姓名,编号和部门编号: sel ...

  8. zk集群的快速搭建

    1.上传一个zk.tar2.解压3.创建目录data4.修改zoo_sample.cfg ---> zoo.cfg5.修改文件的dataDir改为/data目录,echo 1 >/data ...

  9. jQuery Datatable 表格插件

    Datatable 总体来说很好用,可以实现即时搜索和排序.但是只能用于数据量较少的情况下,如果数据量超过1K建议还是用表格加翻页,不然会很慢. datatable 中文网  http://datat ...

  10. Math Summary 数论总结

    一.素数 Miller-Rabin 首先介绍一下伪素数:若n是一个正整数,且存在正整数a满足$a^{n-1}\equiv1\;(mod\;n)$ (费马小定理,但n不一定为素数) 那么我们说n是基于a ...