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. 关于node对文件的读取

    设计: 通过终端git / cmd 获取用户输入路径,然后遍历路径下所有的文件,打印输出. 因为需要命令行交互,所以引入prompt库 (https://github.com/flatiron/pro ...

  2. 使用Arcgis进行画面(线)并计算大小(长度)。

    在使用Arcgis API for JavaScript进行做地图开发的过程中,在地图进行画线.画面是经常使用的功能.本文主要介绍这一功能. 本文适用Arcgis API版本:Arcgis API f ...

  3. UOJ #310 黎明前的巧克力 (FWT)

    题目传送门 题目大意:给你一个序列,定义一个子序列的权值表示子序列中元素的异或和,现在让你选出两个互不相交的子序列,求选出的这两个子序列权值相等的方案数,$n,a_{i}\leq 10^{6}$ 这是 ...

  4. Codeforces 898D - Alarm Clock

    传送门:http://codeforces.com/contest/898/problem/D 有n个闹钟,第i(1≤i≤n)个闹钟将在第ai(1≤ai≤106)分钟鸣响,鸣响时间为一分钟.当在连续的 ...

  5. mysql优化sql语句

    mysql优化sql语句   常见误区   www.2cto.com   误区1:   count(1)和count(primary_key) 优于 count(*)   很多人为了统计记录条数,就使 ...

  6. JAVA接口的简单实现

    感觉越来越强烈, 我的心在跳~~~,我的宝剑在嘟~~ Flyer.java package cc.openhome; public interface Flyer{ public abstract v ...

  7. ZOJ 3494

    超级神奇有趣题. AC自动机+数位DP.其实,数位DP在处理含有某些数字时特别不好处理,应该把它倒转为求不含有.这道题把数位DP+AC自动机结合起来,实在是很巧妙,把数字变为串来处理,强大! 要使用A ...

  8. Swift----安装,简单介绍

    安装: 眼下最新的稳定版是 Swift 0.94.1 1.下载:wget http://swiftlang.org/packages/swift-0.94.1.tar.gz 2.解压:tar xfz ...

  9. BZOJ 1044 HAOI2008 木棍切割 二分答案+动态规划

    题目大意:给定n个连在一起的木棍.分成m+1段.使每段最大值最小,求最大值的最小值及最大值最小时切割的方案数 第一问水爆了--二分答案妥妥秒过 第二问就有些难度了 首先我们令f[i][j]表示用前j个 ...

  10. html里显示中文乱码的解决的方法

    在HTML开头统一规范下编码格式: <meta http-equiv="Content-Type" content="text/html; charset=utf- ...