文档章节

[RabbitMQ]15_RabbitMQ学习之spring整合发送同步消息(注解实现)

morpheusWB
 morpheusWB
发布于 2017/09/05 21:54
字数 475
阅读 27
收藏 1

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

1.注解配置AnnotationConfiguration.Java

 

[java] view plain copy

 print?

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

2.消费者代码Consumer.java

 

 

[java] view plain copy

 print?

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

3.生产者代码Producer.java

 

 

[java] view plain copy

 print?

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

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

 

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

 

[java] view plain copy

 print?

  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);  

本文转载自:http://blog.csdn.net/zhu_tianwei/article/details/40918477

morpheusWB
粉丝 26
博文 84
码字总数 14703
作品 0
西安
程序员
私信 提问
RabbitMQ 入门 与 RabbitMQ 在 Spring Boot 中的使用

Message Broker与AMQP简介 Message Broker是一种消息验证、传输、路由的架构模式,其设计目标主要应用于下面这些场景: 消息路由到一个或多个目的地 消息转化为其他的表现方式 执行消息的聚集...

Anur
2018/09/13
0
0
Spring Boot整合RabbitMQ实例

什么是消息? 消息是一个或者多个实体之间沟通的一种方式并且无处不在。 自从计算机发明以来,计算机以多种多样的方式发送消息,消息定义了软硬件或者应用程序之间的沟通方式。消息总是有一个...

英雄有梦没死就别停
2018/06/27
0
0
【Spring Cloud】分布式必学springcloud(十一)——消息驱动 SpringCloud Stream

一、前言 在前面的博客中,基本上已经把springcloud系列的大部分都介绍过了。如果有太明白的小白,还是建议从小编的第一篇博客进行学习。 在这篇博客中,小白向大家介绍一个消息事件驱动框架...

kisscatforever
2018/04/26
0
0
RabbitMQ 实战教程 文集

RabbitMQ 实战教程 文集 此系列博客经梁总(梁桂钊的博客)授权录入本站点,下面推荐下梁总的技术公众号【服务端的思维】,公众号不定时更新技术文章,干货满满!! RabbitMQ 实战教程(一) He...

chenssy
2018/10/06
0
0
阿里大牛带你轻松实现RabbitMQ 延时消息

RabbitMQ 延时消息的实现(上) 我们在实际业务中有一些需要延时发送消息的场景,例如: 家里有一台智能热水器,需要在30分钟后启动 未付款的订单,15分钟后关闭 注意这里的场景是延时,不是...

Java架构
01/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

基础工具类

package com.atguigu.util;import java.sql.Connection;import java.sql.SQLException;import java.util.Properties;import javax.sql.DataSource;import com.alibaba.druid......

architect刘源源
今天
43
0
P30 Pro劲敌!DxO官宣新机:排行榜又要变

5月26日晚间,DxOMark官方推特预告,将在5月27日公布一款新机型的DxOMark评分,猜猜是哪款? 网友猜想的机型有:红米K20、谷歌Pixel 3a、索尼Xperia 1、诺基亚9 PureView等。 DxOMark即将公布...

linux-tao
昨天
15
0
Ubuntu18.04.2窗口过小不能自适应(二次转载)

解决Ubuntu在虚拟机窗口不能自适应 2018年09月06日 16:20:08 起不了名儿 阅读数 855 此博文转载:https://blog.csdn.net/nuddlle/article/details/77994080(原地址) 试了很多办法这个好用 ...

tahiti_aa
昨天
2
0
死磕 java同步系列之CountDownLatch源码解析

问题 (1)CountDownLatch是什么? (2)CountDownLatch具有哪些特性? (3)CountDownLatch通常运用在什么场景中? (4)CountDownLatch的初始次数是否可以调整? 简介 CountDownLatch,可以...

彤哥读源码
昨天
6
0
Nginx提供下载apk服务

有时候我们可能需要提供文件或者其他apk下载链接,通过 nginx 配置可以很简单地实现。 server {    listen 80;    server_name download.xxx.com;    root app;    locati...

Jack088
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部