zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Android5.0之Activity的转场动画
    Android5.0之CardView的使用
    Android5.0之CoordinatorLayout的使用
    Android5.0之NavigationView的使用
    Android开发之Bitmap二次采样
    android自定义View之NotePad出鞘记
    android自定义View之仿通讯录侧边栏滑动,实现A-Z字母检索
    android自定义View之钟表诞生记
    Spring经典高频面试题,原来是长这个样子
    Redis: 缓存过期、缓存雪崩、缓存穿透、缓存击穿(热点)、缓存并发(热点)、多级缓存、布隆过滤器
  • 原文地址:https://www.cnblogs.com/telwanggs/p/7124821.html
Copyright © 2011-2022 走看看