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

上一篇文章通过xml配置rabbitmq的rabbitTemplate,本节将使用注解的形式实现同步消息的发送。

1.注解配置AnnotationConfiguration.Java

  1. package cn.slimsmart.rabbitmq.demo.spring.sync;
  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.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import com.rabbitmq.client.AMQP;
  11. @Configuration
  12. public class AnnotationConfiguration {
  13. //指定队列名称 routingkey的名称默认为Queue的名称,使用Exchange类型为DirectExchange
  14. protected String springQueueDemo = "spring-queue-demo";
  15. //创建链接
  16. @Bean
  17. public ConnectionFactory connectionFactory() {
  18. CachingConnectionFactory connectionFactory = new CachingConnectionFactory("192.168.36.102");
  19. connectionFactory.setUsername("admin");
  20. connectionFactory.setPassword("admin");
  21. connectionFactory.setPort(AMQP.PROTOCOL.PORT);
  22. return connectionFactory;
  23. }
  24. //创建rabbitAdmin 代理类
  25. @Bean
  26. public AmqpAdmin amqpAdmin() {
  27. return new RabbitAdmin(connectionFactory());
  28. }
  29. //创建rabbitTemplate 消息模板类
  30. @Bean
  31. public RabbitTemplate rabbitTemplate() {
  32. RabbitTemplate template = new RabbitTemplate(connectionFactory());
  33. //The routing key is set to the name of the queue by the broker for the default exchange.
  34. template.setRoutingKey(this.springQueueDemo);
  35. //Where we will synchronously receive messages from
  36. template.setQueue(this.springQueueDemo);
  37. return template;
  38. }
  39. //
  40. // Every queue is bound to the default direct exchange
  41. public Queue helloWorldQueue() {
  42. return new Queue(this.springQueueDemo);
  43. }
  44. /*
  45. @Bean
  46. public Binding binding() {
  47. return declare(new Binding(helloWorldQueue(), defaultDirectExchange()));
  48. }*/
  49. /*
  50. @Bean
  51. public TopicExchange helloExchange() {
  52. return declare(new TopicExchange("hello.world.exchange"));
  53. }*/
  54. /*
  55. public Queue declareUniqueQueue(String namePrefix) {
  56. Queue queue = new Queue(namePrefix + "-" + UUID.randomUUID());
  57. rabbitAdminTemplate().declareQueue(queue);
  58. return queue;
  59. }
  60. // if the default exchange isn't configured to your liking....
  61. @Bean Binding declareP2PBinding(Queue queue, DirectExchange exchange) {
  62. return declare(new Binding(queue, exchange, queue.getName()));
  63. }
  64. @Bean Binding declarePubSubBinding(String queuePrefix, FanoutExchange exchange) {
  65. return declare(new Binding(declareUniqueQueue(queuePrefix), exchange));
  66. }
  67. @Bean Binding declarePubSubBinding(UniqueQueue uniqueQueue, TopicExchange exchange) {
  68. return declare(new Binding(uniqueQueue, exchange));
  69. }
  70. @Bean Binding declarePubSubBinding(String queuePrefix, TopicExchange exchange, String routingKey) {
  71. return declare(new Binding(declareUniqueQueue(queuePrefix), exchange, routingKey));
  72. }*/
  73. }

2.消费者代码Consumer.java

  1. package cn.slimsmart.rabbitmq.demo.spring.sync;
  2. import org.springframework.amqp.core.AmqpTemplate;
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  5. public class Consumer {
  6. public static void main(String[] args) {
  7. ApplicationContext context = new AnnotationConfigApplicationContext(AnnotationConfiguration.class);
  8. AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
  9. System.out.println("Received: " + amqpTemplate.receiveAndConvert());
  10. }
  11. }

3.生产者代码Producer.java

  1. package cn.slimsmart.rabbitmq.demo.spring.sync;
  2. import org.springframework.amqp.core.AmqpTemplate;
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  5. public class Producer {
  6. public static void main(String[] args) {
  7. ApplicationContext context = new AnnotationConfigApplicationContext(AnnotationConfiguration.class);
  8. AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
  9. amqpTemplate.convertAndSend("Hello World");
  10. System.out.println("Sent: Hello World");
  11. }
  12. }

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

另外,声明一个队列代码如:

  1. ApplicationContext context =  new AnnotationConfigApplicationContext(AnnotationConfiguration.class);
  2. AmqpAdmin amqpAdmin = context.getBean(AmqpAdmin.class);
  3. Queue helloWorldQueue = new Queue("create.world.queue");
  4. amqpAdmin.declareQueue(helloWorldQueue);

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

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

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

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

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

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

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

  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. 56.doc values

    主要知识点 doc values     搜索的时候,要依靠倒排索引:在54小节中写到在聚合排序的时候如果仅仅依靠倒排索引的话是不能得出准确的结果的,需要依靠正排索引,所谓的正排索引,其实就是doc ...

  2. ubuntu 配置lamp

    官方配置网站:http://wiki.ubuntu.org.cn/LAMP_%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%A ...

  3. 如何使用qtp12 utf进行功能测试

    首先,按照本博客的安装教程走的,右键管理员运行 接下来点击继续,这个界面只需要勾选到web即可 点击ok,开始运行 进入到主界面之后,file新建一个测试. 可以修改路径等等 点击create之后,出 ...

  4. SpringBoot 读取配置文件的值 赋给静态变量

    需求:写了一个工具类,但是工具类中的一些变量需要放到配置文件中,而这个工具类中的变量与方法都是静态的,这个时候我需要一个办法将配置文件中的相关配置读取过来赋值给这些静态变量.找了一些文章,试了一些方法 ...

  5. Netty学习总结(3)——Netty百万级推送服务

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  6. ACdream 1735 输油管道

    输油管道 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 262144/131072KB (Java/Others)   Problem Des ...

  7. (36)Spring Boot Cache理论篇【从零开始学Spring Boot】

    Spring Boot Cache理论篇 在上一篇中我们介绍了Spring Boot集成Redis的实战例子,里面使用到了Spring Cache,那么什么是Spring Cache呢,本章将会做一个 ...

  8. 怎样从C++代码直接訪问android framework层的WifiService

    说究竟,Java层的service就是就C++层的binder的封装.所以从原理上来讲通过C++代码直接訪问android framework层的service是全然可能的,这篇文章以訪问WifiSe ...

  9. 拓扑排序---AOV图

    对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中全部顶点排成一个线性序列, 使得图中随意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出如 ...

  10. C++实现顺序栈的基本功能

    栈是限定仅在表头进行插入和删除操作的线性表.有着先进后出的特点(FILO): 如今我来动手实现栈的基本本功能练练手: 定义栈的头文件例如以下: #ifndef CSTOCK_H_ #define CS ...