Sub-item
type
status
date
slug
summary
tags
category
icon
password
Parent item
日期
Sep 19, 2023 03:00 AM
MQ三大功能
- 流量消峰:当高并发情况下,系统可能会出现大量请求同时访问某一个服务的情况,这时会导致服务出现压力过大,甚至出现宕机的情况。而MQ可以将请求转移到消息队列中,让服务按照自身的处理能力进行消费,从而避免系统崩溃。
- 应用解耦:在分布式系统中,不同的服务需要相互协作,但服务之间的依赖关系会导致服务之间的紧密耦合,增加了系统的复杂性。使用MQ可以将服务解耦,让不同的服务之间通过消息传递来协作,从而减少服务之间的依赖关系。
- 异步处理:MQ可以将消息发送到队列中,然后异步地处理消息。这样,发送者就可以在消息发送之后立即返回,而不必等待消息的处理完成。这种异步处理方式可以提高系统的吞吐量和性能。
MQ的分类
ActiveMQ
优点:
- 支持多种消息协议和语言。
- 具有较好的性能表现,特别是在高并发情况下。
- 支持多种消息传递模式,包括点对点模式和发布-订阅模式。
- 部署和管理相对简单。
缺点:
- 部分功能需要付费使用,而且价格相对较高。
- 对于海量消息的处理表现不如Kafka。
- 存在一定的数据丢失风险,特别是在某些配置不当或者异常情况下。
Kafka(大数据)
优点:
- 高吞吐量,支持海量消息的快速处理。
- 具有可靠的消息传递保证,可以实现消息的持久化。
- 支持多种消息协议和语言,易于与现有系统集成。
- 支持流式数据处理,可以实现实时数据处理和分析。
缺点:
- 部署和维护相对复杂。
- 不支持点对点模式,只支持发布-订阅模式。
- 可能存在数据丢失的风险,特别是在某些配置不当或者异常情况下。
RocketMQ (金融互联网)
优点:
- 具有较好的性能表现,可以支持高并发的消息传递和处理。
- 支持多种消息传递模式,包括点对点模式和发布-订阅模式。
- 支持多种消息协议和语言,易于与现有系统集成。
- 具有较好的可靠性和消息传递保证,可以实现消息的持久化和数据备份。
- 可以支持海量消息的快速处理。
缺点:
- 配置和管理较为复杂,需要一定的技术和运维能力。
- 存在数据丢失风险,特别是在某些配置不当或者异常情况下。
- 部分功能还不够成熟,例如与 Spring Cloud 集成的支持等。
RabbitMQ
优点:
- 开源且稳定可靠。
- 支持多种消息协议和语言。
- 可以实现消息的持久化,确保消息不会丢失。
- 具有灵活的路由和广播机制。
缺点:
- 配置和管理较为复杂。
- 性能相对较低,特别是在高并发情况下。
- 不支持海量消息的快速处理。
RabbitMQ
六大模式
RabbitMQ支持以下六种消息传递模式:
- 简单模式(Simplest) 简单模式是最基础的一种模式,它只包含一个生产者和一个消费者,消息传递是单向的。这种模式通常使用一个队列来存储所有的消息,生产者将消息发送到队列中,消费者从队列中接收消息进行消费。
- 工作队列模式(Work Queues) 工作队列模式是将消息传递给多个消费者的模式,它包含一个生产者和多个消费者。消息被均匀地发送到多个消费者中,每个消费者接收到的消息是唯一的。消费者将消息从队列中获取并进行处理,可以采用轮询或者公平分配的方式进行消息消费。
- 发布/订阅模式(Publish/Subscribe) 发布/订阅模式将消息发送给多个消费者,这些消费者都订阅了相同的消息队列。它包括一个生产者,多个消费者和一个交换器,生产者将消息发送到交换器中,交换器将消息分发给所有的订阅者。
- 路由模式(Routing) 路由模式将消息发送给指定的消费者,而不是广播给所有的订阅者。这种模式需要在交换器和队列之间建立一个绑定关系,绑定关系需要指定一个路由键。生产者将消息发送到指定的交换器中,交换器根据绑定关系和路由键将消息发送到指定的队列中,消费者从该队列中获取消息并进行处理。
- 主题模式(Topics) 主题模式是路由模式的一种扩展,它支持通配符的路由键匹配。生产者将消息发送到交换器中,交换器将消息根据绑定关系和通配符路由键分发给匹配的队列中,消费者从队列中获取消息进行处理。
- Headers模式 Headers模式使用消息头的键值对来决定消息的路由方式,而不是使用路由键。在交换器和队列之间建立一个绑定关系时需要指定一个或多个键值对的匹配规则,交换器将消息的消息头与绑定关系的规则进行匹配,如果匹配成功则将消息发送到指定的队列中,消费者从队列中获取消息进行处理。
Docker 搭建RabbitMQ
参数解释:本条命令包括安装Web页面管理的 rabbitmq:management组件,账号和密码都为 admin ;-p 后面参数表示公网IP地址的端口号对应容器内部的端口号。
浏览器访问
输入账号和密码 admin 访问RabbitMQ 管理界面

IDEA用Java代码 写RabbitMQ
生产者代码
管理界面 就有一个叫‘ss’的队列在了

- 作者:fighting-bug
- 链接:https://www.fighting-bug.top//post/RabbitMQ
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。