个人名片:
博主:酒徒ᝰ.
个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志:三人行,必有我师焉。
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看
二、RabbitMQ快速入门
2. 常见消息模型
MQ的官方文档中给出了5个MQ的Demo示例,对应了几种不同的用法:
- 基本消息队列(BasicQueue)
- 工作消息队列(WorkQueue)
- 发布订阅(Publish、Subscribe),又根据交换机类型不同分为三种:
Fanout Exchange:广播
Direct Exchange:路由
Topic Exchange:主题
在分布式系统和微服务架构中,消息队列作为一种高效的通信工具,发挥着举足轻重的作用。RabbitMQ作为一种开源的消息代理软件,它支持多种消息模型,使得开发者可以根据实际需求选择最合适的模型来满足业务需求。
一、RabbitMQ常见消息模型定义
简单队列模型(Simple Queue)简单队列模型是最基本的消息模型,它实现了生产者向队列发送消息,消费者从队列接收消息的功能。这种模型适用于单向消息传递场景,如日志收集、事件通知等。
发布/订阅模型(Publish/Subscribe)发布/订阅模型允许生产者向一个主题发布消息,同时允许多个消费者订阅该主题。消费者收到消息后,可以根据业务需求将其转发给其他服务进行处理。这种模型适用于实时性要求较高的应用场景,如消息推送、实时分析等。
路由模型(Routing)路由模型允许生产者将消息发送到多个队列,每个队列中可以有一个或多个消费者。消费者根据业务需求从特定队列中接收消息。这种模型适用于解耦和负载均衡场景,如电商平台的订单处理、银行的交易处理等。
主题模型(Topics)主题模型是发布/订阅模型的一种扩展,它允许消费者订阅多个主题。生产者向主题发布消息时,所有订阅了该主题的消费者都会收到消息。这种模型适用于多级订阅和消息过滤场景,如新闻分类、舆情监控等。
二、RabbitMQ常见消息模型应用场景及优势分析
简单队列模型应用场景:日志收集、事件通知、任务调度等。优势:简单易用,适用于单向消息传递场景;支持持久化存储,保证消息不丢失;支持消息持久化,可以在消费者失败时保证消息不丢失。
发布/订阅模型应用场景:消息推送、实时分析、实时监控等。优势:支持一对多消息传递,能够快速将消息推送给多个消费者;支持消费者多路复用,可以提高系统的吞吐量和响应速度;可以很方便地实现负载均衡和容错处理。
路由模型应用场景:电商平台的订单处理、银行的交易处理等。优势:支持灵活的路由规则,可以将消息路由到不同的队列进行处理;可以实现解耦和负载均衡,提高系统的可扩展性和稳定性;可以保证消息的顺序性和一致性。
主题模型应用场景:新闻分类、舆情监控等。优势:支持多级订阅和消息过滤,可以实现更加灵活的消息传递方式;可以避免消费者重复处理相同消息,提高系统的性能和效率;可以很好地解决大规模消息处理中的扩展性和性能问题。
三、RabbitMQ常见消息模型实现方法及注意事项
简单队列模型实现方法:使用RabbitMQ提供的queue交换机将消息发送到指定队列,再从队列中获取消息进行处理。注意事项:确保队列和交换机已经正确地创建;确认生产者和消费者都有足够的权限访问队列和交换机;要注意处理消息持久化和确认机制,保证消息不丢失。
发布/订阅模型实现方法:使用RabbitMQ提供的topic交换机将消息发送到指定主题,然后让多个消费者订阅该主题并接收消息。注意事项:选择合适的topic交换机,确保消息可以正确地发送到指定主题;要确保消费者订阅的主题和交换机匹配,避免漏掉重要消息;同时要注意处理消费者的并发和重试机制,保证系统的稳定性和可用性。