Spring JMS与ActiveMQ通讯示列

来源:互联网 发布:商标图形设计软件 编辑:程序博客网 时间:2024/05/22 09:07

首先是spr-mq.xml的配置

<!-- 配置JMS连接工厂 --><bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">    <property name="brokerURL" value="failover:(tcp://${sys.mq})"/></bean>
//如果你需要多种类型的数据放入各自的队列,则再按下面队列的定义再定义队列则可。下面的bean的命名不同即可。即就是定义多个队列。
<!-- 定义你的队列 start  --><!--设置消息队列的名字,即队列的目的地--><bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">    <constructor-arg value="queueDestination" /></bean><!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 --><bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">    <property name="connectionFactory" ref="connectionFactory" />    <property name="defaultDestination" ref="queueDestination" />    <property name="receiveTimeout" value="10000" /></bean><!-- queueDestinationGetDeviceOperate 消息生成者 --><bean id="mqProducerService" class="com.coocaa.activemq.MqProducerService">    <property name="jmsTemplate" ref="jmsTemplate" /></bean><!-- 消息监听者 --><bean id="queueMessageListener" class="com.web.queque.QueueMessageListener" /><!-- 消息监听容器 --><bean id="jmsContainer"      class="org.springframework.jms.listener.DefaultMessageListenerContainer">    <property name="connectionFactory" ref="connectionFactory" />    <property name="destination" ref="queueDestination" />    <property name="messageListener" ref="queueMessageListener" /></bean><!-- 定义你的队列end -->

发送消息:

在你需要发送消息的类里面注入:

@Resource(name = "mqProducerService")MqProducerService mqProducerService;@Resource(name = "queueDestination")Destination queueDestination;

需要发送的数据:

Map<String,Object> map = new HashMap<String, Object>();map.put("param", param);mqProducerService.sendMessage(queueDestination, JSONObject.fromObject(map).toString());

MqProducerService.java:

 public class MqProducerService {   private JmsTemplate jmsTemplate;     /**   * 消息生产者代码   * 向指定队列发送消息   */  public void sendMessage(Destination destination, final String msg) {    System.out.println("向队列" + destination.toString() + "发送了消息------------" + msg);    jmsTemplate.send(destination, new MessageCreator() {      public Message createMessage(Session session) throws JMSException {        return session.createTextMessage(msg);      }    });  } /** * 向默认队列发送消息 */  public void sendMessage(final String msg) {    String destination =  jmsTemplate.getDefaultDestination().toString();    System.out.println("向队列" +destination+ "发送了消息------------" + msg);    jmsTemplate.send(new MessageCreator() {      public Message createMessage(Session session) throws JMSException {        return session.createTextMessage(msg);      }    });   }   public void setJmsTemplate(JmsTemplate jmsTemplate) {    this.jmsTemplate = jmsTemplate;  }  }

监听器接受队列数据:

QueueMessageListener.java

public class QueueMessageListener implements MessageListener{       @Override    public void onMessage(Message message) {        TextMessage textMessage = (TextMessage) message;        try {            System.out.println("QueueMessageListenerGetDeviceOperate 收到了文本消息:"+textMessage.getText());            JSONObject jsonObject = JSONObject.fromObject(textMessage.getText());            Map<String ,Object> map = JSONObject.fromObject(jsonObject);            String param = map.get("param").toString();            JSONObject jsonObjectParam = JSONObject.fromObject(param);            try {                //你需要处理的逻辑            }catch (Exception e){                System.out.println("QueueMessageListenerGetDeviceOperate 出错:"+e.getMessage());                e.printStackTrace();            }        } catch (JMSException e) {            e.printStackTrace();        }    }}

0 0
原创粉丝点击