《妈妈再也不用担心我的学习系列》之RabbitMQ快速入门
为什么要用RabbitMQ
因为我们有很多场景需要用到消息中间件,比如异步发送消息啥的啥的,这里我就不多做解释了,大家应该都会的啊(怪我太懒了~)
工欲善其事 必先利其器
这里我是用的我的docker来安装RabbitMQ的客户端。(不会docker的可以去看看我的这一篇文章)
地址:CentOS-7安装Docker
- 下载rabbitmq镜像
docker pull rabbitmq:management // 这里注意management是版本的意思这个是带web管理界面的
- 启动镜像
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:management // 这里可以设置默认的用户和密码 我这里都设置为admin了
- 去浏览器输入你的ip地址:ip:15672(15672是管理界面的端口)
利器已经安装好了可以愉快的敲代码了
RabbitMQ 四种交换机模式:
Direct Pattern (此模式不需要配置交换机)
Fanout Pattern ( 类似于广播一样,将消息发送给和他绑定的队列 )
Topic Pattern ( 绑定交换机时可以做匹配。 #:表示零个或多个单词。*:表示一个单词 )
Header Pattern ( 带有参数的匹配规则 )
这里我只写了三种模式的示例(因为我想偷懒)
引入maven依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
添加配置
spring:application:name: rabbitmqrabbitmq:host: 你的ipport: 5672username: 设置的用户名password: 设置的密码
写个配置类
@Configuration
public class RabbitConfig {@Beanpublic RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {// 创建消息连接RabbitTemplate template = new RabbitTemplate(connectionFactory);// 消息设置为json类型template.setMessageConverter(new Jackson2JsonMessageConverter());return template;}
}
写个固定值(这里是为了方便调用)
public interface MQconst {/*** 队列*/String TEST_QUEUE="queue.test";String TEST_QUEUE1="queue.test1";String TEST_QUEUE2="queue.test2";String TEST_QUEUE3="queue.test3";/*** 主题*/String TEST_TOPIC="topic.test";/***广播*/String TEST_BROADCAST="broadcast.test";/***路由key*/String TEST_ROUTEKEY="sys.test";
}
写个队列和交换机绑定类
@Configuration("testQueueDeclaration")
public class QueueDeclaration implements MQconst {/*** 队列* @return*/@Bean("testQueue")public Queue testQueue() {return new Queue(TEST_QUEUE);}@Bean("testQueue1")public Queue testQueue1() {return new Queue(TEST_QUEUE1);}@Bean("testQueue2")public Queue testQueue2() {return new Queue(TEST_QUEUE2);}@Bean("testQueue3")public Queue testQueue3() {return new Queue(TEST_QUEUE3);}/*** 交换机* @return*/@Bean("testTopic")public TopicExchange testTopic() {return new TopicExchange(TEST_TOPIC);}/*** test-广播消息交换机* @return*/@Bean("testBroadcast")public FanoutExchange testBroadcast() {return new FanoutExchange(TEST_BROADCAST);}/*** 绑定* @return*/@Bean("testBind")public Binding testBind(@Qualifier("testQueue") Queue testQueue, TopicExchange testTopic) {return BindingBuilder.bind(testQueue).to(testTopic).with(TEST_ROUTEKEY);}@Bean("testBind1")public Binding testBind1(@Qualifier("testQueue1")Queue testQueue, FanoutExchange testBroadcast) {return BindingBuilder.bind(testQueue).to(testBroadcast);}@Bean("testBind2")public Binding testBind2(@Qualifier("testQueue2") Queue testQueue, FanoutExchange testBroadcast) {return BindingBuilder.bind(testQueue).to(testBroadcast);}}
准备充足可以开始了
direct模式
- 消费者
@Component
@RabbitListener(queues = MQconst.TEST_QUEUE3) // 监听你要接收消息的队列
public class TestConsume5 implements BaseConsume { // 这里只是我写了个默认的发消息接口你们可以不用实现这个接口@Override@RabbitHandler // 拦截消息public void consume(Object data) {System.out.println("direct收到消息=》"+data.toString());}
}
- 生产者
@Component
public class TestDirectProduce implements BaseProduce { // 默认发消息的接口可以不实现@Autowiredprivate AmqpTemplate amqpTemplate; // rabbitmq发送消息接口@Overridepublic String produce(Object message) {try {// 发送消息第一个参数是你的队列,第二个是消息amqpTemplate.convertAndSend(MQconst.TEST_QUEUE3,message);}catch (Exception e){}return "发送成功~";}
}
- 结果
Fanout 模式(俗称广播模式)
- 消费者1
@Component
@RabbitListener(queues = MQconst.TEST_QUEUE1)
public class TestConsume3 implements BaseConsume {@Override@RabbitHandlerpublic void consume(Object data) {System.out.println("boradcast收到消息1=》"+data.toString());}
}
- 消费者2
@Component
@RabbitListener(queues = MQconst.TEST_QUEUE2)
public class TestConsume4 implements BaseConsume {@Override@RabbitHandlerpublic void consume(Object data) {System.out.println("boradcast收到消息2=》"+data.toString());}
}
- 生产者(这里要注意广播模式只会发消息给绑定在此交换机下的队列,不明白的可以去看我上面写的队列和交换机绑定类)
@Component
@Slf4j
public class TestBoradcastProduce implements BaseProduce {@Autowiredprivate AmqpTemplate amqpTemplate;@Overridepublic String produce(Object message) {String exchange=exchange();try {// 第一个参数是交换机,第二个需要为空,第三个消息amqpTemplate.convertAndSend(exchange,null,message);log.debug("消息发布成功{}", message);}catch (Exception e){log.error("消息发布异常{},{}", message, e.getStackTrace());}return "发送成功~";}public String exchange() {// 交换机return MQconst.TEST_BROADCAST;}
}
- 结果
未完待续(跑路了吃不了学习的苦)
《妈妈再也不用担心我的学习系列》之RabbitMQ快速入门相关推荐
- 《妈妈再也不用担心我的学习系列》之RabbitMQ动态修改队列名
上一篇文章:<妈妈再也不用担心我的学习系列>之RabbitMQ快速入门 前言 在我们公司日常用RabbitMQ的时候如果多个服务都用到了队列,那么势必会有很多影响(如果不是广播模式队列是轮 ...
- 人工智能AI解奥数题,妈妈再也不用担心我的学习啦
人工智能AI解奥数题,妈妈再也不用担心我的学习啦 原创 小智 大话人工智能 用人工智能求解奥数题 ▲▼◆■★ x ▽=★■◆▼▲ 其中▲.▼.◆.■.★和▽ 分别是自然数.求▲.▼.◆.■.★和▽ ...
- 自从看了这篇文章,妈妈再也不用担心我的学习了!!
Vue部分小结 首先理清思路 代码展示 1.v-if以及{{}}代码展示 <body><div id="app" ><h1 v-bind:class= ...
- 玩物涨智:妈妈再也不用担心我的学习了
早上逛国外网站的时候看到了一篇挺有意思的文章,描述的是提升人类智力的几种方法.其中包含了为中国父母们所深恶痛绝的电子游戏等方式. 下面对这几种方法做简要的描述如下: 运动有利于物体识别记忆.会释放脑源 ...
- 推荐几款Python编程类游戏,妈妈再也不用担心我的学习了
自学过编程的小伙伴都知道,在学习的过程中,不仅仅要记下很多的知识点,而且那些知识点,都是非常的干,很干,很干,没有一点乐趣的感觉..... 所以在很多人学习Python的人,也许他的基础知识还没有学好 ...
- 妈妈再也不用担心我的学习了:“婷婷心选”直播首秀有感
2020年7月4日,一场别开生面.形式新颖的淘宝直播,吸引了大批的宝妈和宝爸前往围观. 一位身穿飘逸汉服,气质雍容古典的优雅美女,在与KOL及嘉宾交流互动的同时,还不时吟唱古文和诗歌,展现着中国传统文 ...
- 妈妈再也不用担心我的学习了!!!
今天就接着给大家分享一下怎样才能学得进去.其实不光是你学不进去,大多数人和你一样也是学不进去的,因为相较于玩游戏和看电影等,学习从来不是一件轻松愉快的事情.虽然如此,但是只要我们有了正确的学习姿势,坚 ...
- scanf输入数组_清除C / C ++中的输入缓冲区,妈妈再也不用担心我的学习
什么是缓冲区? 临时存储区称为缓冲区.所有标准输入和输出设备都包含一个输入和输出缓冲区.在标准C / C ++中,流被缓冲,例如在标准输入的情况下,当我们按键盘上的键时,它不会发送到您的程序,而是由操 ...
- Visual studio 2019 支持graphics.h 库的支持,简单易懂,妈妈再也不用担心你的学习
Visual studio 2019 支持graphics.h 库的支持 首先找到EasyX 的官网,传送门 请老爷们看下面操作 点击安装就可以,就可以写一段图形代码看看是否成功 例: #includ ...
最新文章
- Windows下使用apache模块实现合并多个js、css提高网页加载速度
- 读懂python代码_读懂花里胡哨的14行Python代码!
- 火星人乘坐核动力飞船回故乡
- python条件语句函数_python sum 函数中可以使用条件语句吗
- Dubbo原理解析-监控
- Facebook 开源的快速文本分类器 FastTex
- JAVA进阶教学之(序列化和反序列化)
- Java线程—如何解决Swing的单线程问题-----------Swing线程机制
- 职场必备:公司高层职位的英文缩写
- css实现面包屑导航
- 【ANT】输入中文格式为乱码
- 那么如何成为优秀的机械工程师,如何提升自己的实力,有哪些值得注意和学习的呢?
- vue--百度地图之离线地图
- 小程序 | 优惠券样式
- java excel 设置行高 jxi_win7系统下excel2007批量设置行高、列宽、行列间距的方法...
- mysql 换文件夹_windows下更换MySql数据库数据文件夹位置
- c#基于TCP/IP、CIP协议的欧姆龙PLC通信
- Spesielt at n?rhetsprinsippet og solidaritet er to parajumper jakke begreper
- Iterator遍历
- MongoDB 语句查询
热门文章
- 微信公众号如何关联小程序?如何查看小程序原始ID?
- 论文笔记006-《Bootstrapping Entity Alignment with Knowledge Graph Embedding》
- stm32毕设分享 STM32的智能宠物投喂系统(全套资料)
- 微信小程序设置wxss背景图片
- iOS模拟器中导入视频,获取相册视频,视频缩略图
- 烧脑:求解 类似 斐波那契数列 的 奥数题
- 烟台大学 计114-3.4 班学生的博客地址
- html引入stylus,css预处理器stylus基本用法
- FireFox不能打开招行网银的原因及解决办法
- 潮流课设matlab编程,基于MATLAB的电力系统潮流计算课程设计论文