首页 > 代码库 > ActiveMQ请求和应答模式

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上

 

ActiveMQ请求和应答模式