SpringBoot 整合 RabbitMQ 实践
作者:Cott
www.cnblogs.com/cott/p/12402423.html
前文总结了Dubbo与SpringBoot的整合,本文基于这套框架,引入RabbitMQ消息队列。
1.在linux环境使用docker安装RabbitMQ
//拉取镜像
docker pull rabbitmq:management
//启动镜像
docker run -di --name myrabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management
安装成功后登陆控制台
2.生产者
pom.xml中引入RabbitMQ依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><version>1.3.5.RELEASE</version>
</dependency>
配置RabbitMQ服务端连接,和交换机名称
application.yml
spring:rabbitmq:port: 5672username: adminpassword: adminhost: 192.168.200.128virtual-host: /order:fanout:exchange: order.fanout.exchange
生产者向MQ发送消息
Producer.java
package com.cott.gmail.bootuserserviceprovider.mq;import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.util.Date;
import java.util.UUID;@Component
public class Producer {@Autowiredprivate RabbitTemplate rabbitTemplate;@Value("${order.fanout.exchange}")private String exchangeName;public void sendMsg() {String orderId = UUID.randomUUID().toString();String message = "你的订单信息是:" + orderId + ",日期是:" + new Date();rabbitTemplate.convertAndSend(exchangeName, message);}
}
在用户接口的实现类中,调用生产者的方法
UserServiceImpl.java
package com.cott.gmail.bootuserserviceprovider.service.impl;import com.alibaba.dubbo.config.annotation.Service;
import com.cott.gmail.bean.UserAddress;
import com.cott.gmail.bootuserserviceprovider.mq.Producer;
import com.cott.gmail.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.Arrays;
import java.util.List;@Service
@Component
public class UserServiceImpl implements UserService {@AutowiredProducer producer;@Overridepublic List<UserAddress> getAddress(String uesrId) {producer.sendMsg();UserAddress userAddress1 = new UserAddress();userAddress1.setId(1);userAddress1.setUserAddress("1");userAddress1.setUserId("1");UserAddress userAddress2 = new UserAddress();userAddress2.setId(2);userAddress2.setUserAddress("2");userAddress2.setUserId("2");return Arrays.asList(userAddress1, userAddress2);}
}
3.消费者
pom.xml中引入RabbitMQ依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><version>1.3.5.RELEASE</version>
</dependency>
配置RabbitMQ服务端信息,和交换机以及队列名称
application.yml
spring:rabbitmq:port: 5672username: adminpassword: adminhost: 192.168.200.128virtual-host: /order:fanout:exchange: order.fanout.exchangequeue: order.fanout.queue
@RabbitListener注解,绑定队列,交换机,以及选择交换模式FANOUT
@RabbitListener 可以标注在类上面,需配合 @RabbitHandler 注解一起使用
@RabbitListener 标注在类上面表示当有收到消息的时候,就交给 @RabbitHandler 的方法处理,具体使用哪个方法处理,根据 MessageConverter 转换后的参数类型
Consumer.java(消费者)
package com.cott.gmail.bootorderserviceconsumer.service.impl;import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.stereotype.Component;@Component
@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "${order.fanout.queue}", autoDelete = "true"), exchange =
@Exchange(value = "${order.fanout.exchange}", type = ExchangeTypes.FANOUT)))
public class Consumer {@RabbitHandlerpublic void processMessage(String msg) {System.out.format("Receiving Message: -----[%s]----- \n.", msg);}
}
消费者中有调用生产者getAddress()的方法,生产者向MQ中发送一条消息,同时消费者监听MQ,消费消息。
OrderServiceImpl.java
package com.cott.gmail.bootorderserviceconsumer.service.impl;import com.alibaba.dubbo.config.annotation.Reference;
import com.cott.gmail.bean.UserAddress;
import com.cott.gmail.service.OrderService;
import com.cott.gmail.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class OrderServiceImpl implements OrderService {@ReferenceUserService userService;@Overridepublic List<UserAddress> initOrder(String id) {System.out.println("id= " + id);List<UserAddress> list = userService.getAddress("1");for (UserAddress user : list) {System.out.println(user.getUserAddress());}return list;}
}
4.验证
先后启动生产者和消费者,在浏览器发起请求
消费者控制台输出
同时在RabbitMQ控制台查看监控日志
END
Java面试题专栏
【51期】一道阿里面试题:说说你知道的关于BeanFactory和FactoryBean的区别
【52期】记一道简单的Java面试题,但答错率很高!
【53期】面试官:谈一下数据库分库分表之后,你是如何解决事务问题?
【54期】Java序列化三连问,是什么?为什么需要?如何实现?
【55期】面试中经常被问到Java引用类型原理,带你深入剖析
【56期】你说你熟悉并发编程,那么你说说Java锁有哪些种类,以及区别
【57期】面试官问,MySQL建索引需要遵循哪些原则呢?
【58期】盘点那些面试中最常问的MySQL问题,第一弹!
【59期】MySQL索引是如何提高查询效率的呢?(MySQL面试第二弹)
【60期】事务隔离级别中的可重复读能防幻读吗?(MySQL面试第三弹)
我知道你 “在看”
SpringBoot 整合 RabbitMQ 实践相关推荐
- 九、springboot整合rabbitMQ
springboot整合rabbitMQ 简介 rabbitMQ是部署最广泛的开源消息代理. rabbitMQ轻量级,易于在内部和云中部署. 它支持多种消息传递协议. RabbitMQ可以部署在分布式 ...
- RabbitMQ,RabbitMQ 的工作模式,Spring 整合 RabbitMQ,Springboot 整合RabbitMQ
什么是RabbitMQ 1.1 MQ概述 MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器.多用于分布式系统之间进行通信. ⚫ MQ,消息队列,存储消息的中间件 ⚫ ...
- SpringBoot整合 ActiveMQ、SpringBoot整合RabbitMQ、SpringBoot整合Kafka
1.概念:SpringBoot 整合消息服务2.具体内容对于异步消息组件在实际的应用之中会有两类:· JMS:代表作就是 ActiveMQ,但是其性能不高,因为其是用 java 程序实现的:· AMQ ...
- RabbitMq(九) SpringBoot整合RabbitMQ消费者示例代码
概述 在上一篇我们介绍了SpringBoot整合RabbitMQ生产者代码,本章我们介绍SpringBoot整合RabbitMQ,实现消费者工程的代码实现.与生产者集成相比,集成消费者不需要进行添加配 ...
- RabbitMq(八) SpringBoot整合RabbitMQ 生产者代码实现
在本章中我们将创建RabbitMQ的生产者工程,并实现生产者端代码实现. springboot整合RabbitMQ生产者工程步骤如下: 创建maven工程 引入springboot及RabbitMQ依 ...
- Springboot整合一之Springboot整合RabbitMQ
前言 目前,springboot已然成为了最热的java开发整合框架,主要是因其简单的配置,并且本身提供了很多与第三方框架的整合,甚至可以让我们在短短的几分钟里就可以搭建一个完整的项目架构.所以,博主 ...
- Springboot整合RabbitMQ,包含direct,topic,fanout三种模式的整合
一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...
- Spring Boot---(10)SpringBoot整合RabbitMQ
请参考:Spring Boot---(24)springboot整合RabbitMQ 由于docker安装非常方便,这里就用docker来安装和启动了.没接触过docker的可以参考这里:零基础学习D ...
- RabbitMQ 第一天 基础 6 SpringBoot 整合RabbitMQ
RabbitMQ [黑马程序员RabbitMQ全套教程,rabbitmq消息中间件到实战] 文章目录 RabbitMQ 第一天 基础 6 SpringBoot 整合RabbitMQ 6.1 Sprin ...
最新文章
- 分布式系统的复杂度度量思考
- 【Codeforces1327A】: Sum of Odd Intergers C/C++题解
- bash alias, VIM配置,和使用的插件 RAILS开发相关
- 创建表名作为参数的mysq存储过程【procedure】
- 实战SSM_O2O商铺_11【商铺注册】Controller层的实现
- python玩转android_Android上执行python脚本-QPython
- Vue项目打包成桌面程序exe除了使用electron-vue你还可以这样
- BZOJ 1800 [Ahoi2009]fly 飞行棋
- 性能测试——美团国内机票网站(Badboy、JMeter)
- 【ADO.NET--MVC】初学MVC(MVC入门)(1)
- .NET 某电商交易平台Web站 CPU爆高分析
- VC6.0编译错误解决方法集锦
- smartPrinter 安装时1722错误
- 一行代码教你屏蔽你的博客广告
- Mac Mysql5.7.6+免安装版教程
- M洞察|“MOBA”还是“MMO”?2023上半年热门手游大盘点来了,拯救你的游戏荒
- 单片机音频节奏灯_如何用单片机做出用音乐节奏来控制LED灯?
- 现在比较流行的编程语言_比较流行的编程语言
- JPEG最优压缩参数试验【光影魔术手VS Image Optimizer】
- ipguard定制加密超级密码和登录提示
热门文章
- 苹果多款产品加征关税至15% 目前售价暂无影响
- 这个阿里篮球打得最好的男人 拟收购NBA篮网余下51%股权
- 三天花三万!跟董事长女儿相亲却被骗财?世纪佳缘致歉杭州小吴并承诺赔偿...
- 三星Galaxy 首款运动腕表全新渲染图曝光
- linux shell编程if语句内判断参数详解【ZT】
- css除法,CSS_关系数据库 除法,假设有两个关系,R(a,b,c)和T(b,c - phpStudy
- rest php,restAPI
- 我的世界药水合成表图Java_我的世界药水合成表图高清配方-我的世界药水合成表图一览...
- php变量有三种不同的作用域,PHP中变量类型与转换,变量的检测以及变量的作用域学习--2018年4月13日12时03分...
- 梯度下降python编程实现_【机器学习】线性回归——单变量梯度下降的实现(Python版)...