`
yimeng528
  • 浏览: 188294 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

前面我们已经学习了发送消息及同步接收消息的例子了。下面我们来看看如何通过Spring配置来实现异步接收消息。

   现在我们建立两个WEB项目。发送消息的项目命名为”rabbitmq-demo-producer“ ,异步接受的消息项目名称”rabbitmq-demo-consumer“。

  下面来看看rabbitmq-demo-producer项目中发送信息的程序及配置。

 MessageProducer类是用于发送消息的类。实现如下

Java代码  收藏代码
  1. package com.abin.rabbitmq;  
  2.   
  3. import org.springframework.amqp.rabbit.core.RabbitTemplate;  
  4.   
  5. public class MessageProducer {  
  6.     private RabbitTemplate rabbitTemplate;  
  7.   
  8.     public void sendMessage(Integer i) {  
  9.         String message = "Hello World wubin " + "#" + i;  
  10.         //Exchange的名称为"hello.topic",routingkey的名称为"hello.world.q123ueue"  
  11.         rabbitTemplate.convertAndSend("hello.topic""hello.world.q123ueue",  
  12.                 message);  
  13.         System.out.println("发送第" + i + "个消息成功!内容为:" + message);  
  14.   
  15. //      String messages = "Hello World direct " + "#" + i;  
  16. //      rabbitTemplate.convertAndSend("hello.direct", "hello.world.queue",  
  17. //              messages);  
  18. //      System.out.println("发送第" + i + "个消息成功!内容为:" + messages);  
  19.     }  
  20.   
  21.     public void setRabbitTemplate(RabbitTemplate rabbitTemplate) {  
  22.         this.rabbitTemplate = rabbitTemplate;  
  23.     }  
  24.   
  25. }  

 

spring的配置文件如下:applicationContext-rabbitmq.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.     <bean id="connectionFactory"  
  6.         class="org.springframework.amqp.rabbit.connection.SingleConnectionFactory">  
  7.         <constructor-arg value="localhost" />  
  8.         <property name="username" value="guest" />  
  9.         <property name="password" value="guest" />  
  10.     </bean>  
  11.     <bean id="amqpAdmin"  
  12.         class="org.springframework.amqp.rabbit.core.RabbitAdmin">  
  13.         <constructor-arg ref="connectionFactory" />  
  14.     </bean>  
  15.     <bean id="rabbitTemplate"  
  16.         class="org.springframework.amqp.rabbit.core.RabbitTemplate">  
  17.         <constructor-arg ref="connectionFactory"></constructor-arg>  
  18.     </bean>  
  19.     <bean id="messageProducer"  
  20.         class="com.abin.rabbitmq.MessageProducer">  
  21.         <property name="rabbitTemplate">  
  22.             <ref bean="rabbitTemplate" />  
  23.         </property>  
  24.     </bean>  
  25. </beans>  

 

对于发送消息的程序自己可以实现,我是通过Struts2来实现的,例如

Java代码  收藏代码
  1. package com.abin.action;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import com.abin.rabbitmq.MessageProducer;  
  6. import com.opensymphony.xwork2.ActionSupport;  
  7.   
  8. public class SendAction extends ActionSupport {  
  9.     private MessageProducer messageProducer;  
  10.   
  11.     public String execute() throws Exception {  
  12.         Date a = new Date();  
  13.         long b = System.currentTimeMillis();  
  14.         for (int i = 0; i <= 10000; i++) {  
  15.             messageProducer.sendMessage(i);  
  16.         }  
  17.         System.out.println(a);  
  18.         System.out.println(new Date());  
  19.         System.out.println("共花了" + (System.currentTimeMillis() - b) + "ms");  
  20.         return null;  
  21.     }  
  22.   
  23.     public void setMessageProducer(MessageProducer messageProducer) {  
  24.         this.messageProducer = messageProducer;  
  25.     }  
  26.   
  27. }  

 

发送消息项目的程序差不多就这些了

下面来看看接受消息的程序如下

HelloWorldHandler类用于接收消息的处理类,如下

 

Java代码  收藏代码
  1. package com.abin.rabbitmq;  
  2.   
  3. import java.util.Date;  
  4.   
  5. public class HelloWorldHandler {  
  6.     public void handleMessage(String text) {  
  7.         System.out.println("Received: " + text);  
  8.   
  9.         System.out.println(new Date());  
  10.     }  
  11. }  

 

spring的配置文件如下:applicationContext-rabbitmq.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.     <!-- 创建connectionFactory -->  
  6.     <bean id="connectionFactory"  
  7.         class="org.springframework.amqp.rabbit.connection.SingleConnectionFactory">  
  8.         <constructor-arg value="localhost" />  
  9.         <property name="username" value="guest" />  
  10.         <property name="password" value="guest" />  
  11.     </bean>  
  12.     <!-- 创建rabbitAdmin 代理类 -->  
  13.     <bean id="rabbitAdmin"  
  14.         class="org.springframework.amqp.rabbit.core.RabbitAdmin">  
  15.         <constructor-arg ref="connectionFactory" />  
  16.     </bean>  
  17.     <!-- 创建rabbitTemplate 消息模板类 -->  
  18.     <bean id="rabbitTemplate"  
  19.         class="org.springframework.amqp.rabbit.core.RabbitTemplate">  
  20.         <constructor-arg ref="connectionFactory"></constructor-arg>  
  21.     </bean>  
  22.     <!-- 声明Queue并设定Queue的名称 -->  
  23.     <bean id="helloWorldQueue"  
  24.         class="org.springframework.amqp.core.Queue">  
  25.         <constructor-arg value="hello.world.queue"></constructor-arg>  
  26.     </bean>  
  27.     <!-- 声明消息转换器为SimpleMessageConverter -->  
  28.     <bean id="messageConverter"  
  29.         class="org.springframework.amqp.support.converter.SimpleMessageConverter">  
  30.     </bean>  
  31.     <!-- 声明Exchange的类型为topic并设定Exchange的名称 -->  
  32.     <bean id="hellotopic"  
  33.         class="org.springframework.amqp.core.TopicExchange">  
  34.         <constructor-arg value="hello.topic"></constructor-arg>  
  35.     </bean>  
  36.   
  37.     <!-- 声明Exchange的类型为direct并设定Exchange的名称 -->  
  38.     <bean id="hellodirect"  
  39.         class="org.springframework.amqp.core.DirectExchange">  
  40.         <constructor-arg value="hello.direct"></constructor-arg>  
  41.     </bean>  
  42.     <!-- 通过Binding来判定Queue、Exchange、routingKey -->  
  43.     <!-- 其中构建Binding的参数1是Queue,参数2是Exchange,参数3是routingKey -->  
  44.     <bean id="queuebling"  
  45.         class="org.springframework.amqp.core.Binding">  
  46.         <constructor-arg index="0" ref="helloWorldQueue"></constructor-arg>  
  47.         <constructor-arg index="1" ref="hellotopic"></constructor-arg>  
  48.         <constructor-arg index="2" value="hello.world.#"></constructor-arg>  
  49.     </bean>  
  50.     <!-- 监听生产者发送的消息开始 -->  
  51.     <!-- 用于接收消息的处理类 -->  
  52.     <bean id="helloWorldHandler"  
  53.         class="com.abin.rabbitmq.HelloWorldHandler">  
  54.     </bean>  
  55.     <!-- 用于消息的监听的代理类MessageListenerAdapter -->  
  56.     <bean id="helloListenerAdapter"  
  57.         class="org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter">  
  58.         <constructor-arg ref="helloWorldHandler" />  
  59.         <property name="defaultListenerMethod" value="handleMessage"></property>  
  60.         <property name="messageConverter" ref="messageConverter"></property>  
  61.     </bean>  
  62.     <!-- 用于消息的监听的容器类SimpleMessageListenerContainer,对于queueName的值一定要与定义的Queue的值相同 -->  
  63.     <bean id="listenerContainer"  
  64.         class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer">  
  65.         <property name="queueName" value="hello.world.queue"></property>  
  66.         <property name="connectionFactory" ref="connectionFactory"></property>  
  67.         <property name="messageListener" ref="helloListenerAdapter"></property>  
  68.     </bean>  
  69.     <!-- 监听生产者发送的消息结束 -->  
  70. </beans>  
分享到:
评论

相关推荐

    rabbitmq学习11:基于rabbitmq和spring-amqp的远程接口调用

    在本主题"rabbitmq学习11:基于rabbitmq和spring-amqp的远程接口调用"中,我们将深入探讨如何使用RabbitMQ作为消息中间件,结合Spring-AMQP库实现RPC模式。 RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP...

    spring-amqp,spring-retry,spring-rabbit

    - 模板机制:Spring AMQP核心的`AmqpTemplate`简化了发送和接收消息的过程。 - 消费者监听:通过`@RabbitListener`注解实现消息消费者,可以监听特定队列并处理消息。 - 异步消息处理:支持异步消息处理,提高...

    spring-amqp 相关jar

    Spring AMQP 是一个由 Spring Framework 提供的框架,它允许开发者使用 Spring 的编程模型与 RabbitMQ 消息中间件进行交互。RabbitMQ 是一种流行的开源消息代理,它实现了 Advanced Message Queuing Protocol (AMQP)...

    spring-amqp 1.5.3源码

    1. **RabbitTemplate**:这是Spring AMQP的核心类,它提供了一种声明式的方式来发送和接收消息。RabbitTemplate简化了与RabbitMQ服务器的交互,包括创建信道、发送和接收消息等操作。 2. **AmqpAdmin**:这是一个...

    rabbitmq 路由spring-amqp实现

    Spring框架为与RabbitMQ的集成提供了`spring-amqp`模块,使得在Java应用中使用RabbitMQ变得更加便捷。本文将深入探讨如何使用Spring AMQP来实现RabbitMQ的路由功能。 首先,让我们理解RabbitMQ中的路由概念。在...

    spring-cloud-config + spring-cloud-bus-amqp实现分布式集群配置动态更新

    在本例中,我们使用AMQP(Advanced Message Queuing Protocol)协议,通过RabbitMQ作为消息代理。RabbitMQ是一个开源的消息队列系统,广泛应用于分布式系统中,以实现异步处理和解耦。 安装RabbitMQ的过程包括下载`...

    spring-amqp文档.zip

    - `RabbitTemplate`:这是Spring AMQP的主要入口点,提供发送和接收消息的方法,简化了与RabbitMQ服务器的交互。 - `Message`和`MessageProperties`:`Message`代表AMQP的消息,`MessageProperties`包含消息的元...

    RabbitMq与Spring整合实例

    将RabbitMQ与Spring整合,可以方便地在Spring应用中使用消息队列,实现异步通信和任务调度。 本实例主要介绍如何在Spring应用中集成RabbitMQ,构建一个完整的消息传递系统。首先,你需要确保已经安装了RabbitMQ...

    spring-amqp-1.2.2.RELEASE.zip

    `RabbitTemplate`是Spring AMQP的核心工具类,它提供了发送和接收消息的便捷方法。 7. **Listener容器**: Spring AMQP提供了两种监听容器,一种是基于SimpleMessageListenerContainer,另一种是基于...

    spring-amqp-reference.pdf

    标题《Spring AMQP Reference》所涵盖的知识点主要围绕Spring框架提供的AMQP(Advanced Message Queuing Protocol)消息传递抽象,以及如何在Java应用中利用Spring AMQP进行消息的发送与接收。以下是详细的知识点...

    springboot-rabbitmq-amqp

    同时,`RabbitTemplate`是Spring提供的用于发送和接收消息的工具类。通过`convertAndSend`方法,我们可以方便地发送消息到指定的交换器,消息会被自动路由到与之绑定的队列中。接收消息则可以通过`receive`或`...

    spring-amqp

    - **RabbitTemplate**:这是 Spring AMQP 的主要接口,用于发送和接收消息。它提供了一组方法,如 `convertAndSend` 和 `receive`,以简化与 RabbitMQ 服务器的交互。 - **MessageListenerContainer**:这个组件...

    spring-amqp.zip

    `AmqpTemplate`是发送和接收消息的主要接口,而`Exchange`是路由策略的定义,`Queue`是消息的存储,`Binding`则是两者之间的关联规则。 1. **生产消息**:在Spring应用中,你可以通过配置一个RabbitTemplate实例来...

    SpringBoot-RabbitMQ:RabbitMQ为异步消息处理提出了一个很好的解决方案,它是一个非常好用的消息中间件,主要用于中间件的解压缩,同时,Spring Boot为RabbitMQ提供了支持,Spring Boot为兔子准备了spring-boot-starter-amqp,spring-rabbit支持AMQP(即高级消息队列协议,高级消息协议,是应用层协议的一个开放标准),并且为兔子模板和兔子MQ提供了自动配置选项

    你会使用Spring AMQP的RabbitTemplate内置应用系统来发布消息和使用一个MessageListenerAdapter POJO来订阅消息 git克隆 gradle bootRun 需要 大约几十分钟 一款文本编辑器或者IDE 你也可以从这个项目中入门代码...

    rabbitmq和spring集成

    3. **创建RabbitTemplate**:Spring AMQP提供了一个名为`RabbitTemplate`的工具类,它是发送和接收消息的主要接口。在Spring配置类中,通过`@Bean`注解创建`RabbitTemplate`实例,可以自定义消息序列化和反序列化...

    rabbitmq-demo(Java客户端-基础代码 + Java客户端-Spring AMQP)

    Spring AMQP是Spring框架对RabbitMQ的集成,它提供了一套更高级的API和抽象,简化了RabbitMQ的使用。使用Spring AMQP,我们可以利用Spring的IoC和声明式特性来管理RabbitMQ的配置和操作。 首先,我们需要在Spring...

    spring整合rabbitmq需要的jar包(spring版本4.2.0)

    这个库包含了Spring AMQP项目的核心功能,如连接工厂、模板类、监听容器等,使得开发者能够方便地在Spring应用中发送和接收消息。 2. **spring-amqp-1.5.1.RELEASE.jar**:这是Spring AMQP项目的主要库,它提供了...

    java rabbitmq spring springAMQP 代码包 project

    开发者可能会在项目中创建`ConnectionFactory`以连接到RabbitMQ服务器,定义`Queue`和`Exchange`,并使用`RabbitTemplate`或`AmqpAdmin`来发送和接收消息。同时,Spring的`@RabbitListener`注解可能被用来监听特定...

Global site tag (gtag.js) - Google Analytics