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

实现使用Exchange类型为DirectExchange. routingkey的名称默认为Queue的名称。注解实现异步发送消息。

1.生产者配置ProducerConfiguration.Java

  1. package cn.slimsmart.rabbitmq.demo.spring.async;
  2. import java.util.concurrent.atomic.AtomicInteger;
  3. import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
  4. import org.springframework.amqp.rabbit.connection.ConnectionFactory;
  5. import org.springframework.amqp.rabbit.core.RabbitTemplate;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.beans.factory.config.BeanPostProcessor;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.scheduling.annotation.Scheduled;
  11. import org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor;
  12. import com.rabbitmq.client.AMQP;
  13. @Configuration
  14. public class ProducerConfiguration {
  15. // 指定队列名称 routingkey的名称默认为Queue的名称,使用Exchange类型为DirectExchange
  16. protected final String helloWorldQueueName = "spring-queue-async";
  17. // 创建链接
  18. @Bean
  19. public ConnectionFactory connectionFactory() {
  20. CachingConnectionFactory connectionFactory = new CachingConnectionFactory("192.168.36.102");
  21. connectionFactory.setUsername("admin");
  22. connectionFactory.setPassword("admin");
  23. connectionFactory.setPort(AMQP.PROTOCOL.PORT);
  24. return connectionFactory;
  25. }
  26. // 创建rabbitTemplate 消息模板类
  27. @Bean
  28. public RabbitTemplate rabbitTemplate() {
  29. RabbitTemplate template = new RabbitTemplate(connectionFactory());
  30. template.setRoutingKey(this.helloWorldQueueName);
  31. return template;
  32. }
  33. //创建一个调度
  34. @Bean
  35. public ScheduledProducer scheduledProducer() {
  36. return new ScheduledProducer();
  37. }
  38. @Bean
  39. public BeanPostProcessor postProcessor() {
  40. return new ScheduledAnnotationBeanPostProcessor();
  41. }
  42. static class ScheduledProducer {
  43. @Autowired
  44. private volatile RabbitTemplate rabbitTemplate;
  45. //自增整数
  46. private final AtomicInteger counter = new AtomicInteger();
  47. /**
  48. * 每3秒发送一条消息
  49. *
  50. * Spring3中加强了注解的使用,其中计划任务也得到了增强,现在创建一个计划任务只需要两步就完成了:
  51. 创建一个Java类,添加一个无参无返回值的方法,在方法上用@Scheduled注解修饰一下;
  52. 在Spring配置文件中添加三个<task:**** />节点;
  53. 参考:http://zywang.iteye.com/blog/949123
  54. */
  55. @Scheduled(fixedRate = 3000)
  56. public void sendMessage() {
  57. rabbitTemplate.convertAndSend("Hello World " + counter.incrementAndGet());
  58. }
  59. }
  60. }

2.生产者启动类Producer,java

  1. package cn.slimsmart.rabbitmq.demo.spring.async;
  2. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  3. public class Producer {
  4. public static void main(String[] args) {
  5. new AnnotationConfigApplicationContext(ProducerConfiguration.class);
  6. }
  7. }

3.接收消息处理类ReceiveMsgHandler.java

  1. package cn.slimsmart.rabbitmq.demo.spring.async;
  2. public class ReceiveMsgHandler {
  3. public void handleMessage(String text) {
  4. System.out.println("Received: " + text);
  5. }
  6. }

4.消费者配置ConsumerConfiguration

  1. package cn.slimsmart.rabbitmq.demo.spring.async;
  2. import org.springframework.amqp.core.AmqpAdmin;
  3. import org.springframework.amqp.core.Queue;
  4. import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
  5. import org.springframework.amqp.rabbit.connection.ConnectionFactory;
  6. import org.springframework.amqp.rabbit.core.RabbitAdmin;
  7. import org.springframework.amqp.rabbit.core.RabbitTemplate;
  8. import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
  9. import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
  10. import org.springframework.context.annotation.Bean;
  11. import org.springframework.context.annotation.Configuration;
  12. import com.rabbitmq.client.AMQP;
  13. @Configuration
  14. public class ConsumerConfiguration {
  15. // 指定队列名称 routingkey的名称默认为Queue的名称,使用Exchange类型为DirectExchange
  16. protected String springQueueDemo = "spring-queue-async";
  17. // 创建链接
  18. @Bean
  19. public ConnectionFactory connectionFactory() {
  20. CachingConnectionFactory connectionFactory = new CachingConnectionFactory(
  21. "192.168.36.102");
  22. connectionFactory.setUsername("admin");
  23. connectionFactory.setPassword("admin");
  24. connectionFactory.setPort(AMQP.PROTOCOL.PORT);
  25. return connectionFactory;
  26. }
  27. // 创建rabbitAdmin 代理类
  28. @Bean
  29. public AmqpAdmin amqpAdmin() {
  30. return new RabbitAdmin(connectionFactory());
  31. }
  32. // 创建rabbitTemplate 消息模板类
  33. @Bean
  34. public RabbitTemplate rabbitTemplate() {
  35. RabbitTemplate template = new RabbitTemplate(connectionFactory());
  36. // The routing key is set to the name of the queue by the broker for the
  37. // default exchange.
  38. template.setRoutingKey(this.springQueueDemo);
  39. // Where we will synchronously receive messages from
  40. template.setQueue(this.springQueueDemo);
  41. return template;
  42. }
  43. //
  44. // Every queue is bound to the default direct exchange
  45. public Queue helloWorldQueue() {
  46. return new Queue(this.springQueueDemo);
  47. }
  48. @Bean
  49. public SimpleMessageListenerContainer listenerContainer() {
  50. SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
  51. container.setConnectionFactory(connectionFactory());
  52. container.setQueueNames(this.springQueueDemo);
  53. container.setMessageListener(new MessageListenerAdapter(
  54. new ReceiveMsgHandler()));
  55. return container;
  56. }
  57. }

5.消费者启动类Consumer.java

  1. package cn.slimsmart.rabbitmq.demo.spring.async;
  2. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  3. public class Consumer {
  4. public static void main(String[] args) {
  5. new AnnotationConfigApplicationContext(ConsumerConfiguration.class);
  6. }
  7. }

启动接收消息,再发送消息

  1. Received: Hello World 1
  2. Received: Hello World 2
  3. Received: Hello World 3
  4. Received: Hello World 4
  5. Received: Hello World 5
  6. Received: Hello World 6
  7. Received: Hello World 7
  8. ......

若报spring-queue-async消息队列不存在,请在控制台添加。

(转)RabbitMQ学习之spring整合发送异步消息(注解实现)的更多相关文章

  1. (转) RabbitMQ学习之spring整合发送异步消息

    http://blog.csdn.net/zhu_tianwei/article/details/40919031 实现使用Exchange类型为DirectExchange. routingkey的 ...

  2. (转) RabbitMQ学习之spring整合发送同步消息(注解实现)

    http://blog.csdn.net/zhu_tianwei/article/details/40918477 上一篇文章通过xml配置rabbitmq的rabbitTemplate,本节将使用注 ...

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

    http://blog.csdn.net/zhu_tianwei/article/details/40890543 以下实现使用Exchange类型为DirectExchange. routingke ...

  4. 【RocketMQ源码学习】- 3. Client 发送同步消息

    本文较长,代码后面给了方法简图,希望给你帮助 发送的方式 同步发送 异步发送 消息的类型 普通消息 顺序消息 事务消息 发送同步消息的时序图 为了防止读者朋友嫌烦,可以看下时序图,后面我也会给出方法的 ...

  5. ActiveMQ学习总结------Spring整合ActiveMQ 04

    通过前几篇的学习,相信大家已经对我们的ActiveMQ的原生操作已经有了个深刻的概念, 那么这篇文章就来带领大家一步一步学习下ActiveMQ结合Spring的实战操作 注:本文将省略一部分与Acti ...

  6. RabbitMQ学习笔记之五种模式及消息确认机制

    本文详细介绍简单模式Simple.工作模式Work.发布订阅模式Publish/Subscribe.Topic.Routing. Maven依赖引用 <dependencies> < ...

  7. Spring整合ActiveMQ实现消息延迟投递和定时投递

    linux(centos)系统安装activemq参考:https://www.cnblogs.com/pxblog/p/12222231.html 首先在ActiveMQ的安装路径 /conf/ac ...

  8. RabbitMQ走过的坑,发送的消息是乱码

    发送的消息在可视化界面中是乱码,如图: 看见这个content_tpye没有,是不是很奇怪,就是这个坑,设置下就行,看代码: @Bean Jackson2JsonMessageConverter me ...

  9. RabbitMQ学习之spring配置文件rabbit标签的使用

    下面我们通过一个实例看一下rabbit的使用. 1.实现一个消息监听器ReceiveMessageListener.Java package org.springframework.amqp.core ...

随机推荐

  1. ls命令:显示文件或目录

    ls:显示目录下的内容及相关属性信息 [命令详解] [功能说明] ls命令可以理解为英文list的缩写,其功能是列出目录的内容及其内容属性信息(list directory contents).该命令 ...

  2. javascript正则表达式总结(test|match|search|replace|split|exec)

    test:测试string是否包含有匹配结果,包含返回true,不包含返回false. <script type="text/javascript"> var str ...

  3. python3实现UDP协议的简单服务器和客户端

    利用python中的socket模块中的来实现UDP协议,这里写一个简单的服务器和客户端.为了说明网络编程中UDP的应用,这里就不写图形化了,在两台电脑上分别打开UDP的客户端和服务端就可以了. UD ...

  4. (24)Spring Boot环境变量读取和属性对象的绑定【从零开始学Spring Boot】

    凡是被Spring管理的类,实现接口 EnvironmentAware 重写方法 setEnvironment 可以在工程启动时,获取到系统环境变量和application配置文件中的变量. com. ...

  5. Tyvj - 1286 - 校门外的树2

    描述 Description 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1 ...

  6. [bzoj4562][Haoi2016]食物链_记忆化搜索_动态规划

    食物链 bzoj-4562 Haoi-2016 题目大意:给你n个点,m条边的DAG,求所有的满足条件的链,使得每条链的起点是一个入度为0的点,中点是一条出度为0的点. 注释:$1\le n\le 1 ...

  7. HDU3117-Fibonacci Numbers(矩阵高速幂+log)

    题目链接 题意:斐波那契数列,当长度大于8时.要输出前四位和后四位 思路:后四位非常easy,矩阵高速幂取模,难度在于前四位的求解.  已知斐波那契数列的通项公式:f(n) = (1 / sqrt(5 ...

  8. bzoj-3524 Couriers

    题意: 给出一个长度为n的序列和m次询问. 每次询问给出区间[l,r],求区间中出现次数大于(r-l+1)/2的数字. n.m<=500000.1<=每一个数字<=n: 题解: 主席 ...

  9. h5-7 canvas

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 【SDOI 2010】 古代猪文

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1951 [算法] 欧拉定理+中国剩余定理 + lucas定理 [代码] #includ ...