RabbitMQ学习之spring配置文件rabbit标签的使用

下面我们通过一个实例看一下rabbit的使用。

1.实现一个消息监听器ReceiveMessageListener.Java

 

[java] view plain copy
 
 print?
  1. package org.springframework.amqp.core;  
  2.   
  3. /** 
  4.  * Listener interface to receive asynchronous delivery of Amqp Messages. 
  5.  * 
  6.  * @author Mark Pollack 
  7.  */  
  8. public interface MessageListener {  
  9.   
  10.     void onMessage(Message message);  
  11.   
  12. }  


2.消费者配置Consumer.xml

 

 

[html] view plain copy
 
 print?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xmlns:context="http://www.springframework.org/schema/context"  
  5.        xmlns:rabbit="http://www.springframework.org/schema/rabbit"  
  6.        xsi:schemaLocation="  
  7.             http://www.springframework.org/schema/beans  
  8.                 http://www.springframework.org/schema/beans/spring-beans.xsd  
  9.             http://www.springframework.org/schema/context  
  10.                 http://www.springframework.org/schema/context/spring-context.xsd  
  11.             http://www.springframework.org/schema/rabbit  
  12.                 http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">  
  13.    
  14.    <!-- 连接服务配置  -->  
  15.     <rabbit:connection-factory id="connectionFactory" host="192.168.36.102" username="admin"  
  16.         password="admin" port="5672" virtual-host="/"  channel-cache-size="5" />  
  17.            
  18.    <rabbit:admin connection-factory="connectionFactory"/>  
  19.      
  20.    <!-- queue 队列声明-->  
  21.    <rabbit:queue durable="true" auto-delete="false" exclusive="false" name="spring.queue.tag"/>  
  22.       
  23.       
  24.    <!-- exchange queue binging key 绑定 -->  
  25.     <rabbit:direct-exchange name="spring.queue.exchange" durable="true" auto-delete="false">  
  26.         <rabbit:bindings>  
  27.             <rabbit:binding queue="spring.queue.tag" key="spring.queue.tag.key"/>  
  28.         </rabbit:bindings>  
  29.     </rabbit:direct-exchange>  
  30.       
  31.     <bean id="receiveMessageListener"  
  32.         class="cn.slimsmart.rabbitmq.demo.spring.tag.ReceiveMessageListener" />  
  33.        
  34.     <!-- queue litener  观察 监听模式 当有消息到达时会通知监听在对应的队列上的监听对象-->  
  35.     <rabbit:listener-container connection-factory="connectionFactory" acknowledge="auto" >  
  36.         <rabbit:listener queues="spring.queue.tag" ref="receiveMessageListener" />  
  37.     </rabbit:listener-container>  
  38. </beans>  

3.生产者配置Producer.xml

 

 

[html] view plain copy
 
 print?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:rabbit="http://www.springframework.org/schema/rabbit"  
  5.     xsi:schemaLocation="  
  6.             http://www.springframework.org/schema/beans  
  7.                 http://www.springframework.org/schema/beans/spring-beans.xsd  
  8.             http://www.springframework.org/schema/context  
  9.                 http://www.springframework.org/schema/context/spring-context.xsd  
  10.             http://www.springframework.org/schema/rabbit  
  11.                 http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">  
  12.   
  13.     <!-- 连接服务配置 -->  
  14.     <rabbit:connection-factory id="connectionFactory"  
  15.         host="192.168.36.102" username="admin" password="admin" port="5672"  
  16.         virtual-host="/" channel-cache-size="5" />  
  17.   
  18.     <rabbit:admin connection-factory="connectionFactory" />  
  19.   
  20.     <!-- queue 队列声明 -->  
  21.     <rabbit:queue  durable="true"  
  22.         auto-delete="false" exclusive="false" name="spring.queue.tag" />  
  23.   
  24.   
  25.     <!-- exchange queue binging key 绑定 -->  
  26.     <rabbit:direct-exchange name="spring.queue.exchange"  
  27.         durable="true" auto-delete="false">  
  28.         <rabbit:bindings>  
  29.             <rabbit:binding queue="spring.queue.tag" key="spring.queue.tag.key" />  
  30.         </rabbit:bindings>  
  31.     </rabbit:direct-exchange>  
  32.   
  33.     <!-- spring amqp默认的是jackson 的一个插件,目的将生产者生产的数据转换为json存入消息队列,由于Gson的速度快于jackson,这里替换为Gson的一个实现 -->  
  34.     <bean id="jsonMessageConverter"  
  35.         class="cn.slimsmart.rabbitmq.demo.spring.tag.Gson2JsonMessageConverter" />  
  36.   
  37.     <!-- spring template声明 -->  
  38.     <rabbit:template id="amqpTemplate" exchange="spring.queue.exchange"  routing-key="spring.queue.tag.key"  
  39.         connection-factory="connectionFactory" message-converter="jsonMessageConverter" />  
  40. </beans>  

4.消费者启动类ConsumerMain.java

 

 

[java] view plain copy
 
 print?
  1. package cn.slimsmart.rabbitmq.demo.spring.tag;  
  2.   
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  4.   
  5. public class ConsumerMain {  
  6.   
  7.     public static void main(String[] args) {  
  8.         new ClassPathXmlApplicationContext("Consumer.xml");    
  9.     }  
  10. }  

5.生产者启动类ProducerMain.java

 

 

[java] view plain copy
 
 print?
  1. package cn.slimsmart.rabbitmq.demo.spring.tag;  
  2.   
  3. import org.springframework.amqp.core.AmqpTemplate;  
  4. import org.springframework.amqp.rabbit.core.RabbitTemplate;  
  5. import org.springframework.context.ApplicationContext;  
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  7.   
  8. public class ProducerMain {  
  9.       
  10.     public static void main(String[] args) {  
  11.         ApplicationContext context = new ClassPathXmlApplicationContext("Producer.xml");    
  12.         AmqpTemplate amqpTemplate = context.getBean(RabbitTemplate.class);     
  13.         User user = new User();  
  14.         user.setName("niuniu");  
  15.         amqpTemplate.convertAndSend(user);  
  16.     }  
  17. }  


先启动消费者,监听接收消息,再启动生产者发送消息。

 

输出: data :{"name":"niuniu"}

如下4中转发器类型标签

rabbit:fanout-exchange

rabbit:direct-exchange

rabbit:topic-exchange

rabbit:headers-exchange

 

参考:http://blog.csdn.net/michaelzhaozero/article/details/23741511

posted @ 2017-07-06 10:03  疯子110  阅读(3640)  评论(0编辑  收藏  举报