【Spring Boot】--整合RabbitMQ
目录
0、前言
1、消息流程
2、添加依赖
3、添加配置
4、新建配置类
5、新建生产者接口
6、新建生产者实现类
7、新建生产者控制器类
8、测试
0、前言
需要已经安装RabbitMQ,并且启动、配置好用户。参考《基于CentOS6.5安装RabbitMQ》,《基于CentOS6.5使用RabbitMQ(二)》,《基于CentOS6.5使用RabbitMQ(三)》。
1、消息流程
生产者,消费者,消息
内部消息:Exchange,Binding,Queues
2、添加依赖
在pom.xml中添加rabbitmq的依赖:
<!-- 引入rabbitmq依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
3、添加配置
# rabbitmq配置
mq.rabbit.host=**.**.**.**
mq.rabbit.port=5672
mq.rabbit.virtualHost=/
mq.rabbit.username=admin
mq.rabbit.password=admin
4、新建配置类
RabbitMQConfig.java
/*** @Auther: chisj chisj@foxmal.com* @Date: 2018-11-12 15:35* @Description:*/
@Component
@Slf4j
@ConfigurationProperties
public class RabbitMQConfig {@Value("${mq.rabbit.host}")public String mqRabbitHost;@Value("${mq.rabbit.port}")public int mqRabbitPort;@Value("${mq.rabbit.username}")public String mqRabbitUserName;@Value("${mq.rabbit.password}")public String mqRabbitPassword;@Value("${mq.rabbit.virtualHost}")public String mqRabbitVirtualHost;public static String EXCHANGE_NAME = "exchange-name";public static String QUEUE_NAME = "queue-name";public static String ROUTING_KEY = "routing-key";@Beanpublic ConnectionFactory connectionFactory() {CachingConnectionFactory connectionFactory = new CachingConnectionFactory(this.mqRabbitHost,this.mqRabbitPort);connectionFactory.setUsername(this.mqRabbitUserName);connectionFactory.setPassword(this.mqRabbitPassword);connectionFactory.setVirtualHost(this.mqRabbitVirtualHost);connectionFactory.setPublisherConfirms(true);return connectionFactory;}@Beanpublic RabbitTemplate rabbitTemplate() {RabbitTemplate template = new RabbitTemplate(connectionFactory());return template;}@Beanpublic DirectExchange defaultExchange() {return new DirectExchange(EXCHANGE_NAME);}@Beanpublic Queue queue() {return new Queue(QUEUE_NAME, true);}@Beanpublic Binding binding() {return BindingBuilder.bind(queue()).to(defaultExchange()).with(ROUTING_KEY);}@Beanpublic SimpleMessageListenerContainer messageContainer() {SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory());container.setQueues(queue());container.setExposeListenerChannel(true);container.setMaxConcurrentConsumers(1);container.setConcurrentConsumers(1);container.setAcknowledgeMode(AcknowledgeMode.MANUAL);container.setMessageListener(new ChannelAwareMessageListener() {public void onMessage(Message message, com.rabbitmq.client.Channel channel) throws Exception {byte[] body = message.getBody();log.info("消费端接收到消息 : " + new String(body));channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);}});return container;}}
5、新建生产者接口
ProductService.java
/*** @Auther: chisj chisj@foxmal.com* @Date: 2018-11-12 15:37* @Description:*/
public interface ProductService {/*** 保存*/public int save(String productName);}
6、新建生产者实现类
ProductServiceImpl.java
/*** @Auther: chisj chisj@foxmal.com* @Date: 2018-11-12 15:39* @Description:*/
@Service("productServiceImpl")
@Slf4j
public class ProductServiceImpl implements ProductService, RabbitTemplate.ConfirmCallback {private RabbitTemplate rabbitTemplate;public ProductServiceImpl(RabbitTemplate rabbitTemplate){this.rabbitTemplate=rabbitTemplate;this.rabbitTemplate.setConfirmCallback(this);}/*** 保存** @param productName*/@Overridepublic int save(String productName) {//执行保存String uuid = UUID.randomUUID().toString();CorrelationData correlationId = new CorrelationData(uuid);rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, RabbitMQConfig.ROUTING_KEY, productName, correlationId);return 0;}@Overridepublic void confirm(CorrelationData correlationData, boolean ack, String cause) {log.info("消息id:" + correlationData);if (ack) {log.info("消息发送确认成功");} else {log.info("消息发送确认失败:" + cause);}}
}
7、新建生产者控制器类
ProductController.java
/*** @Auther: chisj chisj@foxmal.com* @Date: 2018-11-12 15:42* @Description:*/
@RestController
@RequestMapping("/Product")
public class ProductController {@Resourceprivate ProductService productService;@RequestMapping("/save")public String save(String productName) {productService.save(productName);return "product save success.";}}
8、测试
在postman中请求{{url}}/Product/save这个端子
查看后台log
【Spring Boot】--整合RabbitMQ相关推荐
- spring boot整合RabbitMQ —— 十分钟急速上手
安装运行rabbitmq 1.docker安装rabbitmq: docker run -it --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq ...
- Spring Boot 整合 RabbitMQ 实现
Spring Boot 整合 RabbitMQ 实现 1. 开发环境搭建 1.1 pom配置 1.2 application.yml配置 2. 消费者模块(springboot-rabbitmq-co ...
- Spring Boot: Spring Boot 整合 RabbitMQ
前言 RabbitMQ 是一个消息队列,说到消息队列,大家可能多多少少有听过,它主要的功能是用来实现应用服务的异步与解耦,同时也能起到削峰填谷.消息分发的作用. 消息队列在比较主要的一个作用是用来做应 ...
- 【消息中间件】Spring Boot整合RabbitMQ
简介 在Spring项目中,可以使用Spring-Rabbit去操作RabbitMQ 尤其是在spring boot项目中只需要引入对应的amqp启动器依赖即可,方便的使用RabbitTemplate ...
- Spring boot整合rabbitmq
一.生产者 1.pom.xml <properties><maven.compiler.source>8</maven.compiler.source><ma ...
- RabbitMQ使用及与spring boot整合
1.MQ 消息队列(Message Queue,简称MQ)--应用程序和应用程序之间的通信方法 应用:不同进程Process/线程Thread之间通信 比较流行的中间件: ActiveMQ Rabbi ...
- rabbitmq fanout java_spring boot整合RabbitMQ实例详解(Fanout模式)
1.Fanout Exchange介绍 Fanout Exchange 消息广播的模式,不管路由键或者是路由模式,会把消息发给绑定给它的全部队列,如果配置了routing_key会被忽略. 如上图所示 ...
- Spring Boot 整合——Spring Boot整合kafka整合
Spring Boot 整合之前的内容 项目名称 描述 地址 base-data-mybatis 整合mybatis-plus(实际上官方教程已经很多,只做了自定义插件) 未完成 base-jpa J ...
- Spring Boot整合elasticsearch实现全文检索
文章目录 1.引入 1.1 Luence 1.2 Solr 1.3 ElasticSearch 2. ElasticSearch安装 2.1 云服务器安装 2.1.1. docker安装 2.1.2 ...
- spring boot整合spring security笔记
最近自己做了一个小项目,正在进行springboot和spring Security的整合,有一丢丢的感悟,在这里分享一下: 首先,spring boot整合spring security最好是使用T ...
最新文章
- 关于FillSchema与Fill
- MyEclipse创建struts.xml
- “科学学”视角下的科研工作者行为研究
- 倒计时 5 天!年度开发者盛会 Unite Shanghai 2019 全日程揭晓(附表)
- Vue.js学习笔记(一) - 起步
- java基础 泛型类的定义
- CMSIS Driver
- Axure RP--快捷键大全(常用快捷键)
- 3DsMax导出插件编写(二)——常规SDK方法进行信息获取和保存文件
- 程序员优秀开源免费软件推荐
- iptables路由转换
- 什么是水货?如何辨别水货手机?水货手机能不能用?
- HTML5 案例学习笔记
- 英文金曲大赛c语言,英文歌曲_最激情!佐治亚理工开学典礼欢迎辞_沪江英语
- C语言入门知识1(零基础新手适用)
- 古典概型、几何概型与概率的区别与联系
- 商务手机最大突破是打破墨守成规的工作方式
- 1005【顺序结构】马克与爸爸的年龄问题
- 相对论通俗演义(1-10) 第九章
- 软件/APP/产品投放渠道分类大全
热门文章
- 使用C#.NET WebBrowser控件导航到不同的网站出现 所请求的资源正在使用中。 (从HRESULT异常:0x800700AA)
- php 生成纯黑白图片,使用CSS将彩色图片转换为黑白图片
- oracle 安装 step6,Tecnomatix16.0.1节点锁定型许可安装手册Win10
- python 简单方式红绿灯状态识别
- android版手机qq 5.0,手机QQ5.0安卓版今日正式发布 手机QQ5.0更新升级内容介绍
- 单身女生看过来:你为什么没有男朋友的20个原因
- 16 tia 内容说明 安装包_TIA Portal V16 软件安装包 安装教程 授权
- 人生路上前进的方向----有几条线贯穿自己的人生
- 达梦数据库(DM)——命令方式开启达梦数据库本地归档的具体方法
- Excel日期修改为统一月份