网站后台编辑内容不显示,微博推广文案怎么写,阿里巴巴网站架构,微信公众号营销博主介绍#xff1a;✌全网粉丝21W#xff0c;CSDN博客专家、Java领域优质创作者#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物… 博主介绍✌全网粉丝21WCSDN博客专家、Java领域优质创作者掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可以先关注收藏起来在工作中、生活上等遇到相关问题都可以给我留言咨询希望帮助更多的人。 RabbitMQ中核心概念交换机Exchange、队列Queue和路由键Routing Key等详细介绍 一、概览二、核心概念2.1 交换机Exchange2.2 队列Queue2.3 路由键Routing Key2.4 消息的发送流程通常 三、 RabbitMQ其他概念3.1 死信队列3.2 队列类型 RabbitMQ 是一个消息代理系统使用
交换机Exchange、
队列Queue和
路由键Routing Key来管理消息的传递。它们分别起到不同的作用构成了消息从生产者到消费者的传递路径。它们一起协同工作来实现消息的发布和订阅。 一、概览
三者的区别和作用总结
名称作用和功能角色区别交换机Exchange接收生产者的消息并根据路由键将消息发送到一个或多个队列。交换机本身不保存消息只负责转发消息。中间人决定消息如何分发到不同的队列队列Queue用于存储消息等待消费者来处理。消费者从队列中拉取消息进行处理。队列是消息的最终接收点消息只能在队列中被消费一次。消费者终点存储和传递消息路由键Routing Key生产者指定的一个字符串用来决定交换机如何将消息路由到队列。路由键可以是精确匹配或模糊匹配使用通配符。消息路由控制决定消息走向哪些队列
三者之间的关系
生产者Producer向 交换机 发送消息并指定一个 路由键。交换机Exchange根据绑定的规则和 路由键将消息转发到合适的 队列。队列Queue消息最终到达 队列并等待消费者取出并处理。消费者Consumer从队列中取出消息进行处理。
二、核心概念
RabbitMQ 是一个开源的消息代理Message Broker用于在应用程序之间传递消息。它实现了高级消息队列协议AMQP提供了可靠的消息传递和消息路由机制以支持分布式系统的开发。
2.1 交换机Exchange
作用
交换机负责接收来自生产者的消息并根据一定的路由规则将消息分发给一个或多个队列。它是生产者和队列之间的中间层生产者永远不会直接将消息发送到队列而是通过交换机。
种类
RabbitMQ 中有几种类型的交换机每种交换机的消息路由行为都不同
Direct直连交换机根据精确匹配路由键Routing Key来将消息转发到绑定了相同路由键的队列。Fanout扇出交换机不处理路由键直接将消息广播给绑定到该交换机的所有队列。类似广播机制。Topic主题交换机根据路由键的模式匹配可以使用通配符将消息路由到符合条件的队列。Headers头交换机根据消息的 headers头部信息属性来路由而不是使用路由键。
作用场景 交换机的主要作用是 决定消息应该被发送到哪些队列每种交换机的类型决定了消息的路由逻辑。
2.2 队列Queue
作用
队列是消息的实际存储位置。消息被发送到队列后消费者从队列中取出并处理。队列中的消息按照 先进先出FIFO 的顺序被消费者处理。
队列是点对点通信的终点消费者从队列中拉取消息并处理每个消息只会被一个消费者处理除非有特别的广播机制。消息可以在队列中持久化持久化队列即使 RabbitMQ 服务器重启消息仍然会保存在队列中。
作用场景
队列的作用是 存储和传递消息。消息在队列中被保存直到消费者来获取和处理消息。队列可以支持多种消费者并且保证消息被处理一次且仅一次。
2.3 路由键Routing Key
作用
路由键是生产者在将消息发送给交换机时提供的一个字符串用来指定消息的路由路径。交换机会根据路由键的内容决定该消息应该发送到哪些队列。
在 Direct 交换机 中路由键用于精确匹配。例如路由键 task_queue 只会将消息发送到绑定了 task_queue 路由键的队列。在 Topic 交换机 中路由键可以使用通配符进行模糊匹配。例如device.* 可以匹配 device.data 和 device.status而 device.# 可以匹配多个词。
作用场景
路由键的作用是 指定消息传递路径。交换机会根据路由键将消息发送到符合条件的队列。
2.4 消息的发送流程通常
消息的发送流程通常如下 生产者发布消息指定交换机和路由键。 交换机根据路由键将消息路由到一个或多个队列。 消费者从队列中获取消息并处理它们。 通过这种方式RabbitMQ实现了消息的可靠传递和分发可以用于构建各种应用程序包括消息队列、发布/订阅系统、任务分发等。 三、 RabbitMQ其他概念
AMQPAMQPAdvanced Message Queuing Protocol是一种协议用于定义消息传递的规范。RabbitMQ是AMQP协议的一个流行实现之一它允许不同的应用程序之间通过消息进行通信。
以下是一些关于 RabbitMQ 的详细知识 生产者生产者是消息的发送方。它们创建消息并将其发布到 RabbitMQ 的交换机上。生产者通常将消息发送到一个或多个队列以便消费者可以订阅并处理这些消息。 交换机交换机是消息的路由中心它接收从生产者发送的消息并根据预定义的规则将它们路由到一个或多个队列中。RabbitMQ支持多种类型的交换机包括直连、主题、扇出和头交换机。 队列队列是消息的容器它们用于存储消息直到消费者准备好接收和处理它们。多个消费者可以订阅同一个队列但只有一个消费者会接收到每条消息。 消费者消费者是消息的接收方它们订阅队列并从中获取消息。一旦消费者接收到消息它们可以对消息进行处理例如执行某些任务或将数据存储到数据库中。 绑定绑定是交换机和队列之间的关联关系。它定义了如何将消息从交换机路由到队列。绑定通常使用路由键Routing Key来指定消息的路由规则。 虚拟主机RabbitMQ 允许创建多个虚拟主机每个虚拟主机都是一个独立的消息代理环境。虚拟主机之间相互隔离允许不同应用程序在同一台 RabbitMQ 服务器上使用不同的消息队列。 持久化消息和队列可以设置为持久化这意味着它们将在 RabbitMQ 服务器重启后保留。这是确保消息不会丢失的重要方式特别是对于关键的应用程序。 确认机制RabbitMQ 提供了消息确认机制确保消息在发送和接收过程中不会丢失。生产者可以等待来自消费者的确认以确保消息已成功处理。 死信队列RabbitMQ 允许定义死信队列用于处理无法成功处理的消息。当消息无法被路由到队列时它们可以被发送到死信队列以后进行处理。 集群RabbitMQ 支持集群模式允许多个 RabbitMQ 服务器一起工作以提高可用性和性能。 插件系统RabbitMQ 可以通过插件进行扩展允许添加各种功能如消息转换、身份验证、监控等。
RabbitMQ 是一个强大的消息代理广泛用于分布式系统、微服务架构、任务队列、事件驱动架构等场景。了解这些基本概念可以更好地理解和使用 RabbitMQ 来构建可靠的消息通信系统。
3.1 死信队列
死信队列Dead Letter Queue简称DLQ是消息队列系统中的一个重要概念它用于处理无法成功被消费的消息。当消息无法被消费者正常处理时通常会被发送到死信队列以后进行进一步的处理或分析。以下是有关死信队列的详细信息
什么是死信队列
消息在队列中过期即超过了一定的存活时间。
消息被拒绝NACK并且无法重新投递。
消息在消费者处理时发生了异常。
死信队列是一个特殊的队列用于接收无法被消费者成功处理的消息。这些消息被认为是死信通常是由于以下原因之一
为什么使用死信队列
死信队列的主要目的是处理消息处理失败或异常情况以防止消息丢失。通过将死信消息路由到特定的队列你可以进行进一步的调查、日志记录、错误处理或重试。
死信队列还可以用于延迟消息处理例如在一段时间后重新尝试处理失败的消息。
设置死信队列
要设置死信队列你需要创建一个普通队列并为它配置一个死信交换机Dead Letter Exchange和一个死信路由键Dead Letter Routing Key。
当消息成为死信时它们将被重新路由到死信交换机并使用死信路由键发送到死信队列。
应用场景
重试机制当消息处理失败时可以将消息发送到死信队列然后在稍后的时间内重新尝试处理。
日志记录和监控可以将失败的消息记录到日志中以进行分析和监控。
错误处理可以通过死信队列执行自定义错误处理逻辑例如发送通知或触发报警。
死信队列可以用于处理各种应用场景例如
总之死信队列是消息队列系统中的一个关键组件用于处理处理失败的消息以提高系统的可靠性和容错性。通过合理配置和使用死信队列可以更好地管理消息的生命周期和处理失败情况。不同的消息队列系统如RabbitMQ、Kafka等都支持死信队列的概念但具体的配置和用法可能有所不同。
3.2 队列类型
消息队列系统通常支持多种队列类型每种类型都适用于不同的使用场景和需求。以下是一些常见的队列类型及其特点
FIFO 队列First-In-First-Out
特点消息按照它们进入队列的顺序进行处理即先进先出。
用途适用于需要按照顺序处理消息的场景确保消息的顺序性。
优先级队列
特点消息可以分配不同的优先级高优先级的消息将被优先处理。
用途适用于需要按照优先级处理消息的场景确保高优先级消息能够尽快处理。
延迟队列Delay Queue
特点消息可以设置延迟时间在指定时间后才会被处理。
用途适用于需要延迟处理消息的场景如定时任务或消息重试。
扇出队列Fanout Queue
特点消息被广播到所有绑定的队列每个队列都会接收一份消息的副本。
用途用于发布/订阅模式消息广播到多个消费者每个消费者都可以独立处理消息。
主题队列Topic Queue
特点消息根据主题或通配符路由到匹配的队列。
用途用于高度灵活的消息路由支持复杂的消息过滤和匹配规则。
直连队列Direct Queue
特点消息根据指定的路由键路由到匹配的队列。
用途用于简单的消息路由每个队列通常与一个唯一的路由键相关联。
持久队列
特点队列和消息可以设置为持久化确保在消息代理重启后不会丢失。
用途用于关键数据和任务的持久化存储确保数据不会丢失。
临时队列
特点队列通常是临时的只在连接期间存在连接断开后会自动删除。
用途适用于一次性任务或短期通信的场景。
死信队列Dead Letter Queue
特点用于处理无法成功处理的消息将失败的消息发送到死信队列以后续处理。
用途用于处理失败的消息执行错误处理或重试。
不同的队列类型适用于不同的业务需求和应用场景。在选择队列类型时需要根据具体需求来权衡各种特性和限制。根据消息队列系统的不同支持的队列类型和功能可能有所不同。 好了今天分享到这里。希望你喜欢这次的探索之旅不要忘记 “点赞” 和 “关注” 哦我们下次见 本文完结
祝各位大佬和小伙伴身体健康万事如意发财暴富扫下方二维码与我一起交流