rabbitmq学习9:使用spring-amqp发送消息及同步接收消息

通过对spring-amqp看重要类的认识,下面来通过spring-amqp的发送消息及同步接收消息是如何实现的。有兴趣的朋友 可以去spring-amqp官网下载例子。

    先来看看HelloWorldConfiguration类

Java代码   收藏代码
  1. package org.springframework.amqp.helloworld;  
  2.   
  3. import org.springframework.amqp.core.Queue;  
  4. import org.springframework.amqp.rabbit.config.AbstractRabbitConfiguration;  
  5. import org.springframework.amqp.rabbit.connection.ConnectionFactory;  
  6. import org.springframework.amqp.rabbit.connection.SingleConnectionFactory;  
  7. import org.springframework.amqp.rabbit.core.RabbitTemplate;  
  8. import org.springframework.context.annotation.Bean;  
  9. import org.springframework.context.annotation.Configuration;  
  10.   
  11. @Configuration  
  12. public class HelloWorldConfiguration extends AbstractRabbitConfiguration {  
  13.   
  14.     protected final String helloWorldQueueName = "hello.world.queue";  
  15.   
  16.     @Bean  
  17.     public ConnectionFactory connectionFactory() {  
  18.         SingleConnectionFactory connectionFactory = new SingleConnectionFactory(  
  19.                 "localhost");  
  20.         connectionFactory.setUsername("guest");  
  21.         connectionFactory.setPassword("guest");  
  22.         return connectionFactory;  
  23.     }  
  24.   
  25.     @Override  
  26.     public RabbitTemplate rabbitTemplate() {  
  27.         RabbitTemplate template = new RabbitTemplate(connectionFactory());  
  28.         // The routing key is set to the name of the queue by the broker for the  
  29.         // default exchange.  
  30.         template.setRoutingKey(this.helloWorldQueueName);  
  31.         // // Where we will synchronously receive messages from  
  32.         template.setQueue(this.helloWorldQueueName);  
  33.         return template;  
  34.     }  
  35.   
  36.     @Bean  
  37.     public Queue helloWorldQueue() {  
  38.         return new Queue(this.helloWorldQueueName);  
  39.     }  
  40. }  

 此类定义了ConnectionFactory 、RabbitTemplate 、Queue

发送消息的程序如下:

Java代码   收藏代码
  1. package org.springframework.amqp.helloworld;  
  2.   
  3. import org.springframework.amqp.core.AmqpTemplate;  
  4. import org.springframework.context.ApplicationContext;  
  5. import org.springframework.context.annotation.AnnotationConfigApplicationContext;  
  6.   
  7. public class Producer {  
  8.   
  9.     public static void main(String[] args) {  
  10.         ApplicationContext context = new AnnotationConfigApplicationContext(HelloWorldConfiguration.class);  
  11.         AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);  
  12.         amqpTemplate.convertAndSend("Hello World");  
  13.         System.out.println("Sent: Hello World");  
  14.     }  
  15.   
  16. }  

 同步接收消息如下:

Java代码   收藏代码
  1. package org.springframework.amqp.helloworld;  
  2.   
  3. import org.springframework.amqp.core.AmqpTemplate;  
  4. import org.springframework.context.ApplicationContext;  
  5. import org.springframework.context.annotation.AnnotationConfigApplicationContext;  
  6.   
  7. public class Consumer {  
  8.       
  9.     public static void main(String[] args) {  
  10.         ApplicationContext context = new AnnotationConfigApplicationContext(HelloWorldConfiguration.class);  
  11.         AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);  
  12.         System.out.println("Received: " + amqpTemplate.receiveAndConvert());  
  13.     }  
  14.   
  15. }  

 

这个例子是Exchange类型为DirectExchange. routingkey的名称默认为Queue的名称。

对于 HelloWorldConfiguration类的配置,也可以通过SPRING XML文件来配置。例如

rabbitConfiguration.xml

 

 

Java代码   收藏代码
  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.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
  5.   
  6.     <!-- 创建connectionFactory -->  
  7.     <bean id="connectionFactory"  
  8.         class="org.springframework.amqp.rabbit.connection.SingleConnectionFactory">  
  9.         <constructor-arg value="localhost" />  
  10.         <property name="username" value="guest" />  
  11.         <property name="password" value="guest" />  
  12.     </bean>  
  13.     <bean id="rabbitAdmin"  
  14.         class="org.springframework.amqp.rabbit.core.RabbitAdmin">  
  15.         <constructor-arg ref="connectionFactory" />  
  16.     </bean>  
  17.     <bean id="rabbitTemplate"  
  18.         class="org.springframework.amqp.rabbit.core.RabbitTemplate">  
  19.         <constructor-arg ref="connectionFactory"></constructor-arg>  
  20.         <property name="queue" value="hello.world.queue"></property>  
  21.         <property name="routingKey" value="hello.world.queue"></property>  
  22.     </bean>  
  23.   
  24.     <!-- 声明Queue并设定Queue的名称 -->  
  25.     <bean id="helloWorldQueue"  
  26.         class="org.springframework.amqp.core.Queue">  
  27.         <constructor-arg value="hello.world.queue"></constructor-arg>  
  28.     </bean>  
  29.       
  30. </beans>  

 

猜你喜欢

转载自zxb1985.iteye.com/blog/1987576