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上

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值