(转)RabbitMQ学习之spring整合发送同步消息

http://blog.csdn.net/zhu_tianwei/article/details/40890543

以下实现使用Exchange类型为DirectExchange. routingkey的名称默认为Queue的名称。

1.所需jar包依赖

[html] view plain copy
 
 print?
  1. <properties>  
  2.         <rabbitmq.version>3.0.4</rabbitmq.version>  
  3.         <spring.amqp.version>1.1.1.RELEASE</spring.amqp.version>  
  4.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  5.         <spring.version>3.1.2.RELEASE</spring.version>  
  6.     </properties>  
  7.     <dependencies>  
  8.         <dependency>  
  9.             <groupId>com.rabbitmq</groupId>  
  10.             <artifactId>amqp-client</artifactId>  
  11.             <version>${rabbitmq.version}</version>  
  12.         </dependency>  
  13.   
  14.         <dependency>  
  15.             <groupId>org.springframework.amqp</groupId>  
  16.             <artifactId>spring-rabbit</artifactId>  
  17.             <version>${spring.amqp.version}</version>  
  18.         </dependency>  
  19.   
  20.         <dependency>  
  21.             <groupId>org.springframework</groupId>  
  22.             <artifactId>spring-core</artifactId>  
  23.             <version>${spring.version}</version>  
  24.             <exclusions>  
  25.                 <!-- Exclude Commons Logging in favor of SLF4j -->  
  26.                 <exclusion>  
  27.                     <groupId>commons-logging</groupId>  
  28.                     <artifactId>commons-logging</artifactId>  
  29.                 </exclusion>  
  30.             </exclusions>  
  31.         </dependency>  
  32.         <dependency>  
  33.             <groupId>org.springframework</groupId>  
  34.             <artifactId>spring-context</artifactId>  
  35.             <version>${spring.version}</version>  
  36.         </dependency>  
  37.   
  38.         <dependency>  
  39.             <groupId>org.springframework</groupId>  
  40.             <artifactId>spring-test</artifactId>  
  41.             <version>${spring.version}</version>  
  42.             <scope>test</scope>  
  43.         </dependency>  
  44.   
  45.         <dependency>  
  46.             <groupId>junit</groupId>  
  47.             <artifactId>junit</artifactId>  
  48.             <version>4.8.1</version>  
  49.             <scope>test</scope>  
  50.         </dependency>  
  51.   
  52.         <dependency>  
  53.             <groupId>org.springframework.amqp</groupId>  
  54.             <artifactId>spring-amqp</artifactId>  
  55.             <version>${spring.amqp.version}</version>  
  56.             <classifier>sources</classifier>  
  57.             <scope>compile</scope>  
  58.         </dependency>  
  59.         <dependency>  
  60.             <groupId>commons-lang</groupId>  
  61.             <artifactId>commons-lang</artifactId>  
  62.             <version>2.6</version>  
  63.         </dependency>  
  64.         <dependency>  
  65.             <groupId>org.slf4j</groupId>  
  66.             <artifactId>slf4j-api</artifactId>  
  67.             <version>1.5.10</version>  
  68.         </dependency>  
  69.         <dependency>  
  70.             <groupId>org.slf4j</groupId>  
  71.             <artifactId>jcl-over-slf4j</artifactId>  
  72.             <version>1.5.10</version>  
  73.             <scope>runtime</scope>  
  74.         </dependency>  
  75.         <dependency>  
  76.             <groupId>org.slf4j</groupId>  
  77.             <artifactId>slf4j-log4j12</artifactId>  
  78.             <version>1.5.10</version>  
  79.             <scope>runtime</scope>  
  80.         </dependency>  
  81.         <dependency>  
  82.             <groupId>log4j</groupId>  
  83.             <artifactId>log4j</artifactId>  
  84.             <version>1.2.14</version>  
  85.             <scope>runtime</scope>  
  86.         </dependency>  
  87.         <dependency>  
  88.             <groupId>org.aspectj</groupId>  
  89.             <artifactId>aspectjweaver</artifactId>  
  90.             <version>1.6.9</version>  
  91.         </dependency>  
  92.     </dependencies>  


2.application.properties配置

[plain] view plain copy
 
 print?
  1. #============== rabbitmq config ====================  
  2. rabbit.hosts=192.168.101.210  
  3. rabbit.username=admin  
  4. rabbit.password=admin  
  5. rabbit.virtualHost=/  
  6. rabbit.queue=spring.queue.sync  
  7. rabbit.routingKey=spring.queue.sync  

3.applicationContext.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:aop="http://www.springframework.org/schema/aop"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6.                         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
  7.                         http://www.springframework.org/schema/aop  
  8.                         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
  9.                         http://www.springframework.org/schema/context  
  10.                         http://www.springframework.org/schema/context/spring-context-3.0.xsd"  
  11.     default-lazy-init="false">  
  12.   
  13.     <description>Spring公共配置 </description>  
  14.     <context:component-scan base-package="cn.slimsmart.rabbitmq.demo.spring" />  
  15.     <aop:aspectj-autoproxy />  
  16.     <!-- 定义受环境影响易变的变量 -->  
  17.     <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  18.         <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />  
  19.         <property name="ignoreResourceNotFound" value="true" />  
  20.         <property name="locations">  
  21.             <list>  
  22.                 <!-- 标准配置 -->  
  23.                 <value>classpath*:/application.properties</value>  
  24.             </list>  
  25.         </property>  
  26.     </bean>  
  27.     <import resource="applicationContext-rabbitmq-sync.xml"/>  
  28. </beans>  

4.applicationContext-rabbitmq-sync.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:context="http://www.springframework.org/schema/context"  
  4.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.        xsi:schemaLocation="  
  6.         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
  7.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
  8.   
  9.   
  10.     <!-- 创建connectionFactory -->  
  11.     <bean id="rabbitConnectionFactory"  
  12.       class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">  
  13.         <constructor-arg value="${rabbit.hosts}"/>  
  14.         <property name="username" value="${rabbit.username}"/>  
  15.         <property name="password" value="${rabbit.password}"/>  
  16.         <property name="virtualHost" value="${rabbit.virtualHost}"/>  
  17.         <property name="channelCacheSize" value="5"/>  
  18.     </bean>  
  19.       
  20.     <!-- 创建rabbitAdmin 代理类 -->  
  21. <!--     <bean id="rabbitAdmin" -->  
  22. <!--         class="org.springframework.amqp.rabbit.core.RabbitAdmin"> -->  
  23. <!--         <constructor-arg ref="rabbitConnectionFactory" /> -->  
  24. <!--     </bean> -->  
  25.       
  26.       
  27.     <!-- 创建rabbitTemplate 消息模板类 -->  
  28.     <bean id="rabbitTemplate"  
  29.         class="org.springframework.amqp.rabbit.core.RabbitTemplate">  
  30.         <constructor-arg ref="rabbitConnectionFactory"></constructor-arg>  
  31.         <property name="queue" value="${rabbit.queue}"></property>  
  32.         <property name="routingKey" value="${rabbit.routingKey}"></property>    
  33.     </bean>  
  34.       
  35.     <!-- 声明Queue并设定Queue的名称 -->    
  36. <!--     <bean id="helloWorldQueue"   -->  
  37. <!--         class="org.springframework.amqp.core.Queue">   -->  
  38. <!--         <constructor-arg value="${rabbit.queue}"></constructor-arg>   -->  
  39. <!--     </bean>   -->  
  40. </beans>  

5.生产者Producer.java

[java] view plain copy
 
 print?
  1. import org.springframework.amqp.core.AmqpTemplate;  
  2. import org.springframework.amqp.rabbit.core.RabbitTemplate;  
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5.   
  6. //生产者  
  7. public class Producer {  
  8.     public static void main(String[] args) {  
  9.         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  
  10.         AmqpTemplate amqpTemplate = context.getBean(RabbitTemplate.class);    
  11.         amqpTemplate.convertAndSend("test spring sync");   
  12.     }  
  13. }  

6.消费者Consumer.java

[java] view plain copy
 
 print?
  1. import org.springframework.amqp.core.AmqpTemplate;  
  2. import org.springframework.amqp.rabbit.core.RabbitTemplate;  
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5.   
  6. //消费者  
  7. public class Consumer {  
  8.     public static void main(String[] args) {  
  9.         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  
  10.         AmqpTemplate amqpTemplate = context.getBean(RabbitTemplate.class);    
  11.         System.out.println("Received: " + amqpTemplate.receiveAndConvert());    
  12.     }  
  13. }  

运行生产者向队列中发送一条消息,再运行消费者消费消息。

原文地址:https://www.cnblogs.com/telwanggs/p/7124741.html