为什么要用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快速入门相关推荐

  1. 《妈妈再也不用担心我的学习系列》之RabbitMQ动态修改队列名

    上一篇文章:<妈妈再也不用担心我的学习系列>之RabbitMQ快速入门 前言 在我们公司日常用RabbitMQ的时候如果多个服务都用到了队列,那么势必会有很多影响(如果不是广播模式队列是轮 ...

  2. 人工智能AI解奥数题,妈妈再也不用担心我的学习啦

    人工智能AI解奥数题,妈妈再也不用担心我的学习啦 原创 小智 大话人工智能 用人工智能求解奥数题 ▲▼◆■★ x ▽=★■◆▼▲   其中▲.▼.◆.■.★和▽ 分别是自然数.求▲.▼.◆.■.★和▽ ...

  3. 自从看了这篇文章,妈妈再也不用担心我的学习了!!

    Vue部分小结 首先理清思路 代码展示 1.v-if以及{{}}代码展示 <body><div id="app" ><h1 v-bind:class= ...

  4. 玩物涨智:妈妈再也不用担心我的学习了

    早上逛国外网站的时候看到了一篇挺有意思的文章,描述的是提升人类智力的几种方法.其中包含了为中国父母们所深恶痛绝的电子游戏等方式. 下面对这几种方法做简要的描述如下: 运动有利于物体识别记忆.会释放脑源 ...

  5. 推荐几款Python编程类游戏,妈妈再也不用担心我的学习了

    自学过编程的小伙伴都知道,在学习的过程中,不仅仅要记下很多的知识点,而且那些知识点,都是非常的干,很干,很干,没有一点乐趣的感觉..... 所以在很多人学习Python的人,也许他的基础知识还没有学好 ...

  6. 妈妈再也不用担心我的学习了:“婷婷心选”直播首秀有感

    2020年7月4日,一场别开生面.形式新颖的淘宝直播,吸引了大批的宝妈和宝爸前往围观. 一位身穿飘逸汉服,气质雍容古典的优雅美女,在与KOL及嘉宾交流互动的同时,还不时吟唱古文和诗歌,展现着中国传统文 ...

  7. 妈妈再也不用担心我的学习了!!!

    今天就接着给大家分享一下怎样才能学得进去.其实不光是你学不进去,大多数人和你一样也是学不进去的,因为相较于玩游戏和看电影等,学习从来不是一件轻松愉快的事情.虽然如此,但是只要我们有了正确的学习姿势,坚 ...

  8. scanf输入数组_清除C / C ++中的输入缓冲区,妈妈再也不用担心我的学习

    什么是缓冲区? 临时存储区称为缓冲区.所有标准输入和输出设备都包含一个输入和输出缓冲区.在标准C / C ++中,流被缓冲,例如在标准输入的情况下,当我们按键盘上的键时,它不会发送到您的程序,而是由操 ...

  9. Visual studio 2019 支持graphics.h 库的支持,简单易懂,妈妈再也不用担心你的学习

    Visual studio 2019 支持graphics.h 库的支持 首先找到EasyX 的官网,传送门 请老爷们看下面操作 点击安装就可以,就可以写一段图形代码看看是否成功 例: #includ ...

最新文章

  1. Windows下使用apache模块实现合并多个js、css提高网页加载速度
  2. 读懂python代码_读懂花里胡哨的14行Python代码!
  3. 火星人乘坐核动力飞船回故乡
  4. python条件语句函数_python sum 函数中可以使用条件语句吗
  5. Dubbo原理解析-监控
  6. Facebook 开源的快速文本分类器 FastTex
  7. JAVA进阶教学之(序列化和反序列化)
  8. Java线程—如何解决Swing的单线程问题-----------Swing线程机制
  9. 职场必备:公司高层职位的英文缩写
  10. css实现面包屑导航
  11. 【ANT】输入中文格式为乱码
  12. 那么如何成为优秀的机械工程师,如何提升自己的实力,有哪些值得注意和学习的呢?
  13. vue--百度地图之离线地图
  14. 小程序 | 优惠券样式
  15. java excel 设置行高 jxi_win7系统下excel2007批量设置行高、列宽、行列间距的方法...
  16. mysql 换文件夹_windows下更换MySql数据库数据文件夹位置
  17. c#基于TCP/IP、CIP协议的欧姆龙PLC通信
  18. Spesielt at n?rhetsprinsippet og solidaritet er to parajumper jakke begreper
  19. Iterator遍历
  20. MongoDB 语句查询

热门文章

  1. 微信公众号如何关联小程序?如何查看小程序原始ID?
  2. 论文笔记006-《Bootstrapping Entity Alignment with Knowledge Graph Embedding》
  3. stm32毕设分享 STM32的智能宠物投喂系统(全套资料)
  4. 微信小程序设置wxss背景图片
  5. iOS模拟器中导入视频,获取相册视频,视频缩略图
  6. 烧脑:求解 类似 斐波那契数列 的 奥数题
  7. 烟台大学 计114-3.4 班学生的博客地址
  8. html引入stylus,css预处理器stylus基本用法
  9. FireFox不能打开招行网银的原因及解决办法
  10. 潮流课设matlab编程,基于MATLAB的电力系统潮流计算课程设计论文