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. 【JavaScript游戏开发】使用HTML5 canvas开发的网页版中国象棋项目

    //V1.0 : 实现棋子的布局,画布及游戏场景的初始化 //V2.0 : 实现棋子的颜色改变 //V3.0 :实现所有象棋的走棋规则 //V4.0 : 实现所有棋子的吃子功能 完整的项目源码已经开源 ...

  2. kissui.scrollanim页面滚动动画库插件

    简介 kissui.scrollanim是一款实用的纯JS和CSS3页面滚动动画库插件.通过该插件可以使元素进入浏览器视口的时候,展示指定的CSS3动画效果. 下载地址及演示 在线演示 在线下载 安装 ...

  3. Java设计模式之 — 模板方法(Template Method)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744002 今天你还是像往常一样来上班,一如既往地开始了你的编程工作. 项目经理告 ...

  4. 15.Hibernate一对多双向关联映射+分页

    1.创建如下数据库脚本 --创建用户信息表 --编号,用户名,密码,年龄,性别,昵称,手机,地址,管理员,图像地址 create table users ( id ) primary key, use ...

  5. 洛谷 P1494 BZOJ 2038 [2009国家集训队]小Z的袜子(hose)

    //洛谷题面字体.排版我向来喜欢,却还没收录这道如此有名的题,BZOJ的题面字体太那啥啦,清橙的题面有了缩进,小标题却和正文字体一致,找个好看的题面咋这么难呐………… //2019年3月23日23:0 ...

  6. hadoop1.0.4升级到hadoop2.2 具体流程步骤

     hadoop1.x 升级到hadoop2.2 本文參考了博客:http://blog.csdn.net/ajax_jquery/article/details/27311671,对一些地方做了改动. ...

  7. [Angular] Freshness Caching Policy - Network First, Cache Last

    In some cases, you want to get fresh data instead of cache data to the screen, such as stock applica ...

  8. CCNP路由实验之十四 路由器的訪问控制ACL

     年9月1月12:00.还有一种时间叫做周期时间(periodic),即这个时间是会多次反复的.比方每周一,或者每周一到周五 ,"rotary 2″开启3002以此类推. 变成1,1变成 ...

  9. AlterDialog 经常使用的样式

    使用AlerDialog 创建对话框 : AlertDialog.Builder builder = new AlertDialog.Builder(this); 1.设置简单的对话框 builder ...

  10. luogu1775 古代人的难题 打表找规律

    题目大意:给出一正整数k,求满足(x^2-x*y-y^2)^2=1且x,y∈[1,k]且x^2+y^2最大的正整数x,y. 既然x,y的范围给出来了,我们便有了暴力解法.因此,本题最适合打表找规律了! ...