解决方案:带有过期日期的消息

Latest collection of data for analysis and insights.
Post Reply
suchona.kani.z
Posts: 75
Joined: Sat Dec 21, 2024 6:11 am

解决方案:带有过期日期的消息

Post by suchona.kani.z »

因此他们通过消息队列发送停止命令。当这没有效果时,技术人员团队就会出去,手动关闭系统,并在修复后重新启动所有系统。一旦系统再次无错误运行,停止命令就会通过队列发出,系统就会关闭。

对于需要立即响应或不需要响应的关键控制,同步耦合(例如通过 REST)显然更合适。

AMQP 标准的扩展可以防止紧急消息的延迟处理。在 RabbitMQ 中,该解决方案称为 TTL(生存时间),可以应用于队列或单个消息。

如果队列 A 中的一条消息一直等到其 TTL 过期,则该消息对于队列 A 来说被视为死亡。这意味着它将不再被传递和确认,但会在下一次机会时从服务器中删除。如果同一消息也在另一个队列 B 中等待,则可能会应用不同的 TTL,以便该消息在队列 B 中保持活动状态。

例如,机器停放部分的停止命令从发送方发送到交换机,并并行放置在两台机器 A 和 B 的队列中。在响应新命令之前,两台机器各忙 15 秒。队列A的TTL为20秒,机器A收到命令并停止。队列 B 的 TTL 只有 10 秒,因此机器 B 错过了命令,工作人员收到错误消息。

然而,TTL并不是AMQP标准的一部分,而是RabbitMQ实现的一个特殊功能。下面更详细地介绍 RabbitMQ 及其附加功能。

RabbitMQ
RabbitMQ是高级消息队列协议的免费实现。该软件可以安装 美国消费者电子邮件列表 在您自己的服务器上;在大多数情况下,甚至包含的 Docker 映像就足够了。

从标准镜像启动的 Docker 容器释放两个端口:可以在端口 5672 上访问 AMPQ 服务器,管理界面在端口 15672 上运行。可以在此处手动设置交换、绑定和队列。

一些客户端库(例如 EasyNetQ)会自动处理配置。在这种情况下,您可以在管理界面中查看所有设置是否正确。

提示
队列视图特别实用。在这里,队列中的消息不仅可以查看,还可以手动删除和插入单个消息。该对话框在测试消费者应用程序时最常使用。


通常,消费者应用程序会创建自己的队列,除非另有配置,否则队列将一直存在,直到消息代理下次重新启动。否则,队列也可以是永久的,这意味着它在 RabbitMQ 重新启​​动后仍然存在。相反的情况也是可能的;有两种类型的临时队列。最后一个消费者注销后,自动删除队列就会消失。独占队列仅连接到一个消费者,并在该消费者注销后立即消失。

交流
交换视图列出了所有交换并允许手动创建新交换。根据所使用的客户端库,这很少是必要的。例如,EasyNetQ 会自动创建所有必需的交换和队列。


手动配置时,选择适当的 Exchange 类型很重要。

直接交换根据路由键将传入消息路由到特定队列。
主题交换也使用路由键,但不仅将消息发送到一个队列,而且发送到搜索模式与该键匹配的每个队列。
扇出交换将消息并行发送到多个队列,而不对其进行过滤。
标头交换支持基于消息标头中的多个属性的复杂路由。
确认
通常,当代理将消息传递给接收者时,消息就被视为已到达。如果收件人因错误而中止处理,则该邮件已从队列中删除。

RabbitMQ 为接收者提供了确认处理成功的机会。只有这样该消息才会从队列中删除。如果出现错误,收件人会拒绝该消息,然后将其放回队列中。或者,可以将交换设置为“死信交换”,转发错误消息以供审核。

死信交换
有时消息无法传递。常见原因是生存时间已过期或接收端的处理错误。有时队列也有大小限制并且会溢出。在这种情况下,可以声明 DLX(死信交换)来捕获丢失的消息。

优先事项
同一队列服务的多个消费者可以有不同的优先级。仅当最重要的消费者失败时才应为不太重要的消费者提供服务。

在 RabbitMQ 中,可以在启动时为每个消费者分配优先级。然后,队列不再按顺序服务所有消费者,而是仅服务那些具有最高优先级的消费者。只有当所有最重要的消费者都被封锁时,第二重要的消费者才会依次得到供应。

阿帕奇Qpid
开源项目Qpid还提供 API 和代理,以将 AMQP 集成到您自己的软件中。然而,只有在其他消息代理的功能无法满足的非常特定的应用领域才值得使用 Qpid。

与 RabbitMQ 相比,有三种不同的代理可供选择。 “Broker-J”对于纯 Java 环境很有趣。本机实现称为“Qpid C++ Broker”。如果可扩展性很重要,则应选择高性能“调度路由器”。

不仅客户端可以使用Qpid Proton进行开发。如果有需要,还支持您自己的经纪商的发展。尽管 Qpid 最终非常灵活,但第一个操作系统的学习曲线很陡峭。

Apache ActiveMQ
ActiveMQ 是一个基于 Java 的代理。各种平台都有相应的客户端库。值得强调的是“Apache.NMS.AMQP”API,它声称支持所有与 AMQP 1.0 兼容的消息系统。围绕 ActiveMQ 代理开发的软件系统原则上可以与任何其他代理对接。

更多 AMQP 变体
安慰 PubSub+
制造商 Solace 的PubSub+不是开源的。该软件限制每秒 10,000 条消息,并且可以免费使用。企业版承诺支持和无限制的性能。

Azure 服务总线
Azure服务总线是一个基于云的代理。这意味着无法在测试虚拟机或您自己的数据中心中进行安装。因此,它仅适用于已经依赖于 Azure 平台的应用程序。

结论
AMQP 是一种流行的微服务解耦手段。根据应用程序的不同,可以使用免费经纪人、自营经纪人或专门从事云平台的经纪人。

RabbitMQ 成为最受欢迎的经纪商之一并不是没有原因的。它易于使用,甚至可以作为 Docker 容器在任何开发人员笔记本上运行。由于 RabbitMQ 社区不断壮大,出现了适用于许多不同编程语言的库。然而,使用专有解决方案时,您需要依赖制造商的界面。

您可以在我们之前发布的博客文章中找到来自 adesso 世界的更多令人兴奋的主题。

图像科琳娜·约翰
作者 科琳娜·约翰

Corinna John 是汉诺威 adesso 的高级软件工程师。她的重点是 C# 开发。

简·霍普图片
作者 扬·霍普

Jan Hoppe 是汉诺威 adesso 的软件工程师。他使用 Unity 引擎并使用 C# 开发应用程序。
Post Reply