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

1.增加依赖

         <!--rabbitMq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2.增加conf

 import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.core.RabbitTemplate.ConfirmCallback;
import org.springframework.amqp.rabbit.core.RabbitTemplate.ReturnCallback;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import javax.annotation.PostConstruct; /**
* @program:
* @description: Rabbit相关配置
* @author: DZ
* @create: 2019-10-18 17:07
**/
@Slf4j
@Configuration
public class RabbitConfig implements ConfirmCallback, ReturnCallback {
@Autowired
private RabbitTemplate rabbitTemplate; //目前就声明了一个消息队列
// 队列名称
public String queue = "queue";
// 交换机名称
public String exchang="exchange";
// 关键字
public String key="key"; @PostConstruct
public void init() {
rabbitTemplate.setConfirmCallback(this);
rabbitTemplate.setReturnCallback(this);
} //此主要用于检查交换机(exChange),当 ack=false,交换机可能错误
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
//在发送消息的时候correlationData传入的为进件编号
if (ack) {
log.info("消息发送成功:correlationData = " + correlationData);
} else {
//如果有多个交换机,这里日志需要优化
log.error("消息发送失败,交换机可能错误:correlationData = " + correlationData + ",exchang:" + exchang);
}
} //次方法用于检查队列(queue),当此方法执行时,队列可能错误
@Override
public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
//如果有多个队列,这里日志需要优化
log.error("消息发送失败,队列可能错误:correlationData = " + message.getMessageProperties().getCorrelationId() + ",queue:" + queue);
} // 声明队列
@Bean
public Queue queue() {
return new Queue(queue, true);//表示持久化
} // 声明交换机,注意交换机的类别
@Bean
public FanoutExchange exchange() {
return new FanoutExchange(exchang);
//return new DirectExchange(exchang);
//return new TopicExchange(exchang);
} // 绑定交换机和队列,如果是fanout,就不需要key
@Bean
public Binding binding() {
return BindingBuilder.bind(queue()).to(exchange());
//return BindingBuilder.bind(queue()).to(exchange()).with(key);
}
}

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

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

3.调用

 @Autowired
private RabbitTemplate rabbitTemplate;
@RequestMapping(value = "testRabbitMQ", method = RequestMethod.POST)
public String testRabbitMQ() {
String msg = "{\"id\":\"123\",\"msg\":\"555555\"}";
String id = "123456789";
CorrelationData correlationId = new CorrelationData(id);
log.info("开始发送消息 : correlationId= " + correlationId + ",exchange=" + exchange + ",msg= " + msg);
Object response = rabbitTemplate.convertSendAndReceive(exchange, "", msg, correlationId); log.info("开始发送结束 : correlationId= " + correlationId);
return "testRabbitMQ";
}

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

使用swagger测试,发送消息成功:

下面测试一个交换机错误的情况,来说明回调函数的作用于意义

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

  1. (八)RabbitMQ消息队列-通过Topic主题模式分发消息

    原文:(八)RabbitMQ消息队列-通过Topic主题模式分发消息 前两章我们讲了RabbitMQ的direct模式和fanout模式,本章介绍topic主题模式的应用.如果对direct模式下通过 ...

  2. SpringBoot集成RabbitMQ消息队列搭建与ACK消息确认入门

    1.RabbitMQ介绍 RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗.Rabbi ...

  3. Spring Boot:使用Rabbit MQ消息队列

    综合概述 消息队列 消息队列就是一个消息的链表,可以把消息看作一个记录,具有特定的格式以及特定的优先级.对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息,对消息队列有读权限的进程则可以 ...

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

    上篇文章介绍了如何使用Spring Boot上传文件,这篇文章我们介绍如何使用Spring Boot将文件上传到分布式文件系统FastDFS中. 这个项目会在上一个项目的基础上进行构建. 1.pom包 ...

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

    本片文章续<Spring Boot 入门(八):集成RabbitMQ消息队列>,关于Quartz定时任务请参考<Quartz的基本使用之入门(2.3.0版本)> spring ...

  6. Spring Boot (25) RabbitMQ消息队列

    MQ全程(Message Queue)又名消息队列,是一种异步通讯的中间件.可以理解为邮局,发送者将消息投递到邮局,然后邮局帮我们发送给具体的接收者,具体发送过程和时间与我们无关,常见的MQ又kafk ...

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

    以前面的博客为基础,最近一篇为Spring Boot 入门(十):集成Redis哨兵模式,实现Mybatis二级缓存.本篇博客主要介绍了Spring Boot集成 Web Socket进行日志的推送, ...

  8. RabbitMQ入门:在Spring Boot 应用中整合RabbitMQ

    在上一篇随笔中我们认识并安装了RabbitMQ,接下来我们来看下怎么在Spring Boot 应用中整合RabbitMQ. 先给出最终目录结构: 搭建步骤如下: 新建maven工程amqp 修改pom ...

  9. 深入剖析 RabbitMQ —— Spring 框架下实现 AMQP 高级消息队列协议

    前言 消息队列在现今数据量超大,并发量超高的系统中是十分常用的.本文将会对现时最常用到的几款消息队列框架 ActiveMQ.RabbitMQ.Kafka 进行分析对比.详细介绍 RabbitMQ 在 ...

随机推荐

  1. note_4.10

    单位根反演 \[ \frac{1}{k}\sum_{i=0}^{k-1}\omega_k^{in}=[k|n] \] 所以 \[ \begin{equation} \begin{split} \sum ...

  2. fluent提供的边界条件解析【转载】

    转载自:http://chengkang8.blog.163.com/blog/static/6719535620113149552369/ 1. 速度入口边界条件 用于定义流动入口边界的速度和标量 ...

  3. ICEM-interface相关操作

    原视频下载地址: https://pan.baidu.com/s/14Tx-eYPccvhrg5wrg7gYvw 密码: 8fdp

  4. elasticsearch x-pack license过期

    1.注册一个新的license,每一项都要填写,每次可以使用一年,一年到期后再来注册一个新的 2.更新license (官方文档:https://www.elastic.co/guide/en/x-p ...

  5. arts 打卡12周

    一 算法:  字符串转换整数 (atoi)   请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找 ...

  6. 【软工实践】团队项目Snug-选题报告

    组长博客链接 组长博客 NABCD分析引用 NEED 需求 根据我们的调查显示,大部分人都有着不规律的生活习惯,他们都希望有一款软件能够帮助他们,养成一个适合自己的较规律的生活习惯.我们的Snug正是 ...

  7. lisp语法分析与执行分离

    lisp语法分析与执行分离 <sicp>4.1.7节读书笔记 这节中将书中之前实现的解释器做了改进,将语法分析于执行分离.这样做能提高很多效率,比如我们需定义一个过程,然后执行该过程多次. ...

  8. Android 开发常用工具合集

    在 Android 开发中经常使用到的小功能,用于记录开发的那些事^_^ 1. 获取 release 和 debug 版本的 SHA1 public static String getSHA1(Con ...

  9. Java实现视频网站的视频上传、视频转码、及视频播放功能(ffmpeg)

    视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...

  10. Windows 开始 运行中所打开的默认程序以及优先级

    Windows 开始 运行中所打开的默认程序以及优先级 Default app/softwares and priority for Windows/start/run 商务合作,科技咨询,版权转让: ...