RabbitMQ入门到实战——基础篇

这篇具有很好参考价值的文章主要介绍了RabbitMQ入门到实战——基础篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

初识RabbitMQ:高性能异步通讯组件

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

同步调用

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

异步调用

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 

场景:1.对结果不关心时异步。订单状态-异步,查询-同步
2.影响性能。调用链超长,可改成异步 

MQ技术对比

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

kafka日志收集

RabbitMQ整体架构

 快速入门

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 

  • 交换机只负责路由消息,没有消息保存能⼒
  • 发信息前,queue需要binding绑定交换机

数据隔离

给每个项目创建自己的用户user和虚拟主机virtual host。不同virtual host数据隔离

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 

Java客户端 

RabbitMQ Tutorials — RabbitMQ 

AMQP 和 Spring AMQP

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

RabbitMQ 中的 AMQP 协议:AMQP 的全称是 Advanced Message Queue Protocol,即高级消息队列协议。RabbitMQ 就是根据这个协议开发的。AMQP 是一个标准的协议,不仅 RabbitMQ,如果你想自己实现一个消息队列,也可以按照这个协议来设计。 AMQP 协议主要由几个部分组成,如下图所示。

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 

Publisher:消息的生产者,它负责发送消息。
Consumer:消息的消费者,它负责接收消息。
中间的部分,用兔子头标识的就是 RabbitMQ,功能如下:
生产者:发消息到某个交换机。
消费者:从某个队列中取消息。
交换机(Exchange):像路由器一样,负责将消息从生产者发送到对应的队列。
队列(Queue):存储消息的地方。
路由(Routes):转发,就是怎么把消息从一个地方转到另一个地方(比如从生产者转发到某个队列)。 

快速入门 

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

 1.引入依赖RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

2.配置RabbitMQ信息(application.yml)

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 

3.使⽤RabbitTemplate 发送信息(Publisher)

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 

4.使⽤注解 @RabbitListener 监听

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

work模型 

需求:模拟WorkQueue,实现⼀个队列绑定多个消费者

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 默认一个消费者一个消费者轮流处理消息,但消费者处理能力不同,消费者1处理块。结果:消费者1率先处理完25条信息,消费者2缓慢处理25条信息。 问题:资源分配不合理。需要考虑队列的处理业务能⼒,能者多劳。

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

⾯试题:如何处理消息队列中堆积问题
1.绑定多个消费者,加快消息处理速度,解决消息堆积
2.优化业务代码:缓存、池化、异步(MQ、Java代码的异步-事件监听、线程池)

交换机 

直发给队列,只能有一个服务接收到消息,其他服务无法获取到,所以需要交换机路由转发。

Fanout交换机 

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

效果:Fanout⼴播交换机,两个队列都收到了信息

交换机作⽤:接收信息,路由信息

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

Direct交换机

 需求:不同服务需要收到不同的消息

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 效果:根据Key接收消息

 Topic交换机

Direct能做的 Topic也能做,Topic在Key上更灵活方便

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

声明队列和交换机

问题:控制台创建队列和交换机很麻烦且易错(开发、生成、测试都要重新创建一遍) ,需要使用Java代码声明队列和交换机

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

注意:⼀般将配置类创建在消费者中,因为消费者更加关⼼交换机和队列及其关系,而生产者只要给对应交换机发信息即可。 

方式一(基于Bean,麻烦)

代码实现:在Config类中 new 或者 ⽤⼯⼚直接创建交换机与队列,并进⾏绑定

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

缺点:当创建Direct交换机需要绑定多个Key时,要写多个Bean类,代码冗余 

方式二(基于注解,简单)

 基于@RabbitListener注解对监听器进⾏绑定
@RabbitListener(bindings = @QueueBinding(xxx))

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

总结

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 

消息转换器

发信息为⼀个Map 对象,⽽不是String 

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式追源码

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

 解决:使⽤JSON序列化代替默认的JDK序列化(Spring MVC包含Jackson依赖,只需设定Bean即可)

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式 

业务改造

 1.生产者和消费者都引入amqp依赖RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

 2.生产者和消费者都配置amqp,application.yml

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

3.定义JSON转化器(common中定义Jackson Bean类:Jackson2JsonMessageConverter())

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

4.消费者编写监听器

队列名、Key、交换机(Topic)已在需求中定义好
message 观察原先调用支付服务中的已支付接口

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

5.生产者发消息

写⽣产者接⼝(修改具体业务接⼝的代码逻辑),在业务内使⽤ RabbitTemplate发信息,message为Long类型的订单ID。业务内发信息的⽚段建议try-catch,以免影响业务⽽回滚

RabbitMQ入门到实战——基础篇,中间件,rabbitmq,分布式

 参考:MQ基础-01.RabbitMQ课程介绍_哔哩哔哩_bilibili文章来源地址https://www.toymoban.com/news/detail-816917.html

到了这里,关于RabbitMQ入门到实战——基础篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 消息中间件之RabbitMQ

    1.基于AMQP协议Erlang语言开发的一款消息中间件,客户端语言支持比较多, 比如Python,Java,Ruby,PHP,JS,Swift.运维简单,灵活路由,但是性能不高, 可以满足一般场景下的业务需要,三高场景下吞吐量不高,消息持久化没有采取 零拷贝技术,消息堆积时,性能会下降 2.消息吞吐量在

    2024年01月19日
    浏览(74)
  • 消息中间件RabbitMQ详解

    消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。 消息中间件适用于需要可靠的数据传送的分布式环境。采用消息中间件机制的系统中

    2024年02月16日
    浏览(36)
  • 中间件RabbitMQ消息队列介绍

    1.1 什么是 MQ MQ ( message queue ),从字面意思上看,本质是个队列, FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中, MQ 是一种非常常 见的上下游 逻辑解耦+物理解耦 的消息通信服务。使用了 MQ 之

    2024年02月13日
    浏览(47)
  • 【RabbitMQ教程】前言 —— 中间件介绍

                                                                       💧 【 R a b b i t M Q 教程】前言——中间件介绍 color{#FF1493}{【RabbitMQ教程】前言 —— 中间件介绍} 【 R abbi tMQ 教程】前言 —— 中间件介绍 💧           🌷 仰望天空,妳

    2024年02月08日
    浏览(60)
  • RabbitMQ 消息中间件 消息队列

    RabbitMQ 1、RabbitMQ简介 RabbiMQ是⽤Erang开发的,集群⾮常⽅便,因为Erlang天⽣就是⼀⻔分布式语⾔,但其本身并 不⽀持负载均衡。支持高并发,支持可扩展。支持AJAX,持久化,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 2、RabbitMQ 特点 可

    2024年02月03日
    浏览(44)
  • 高性能消息中间件 RabbitMQ

    消息队列 MQ全称Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于系统之间的 异步通信 。 同步通信相当于两个人当面对话,你一言我一语。必须及时回复: 异步通信相当于通过第三方转述对话,可能有消息的延迟,但不需要二人时刻保持联系。 消息

    2024年02月11日
    浏览(88)
  • 消息队列中间件(二)- RabbitMQ(一)

    接收,存储,转发消息 生产者 交换机 队列 消费者 简单模式 工作模式 发布 路由模式 主题模式 发布订阅模式 Broker 接收和分发消息的应用 Virtual host 虚拟分组 Connection: TCP连接 Channel: 节省连接,每次访问建立一次Connection消耗太大,所以使用信道代替连接 交换机 队列 www.r

    2024年02月11日
    浏览(44)
  • Springboot整合RabbitMQ消息中间件

    spring-boot-rabbitmq–消息中间件整合 前言:RabbitMQ的各种交换机说明 1、直连交换机 生产者发布消息时必须带着routing-key,队列绑定到交换机时必须指定binding-key ,且routing-key和binding-key必须完全相同,如此才能将消息路由到队列中 直连交换机通常用来循环分发任务给多个workers,

    2024年02月11日
    浏览(32)
  • 快速掌握MQ消息中间件rabbitmq

    Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive. happy for hardess to solve denpendies. 需求: 1.video A https://www.bilibili.com/video/BV1cb4y1o7zz?p=12vd_source=533ee415c42b820b0f4105acb4932a02 参考资料 官方文档 开源社区 博客文

    2024年02月11日
    浏览(37)
  • 【消息中间件】1小时快速上手RabbitMQ

    前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:深入、全面、系统的介绍消息中间件 🌰 文章简介:本文将介绍RabbitMQ,一小时快速上手RabbitMQ 下面是MQ的优缺点 1.2.1 优点1:应用解耦 考虑由订单系统与库存系统、支付系统、物流

    2024年02月02日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包