跳到主要内容

配置死信队列

您可以创建一个死信队列(DMQ)来接收从队列或主题端点丢弃的消息,这些消息无法被传送给订阅客户端。默认情况下,在以下情况下,消息会从端点被丢弃:

  • 消息的最大生存时间(TTL)值已达到,并且端点配置为尊重消息TTL到期时间。
  • 向消费者重新传送消息的次数已达到原始端点的最大重新传送计数值。

被丢弃的消息会被删除,除非配置了DMQ来接收队列或主题端点丢弃的消息,并且消息被发布者标记为DMQ-eligible。

Solace建议您为需要DMQ的每个队列和主题端点使用单独的DMQ。单独的DMQ可以更容易地管理来自多个队列的死信,并且使调查DMQ消息变得更容易。

有关DMQ的更多信息,请参见死信队列。

配置DMQ

本节提供使用Solace CLI配置DMQ的信息。有关在PubSub+ Broker Manager中配置DMQ的信息,请参见为PubSub+ Cloud配置死信队列或为软件事件代理和设备配置死信队列。

要为持久化队列分配特定的DMQ,请输入以下CONFIG命令:

solace(configure/message-spool/queue)# dead-message-queue <name>

要为持久化主题端点分配特定的DMQ,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# dead-message-queue <name>

其中:

<name>是与给定端点相同的消息VPN上的现有队列的名称。

该命令的no版本,no dead-message-queue,将端点分配的DMQ重置为默认的#DEAD_MSG_QUEUE

在新消息也被入队的同时将消息移动到DMQ可能会消耗大量的事件代理池资源。Solace建议始终有一个在线消费者连接到DMQ,以减少过期消息,从而降低整体事件代理池使用需求。

通过端点模板设置DMQ

您可以使用端点模板为客户端创建的端点分配特定的DMQ。当客户端创建的端点使用API动态创建时,端点名称将与端点模板匹配。更多信息请参见端点模板。

要为客户端创建的队列使用队列模板分配特定的DMQ,请输入以下CONFIG命令:

solace(configure/message-spool/queue-template)# dead-message-queue <name>

要为客户端创建的主题端点使用主题端点模板分配特定的DMQ,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint-template)# dead-message-queue <name>

其中:

<name>是与给定端点相同的消息VPN上的现有队列的名称。

该命令的no版本,no dead-message-queue,将端点分配的DMQ重置为默认的#DEAD_MSG_QUEUE

设置DMQ资格和TTL

设置DMQ资格

消息的DMQ资格由发布客户端设置。更多信息:

  • 关于Solace消息API,请参见死信队列资格。
  • 关于Solace REST消息,请参见Solace特定HTTP头设置Solace-DMQ-Eligible
  • 关于JMS API,请参见死信队列资格。
  • 对于AMQP 1.0,每个消息都是DMQ-eligible。

设置TTL

消息的TTL值也可以由发布客户端设置,并且/或者它也可以有一个max-ttl值,端点在接收消息时可以设置该值。

功能交互

使用高可用性

处于高可用性(HA)组的PubSub+事件代理应将其时钟与网络时间协议(NTP)服务器同步(设备也可以使用PTP)。这样,保证消息到期在冗余配置中按预期工作。如果备份事件代理与主事件代理的时钟时间不一致,那么在消息发布和设置到期之间的故障转移,消息将不会在预期的时间到期。可以通过CLI的ntp-server CONFIG命令配置NTP服务器参数。

使用复制

如果您正在使用复制,并且为端点启用了ACK传播(启用是默认值),超出TTL的复制消息将在备用站点被丢弃而不是移动到DMQ。如果您禁用ACK传播,那么TTL计时器将在两个站点独立运行,导致每个站点的消息池之间存在差异。Solace建议您不要禁用ACK传播。