ActiveMQ-request/response请求/响应模型的几种实现

本文介绍了ActiveMQ中实现request/response模型的三种方法:1) QueueRequestor,同步阻塞方式,多线程对应多个消息;2) TemporaryQueue,通过JmsReplyto设定回复目的地,异步监听响应;3) JMSCorrelationID,使用关联ID进行消息匹配,减少资源消耗。文中详细阐述了各自特点和适用场景。
摘要由CSDN通过智能技术生成

目录

 

1、QueueRequestor

2、TemporaryQueue

3、JMSCorrelationID


1、QueueRequestor

同步阻塞,想发多少消息,就要开多少线程。

 public QueueRequestor(QueueSession session, Queue queue)
        throws JMSException
    {
        super();

        if(queue == null) {
            throw new InvalidDestinationException("Invalid queue");
        }
        
        setSession(session);
        setTemporaryQueue(session.createTemporaryQueue());
        setSender(session.createSender(queue));
        setReceiver(session.createReceiver(getTemporaryQueue()));
    }

    public Message request(Message message) throws JMSException {
        message.setJMSReplyTo(getTemporaryQueue());
        getSender().send(message);
        return getReceiver().receive();
    }

sender:

package phs.activemq.QueueRequestor;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * 消息发送者
 * @author phs
 *
 */
public class SenderQueue {

	public static void main(String[] args) throws Exception{
		//1.获取连接工厂
		ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
				"admin",
				"admin",
				"tcp://localhost:61616"
		);
		//2.获取一个向ActiveMQ的连接
		Connection connection = connectionFactory.createConnection();
		connection.start();
		//3.获取session
		QueueSession session = (QueueSession)connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//4.找目的地,获取destination,消费端也会从这个目的地取消息
		Queue queue = session.createQueue("user");
		//Topic topic = session.createTopic("ff");

		//5.消息生产者
		QueueRequestor queueRequestor=new QueueRequestor(session,queue);
		Message textMessage = session.createTextMessage("hi");
		TextMessage responseMessage = (TextMessage) queueRequestor.request(textMessage);
		System.out.println(responseMessage.getText());


		//7.关闭连接
		//connection.close();


	}



}

receiver:

package phs.activemq.QueueRequestor;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * 消息消费者
 * &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值