ActiveMQ实现request/reply模型
实现思路
首先,Client的Producer发出一个JMS message形式的request,request上附加了一些额外的属性:
- correlation ID(用来和返回的correlation ID对比进行验证),
- JMSReplyTo属性(放置jms message的destination,这样worker的Consumer获得jms message就能得到destination)
然后,Worker的consumer收到requset,处理request并用producer发出reply,destination就从requset的JMSReplyTo属性中得到
下面贴出Client和Server的代码:
Client
package com.tgb.activemq;
import java.util.UUID;
import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.broker.BrokerService;
public class Client implements MessageListener {
private BrokerService broker;
private final String brokerUrl = "tcp://localhost:61616";
private Connection connection;
private Session session;
private Queue tempDest;
private MessageProducer producer;
private MessageConsumer consumer;
private final String requestQueue = "requestQueue";
public void start() throws