使用spring-amqp发送消息及同步接收消息

来源:互联网 发布:es7 js 注解功能 编辑:程序博客网 时间:2024/05/17 03:30
通过对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>

参考:http://wubin850219.iteye.com/blog/1050328 

0 0
原创粉丝点击