网站首页 > 技术文章 正文
为什么要使用RabbitMQ?
1.解耦
系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦。
2.异步
将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度。
3.削峰
并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常。
RabbitMQ原理和架构
RabbitMQ的技术架构如下图所示:
1.生产者(Publisher)
发消息到RabbitMQ中的(Exchange)交换机上。
2.交换机(Exchange)
和生产者建立连接并接收生产者发来的消息
3.消费者(Consumer)
监听RabbitMQ中的(Queue)队列中的消息
4.队列(Queue)
Exchange将消息发送到指定的Queue中,Queue和消费者进行交互
5.路由(Routes)
交换机转发消息到队列的规则
RabbitMQ的核心概念
1)Broker
Broker,简单来说就是消息队列服务器实体。
2)Exchange
Exchange(消息交换机),它指定消息按什么规则,路由到哪个队列。
3)Queue
Queue(消息队列载体),每个消息都会被投入到一个或多个队列。
4)Binding
Binding(绑定),它的作用就是把exchange和queue按照路由规则绑定起来。
5)Routing Key
Routing Key(路由关键字),exchange根据这个关键字进行消息投递;
6)VHost
vhost 可以理解为虚拟 broker ,即 mini-RabbitMQ server。其内部均含有独立的 queue、exchange 和 binding 等,但最重要的是,其拥有独立的权限系统,可以做到 vhost 范围的用户控制。
7)Producer
Producer(消息生产者),就是投递消息的程序;
8)Consumer
Consumer(消息消费者),就是接受消息的程序;
9)Channel
Channel(消息通道),在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
RabbitMQ 的工作模式?
RabbitMQ提供了6种模式:
1、简单模式
生产者,一个队列一个或多个消费者,当多个消费者同时监听一个队列时,他们并不能同时消费一条消息,而是随机消费消息,即一个队列中一条消息,只能被一个消费者消费。
2、主题模式(topic)
生产者,一个交换机(topicExchange),模糊匹配路由规则,多个队列,多个消费者。
3、订阅与发布模式(fanout)
生产者,一个交换机(fanoutExchange),没有路由规则,多个队列,多个消费者。生产者将消息不是直接发送到队列,而是发送到X交换机,然后由交换机发送给两个队列,两个消费者各自监听一个队列,来消费消息。
4、路由模式(direct)
生产者,一个交换机(directExchange),路由规则,多个队列,多个消费者。主要根据定义的路由规则决定消息往哪个队列发送。
5、RPC模式
对于RPC请求,客户端发送一条带有两个属性的消息:replyTo,设置为仅为请求创建的匿名独占队列,和correlationId,设置为每个请求的唯一id值。请求被发送到rpc_queue队列。RPC工作进程在队列上等待请求。当一个请求出现时,它执行任务,并使用replyTo字段中的队列将结果发回客户机。客户机在回应消息队列上等待数据。当消息出现时,它检查correlationId属性。如果匹配请求中的值,则向程序返回该响应数据。
6、工作队列
注释:默认情况下,RabbitMQ将按顺序将每条消息发送给下一个消费者,平均而言,每个消费者将获得相同数量的消息,这种分发消息的方式称为循环法。
以上!
架构技术合集
- 分布式架构设计从0到1全部合集(附:分布式、微服务、高并发等大型网站架构)
- JVM(Java虚拟机)从0到1全部合集(建议收藏)
- Java多线程与并发从0到1全部合集(面试必看)
- Redis分布式缓存从0到1全部合集(进阶必看)
- Spring开发框架从0到1全部合集(建议收藏)
- MySQL数据库从0到1全部合集(建议收藏)
猜你喜欢
- 2024-10-02 「MQ实战」RabbitMQ 延迟队列,消息延迟推送
- 2024-10-02 未读消息(小红点),RabbitMQ实时消息推送实践,贼简单
- 2024-10-02 RabbitMQ——延迟队列,消息延迟推送
- 2024-10-02 RabbitMQ实现即时通讯居然如此简单
- 2024-10-02 RabbitMQ没有延时队列?我就教你一招,玩转延时队列
- 2024-10-02 RabbitMQ详解,用心看完这一篇就够了
- 2024-10-02 RabbitMQ原理与相关操作(三)消息持久化
- 2024-10-02 Java互联网架构-互联网大厂面试必备RabbitMQ
- 2024-10-02 RabbitMQ的介绍及使用进阶(Docker+.Net Core)
- 2024-10-02 快速尝鲜:RabbitMQ 搭建完就得用起来
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)