Spring Boot 入门(八):集成RabbitMQ消息队列

本片文章续《Spring Boot 入门(七):集成 swagger2》,关于RabbitMQ的介绍请参考《java基础(六):RabbitMQ 入门

1.增加依赖

1         <!--rabbitMq-->
2         <dependency>
3             <groupId>org.springframework.boot</groupId>
4             <artifactId>spring-boot-starter-amqp</artifactId>
5         </dependency>

2.增加conf

 1 2
 3 import lombok.extern.slf4j.Slf4j;
 4 import org.springframework.amqp.core.*;
 5 import org.springframework.amqp.rabbit.connection.CorrelationData;
 6 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 7 import org.springframework.amqp.rabbit.core.RabbitTemplate.ConfirmCallback;
 8 import org.springframework.amqp.rabbit.core.RabbitTemplate.ReturnCallback;
 9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.beans.factory.annotation.Value;
11 import org.springframework.context.annotation.Bean;
12 import org.springframework.context.annotation.Configuration;
13
14 import javax.annotation.PostConstruct;
15
16 /**
17  * @program:
18  * @description: Rabbit相关配置
19  * @author: DZ
20  * @create: 2019-10-18 17:07
21  **/
22 @Slf4j
23 @Configuration
24 public class RabbitConfig implements ConfirmCallback, ReturnCallback {
25     @Autowired
26     private RabbitTemplate rabbitTemplate;
27
28     //目前就声明了一个消息队列
29     // 队列名称
30 31     public String queue = "queue";
32     // 交换机名称
33    34     public String exchang="exchange";
35     // 关键字
36     37     public String key="key";
38
39     @PostConstruct
40     public void init() {
41         rabbitTemplate.setConfirmCallback(this);
42         rabbitTemplate.setReturnCallback(this);
43     }
44
45     //此主要用于检查交换机(exChange),当 ack=false,交换机可能错误
46     @Override
47     public void confirm(CorrelationData correlationData, boolean ack, String cause) {
48         //在发送消息的时候correlationData传入的为进件编号
49         if (ack) {
50             log.info("消息发送成功:correlationData = " + correlationData);
51         } else {
52             //如果有多个交换机,这里日志需要优化
53             log.error("消息发送失败,交换机可能错误:correlationData = " + correlationData + ",exchang:" + exchang);
54         }
55     }
56
57     //次方法用于检查队列(queue),当此方法执行时,队列可能错误
58     @Override
59     public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
60         //如果有多个队列,这里日志需要优化
61         log.error("消息发送失败,队列可能错误:correlationData = " + message.getMessageProperties().getCorrelationId() + ",queue:" + queue);
62     }
63
64     // 声明队列
65     @Bean
66     public Queue queue() {
67         return new Queue(queue, true);//表示持久化
68     }
69
70     // 声明交换机,注意交换机的类别
71     @Bean
72     public FanoutExchange exchange() {
73         return new FanoutExchange(exchang);
74         //return new DirectExchange(exchang);
75         //return new TopicExchange(exchang);
76     }
77
78     // 绑定交换机和队列,如果是fanout,就不需要key
79     @Bean
80     public Binding binding() {
81         return BindingBuilder.bind(queue()).to(exchange());
82         //return BindingBuilder.bind(queue()).to(exchange()).with(key);
83     }
84 }

在实际开发过程中,mq的相关属性都配置在application.yml的配置文件中。

在绑定交换机的过程中,需要注意绑定方式以及key。

3.调用

 1 @Autowired
 2     private RabbitTemplate rabbitTemplate;
 3   6     @RequestMapping(value = "testRabbitMQ", method = RequestMethod.POST)
 7     public String testRabbitMQ() {
 8         String msg = "{\"id\":\"123\",\"msg\":\"555555\"}";
 9         String id = "123456789";
11         CorrelationData correlationId = new CorrelationData(id);
12         log.info("开始发送消息 : correlationId= " + correlationId + ",exchange=" + exchange + ",msg= " + msg);
13         Object response = rabbitTemplate.convertSendAndReceive(exchange, "", msg, correlationId);
14
15         log.info("开始发送结束 : correlationId= " + correlationId);
16         return "testRabbitMQ";
17     }

由于本文中交换机的绑定方式为fanout,所以不需要key,这里在发送消息的时候rabbitTemplate.convertSendAndReceive(exchange, "", msg, correlationId);key直接传入一个空字符串即可。

原文地址:https://www.cnblogs.com/dz-boss/p/11729419.html

时间: 2024-07-31 06:21:32

Spring Boot 入门(八):集成RabbitMQ消息队列的相关文章

Spring Boot:使用Rabbit MQ消息队列

综合概述 消息队列 消息队列就是一个消息的链表,可以把消息看作一个记录,具有特定的格式以及特定的优先级.对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息,对消息队列有读权限的进程则可以从消息队列中读走消息,而消息队列就是在消息的传输过程中保存消息的容器,你可以简单的把消息队列理解为类似快递柜,快递员(消息发布者)往快递柜(消息队列)投递物件(消息),接受者(消息订阅者)从快递柜(消息队列)接收物件(消息),当然消息队列往往还包含一些特定的消息传递和接收机制. 消息队列作为分布式系

Laravel 集成 RabbitMQ 消息队列

目录 消息队列 RabbitMQ docker 部署 RabbitMQ 操作步骤 访问管理界面 Laravel 集成 RabbitMQ Laravel 5.2 Laravel 5.5 消息队列 消息(Message)是指在应用间传送的数据.可以只包含文本字符串,也可以嵌入对象. 消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递. 消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的

spring boot(十八)集成FastDFS文件上传下载

上篇文章介绍了如何使用Spring Boot上传文件,这篇文章我们介绍如何使用Spring Boot将文件上传到分布式文件系统FastDFS中. 这个项目会在上一个项目的基础上进行构建. 1.pom包配置 我们使用Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0. <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</art

Spring Boot 入门(九):集成Quartz定时任务

本片文章续<Spring Boot 入门(八):集成RabbitMQ消息队列>,关于Quartz定时任务请参考<Quartz的基本使用之入门(2.3.0版本)> spring boot实现定时任务,除了集成Quartz外,还可以直接使用scheduler注解.使用1个简单的注解就可以完成,为什么还要较为复杂的集成Quartz呢?这里我简单回答下这2中方式的区别,这也是我在项目中为什么要选择Quartz这种方式. 1.scheduler注解方式,一旦定时任务产生异常,那么此定时任务就

Spring Boot (25) RabbitMQ消息队列

MQ全程(Message Queue)又名消息队列,是一种异步通讯的中间件.可以理解为邮局,发送者将消息投递到邮局,然后邮局帮我们发送给具体的接收者,具体发送过程和时间与我们无关,常见的MQ又kafka.activemq.zeromq.rabbitmq等等. RabbitMQ RabbitMQ是一个遵循AMQP协议,由面向高并发的erlang语言开发而成,用在实时的对可靠性要求比较高的消息传递上,支持多种语言客户端,支持延迟队列. 基础概念 Broker:消息队列的服务器实体 Exchange:

Spring Boot 入门(十一):集成 WebSocket, 实时显示系统日志

以前面的博客为基础,最近一篇为Spring Boot 入门(十):集成Redis哨兵模式,实现Mybatis二级缓存.本篇博客主要介绍了Spring Boot集成 Web Socket进行日志的推送,并实时显示在页面上. 1.导入jar包 第一个jar包是websocket的,第二个jar包是关于环形队列的jar包,本案例是通过本地队列存储日志.有条件的话,最好通过中间件存储(eg:redis,mq……).通过本地队列存储日志会存在日志丢失的情况,且日志量太大,会把页面卡死. 1 <!--beg

Spring boot入门(二):Spring boot集成MySql,Mybatis和PageHelper插件

上一篇文章,写了如何搭建一个简单的Spring boot项目,本篇是接着上一篇文章写得:Spring boot入门:快速搭建Spring boot项目(一),主要是spring boot集成mybatis和pagehelper 关于mybatis和pagehelper的介绍,可以自行博客,网上很多类似的博客,这里,我直接上代码和项目搭建教程. 1.配置文件:在配置文件application.yml中配置MySql数据库连接池和Mybatis扫描包以及PageHelper分页插件 1 mybati

Spring boot入门(三):SpringBoot集成结合AdminLTE(Freemarker),利用generate自动生成代码,利用DataTable和PageHelper进行分页显示

关于SpringBoot和PageHelper,前篇博客已经介绍过Spring boot入门(二):Spring boot集成MySql,Mybatis和PageHelper插件,前篇博客大致讲述了SpringBoot如何集成Mybatis和Pagehelper,但是没有做出实际的范例,本篇博客是连接上一篇写的.通过AdminLTE前端框架,利用DataTable和PageHelper进行分页显示,通过对用户列表的增删改查操作,演示DataTable和PageHelper的使用. (1)Admi

Spring Boot(十八):使用Spring Boot集成FastDFS

Spring Boot(十八):使用Spring Boot集成FastDFS 环境:Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0 功能:使用Spring Boot将文件上传到分布式文件系统FastDFS中. 一.pom包配置 <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifactId> <ve