跳到主要内容

配置持久主题端点

在给定的消息VPN中配置持久主题端点,请输入以下CONFIG命令:

solace(configure)# message-spool message-vpn <vpn-name>
solace(configure/message-spool)# create topic-endpoint <name>

要编辑给定消息VPN上现有持久主题端点的属性,请输入以下CONFIG命令:

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

其中:

<name> 是主题端点名称,最多200个字符(无效字符为<>\*?&;)。每个消息VPN中的主题端点名称必须是唯一的。

此命令的无版本,no topic-endpoint <name>,从消息VPN中删除指定的持久主题端点。但是,只有在关闭主题端点后才能删除,这会禁用客户端对主题端点的访问。有关详细信息,请参阅“启用/禁用客户端发布到/消费自主题端点”。

临时主题端点的名称可以长达250个字符。与通过Solace CLI或SolAdmin配置的持久主题端点不同,临时主题端点是由客户端应用程序动态配置的,并且只能在客户端连接期间存在。

主题端点将为哪个主题订阅消息队列在配置主题端点时未指定;当客户端请求绑定消费者流到主题端点时,由客户端指定(有关信息,请参阅“创建流”)。

配置访问类型

要在Solace PubSub+事件代理上按每个主题端点配置持久主题端点的客户端访问类型,请输入以下CONFIG命令。

solace(configure/message-spool/topic-endpoint)# access-type {exclusive | non-exclusive}

其中:

exclusive 指定只有单个客户端可以绑定并由主题端点服务;如果有其他消费者尝试绑定,它们将被拒绝。

non-exclusive 指定所有绑定流都能接收消息,当多个流绑定到非独占主题端点时,它们以轮询方式接收消息。

此命令的无版本,no access-type,将设置回默认值(独占)。

在关闭客户端对持久主题端点的访问之前,无法更改客户端访问类型(请参阅“启用/禁用客户端发布到/消费自主题端点”)。

配置绑定流的最大数量

要在Solace PubSub+事件代理上按每个主题端点配置可以绑定到非独占持久主题端点的最大流数量,请输入以下CONFIG命令。

solace(configure/message-spool/topic-endpoint)# max-bind-count <value>

其中:

<value> 是一个整数值,指定可以绑定到非独占持久主题端点的最大流数量。如果主题端点的访问类型已设置为独占,则max-bind-count的值被视为1,而不管设置的值如何。有效范围是0到10,000。默认值是1。

此命令的无版本,no max-bind-count,将可以绑定到持久主题端点的最大流数量重置回默认值。

单个客户端可以创建多个流,流可能来自一个或多个客户端。

配置最大未确认消息数

对于给定的主题端点,您可以配置可以传递给消费客户端但尚未由该客户端确认的保证消息的最大数量。也就是说,每个绑定到主题端点的流可以接受多少未返回消息确认的未处理消息。

当超过这个最大数量的已传递但未确认消息时,Solace PubSub+事件代理会停止向客户端在流上传递消息,直到客户端确认已经传递的消息。

要配置每个流的最大未确认消息数限制,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# max-delivered-unacked-msgs-per-flow <max>

其中:

<max> 是一个整数值,指定可以传递给客户端但在消费者流上仍由客户端未确认的消息的最大数量。有效范围是1到事件代理支持的最大值。最大值取决于使用的事件代理类型(例如,Solace PubSub+ 3530或3560)。默认值是10,000。如果所有客户端中已传递但未确认的消息的最大数量达到,则Solace PubSub+事件代理将停止向所有客户端传递消息,直到一些客户端向事件代理返回确认。

此命令的无版本,no max-delivered-unacked-msgs-per-flow,将未确认消息的最大数量重置回默认值。

如果将max-delivered-unacked-msgs-per-flow设置得低于消费客户端使用的传输窗口大小,则可能会对性能产生负面影响。

如果应用程序至少使用版本10.0.2的JCSMP或JMS API,或至少版本7.2.5的C、.NET或Java RTO API,则API在绑定时了解配置的max-delivered-unacked-msgs-per-flow,并相应调整其ACK阈值以获得最佳性能。如果max-delivered-unacked-msgs-per-flow在客户端绑定时更改,客户端可能需要断开连接并重新连接以接收新值。

旧版本的API不会根据max-delivered-unacked-msgs-per-flow设置调整其ACK阈值。如果使用旧版本的API的应用程序绑定到主题端点,则必须将max-delivered-unacked-msgs-per-flow设置为大于或等于应用程序使用的传输窗口大小的值,以确保性能。

配置最大允许消息大小

要配置给定主题端点允许的最大消息大小,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# max-message-size <size>

其中:

<size> 是一个整数值,指定主题端点允许的最大消息大小(以字节为单位)。有效范围是0到30000000。默认值是10000000。

此命令的无版本,no max-message-size,将允许的消息大小重置回主题端点的默认值。

配置最大重新交付尝试次数

您可以使用max-redelivery选项配置主题端点可以尝试重新交付消息给客户端的最大次数。如果给定消息的重新交付尝试次数超过max-redelivery值,则消息将被丢弃,或者,如果已创建并准备好接受消息的死信队列(DMQ),消息将被移除并放入DMQ。

要配置主题端点可以尝试重新交付消息给客户端的最大次数,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# max-redelivery <count>

其中:

<count> 是可能的最大消息重新交付尝试次数。有效范围是0到255。0表示永远尝试。默认值是0。

此命令的无版本,no max-redelivery,将max-redelivery值重置回默认值。

配置消息重新交付延迟

当客户端应用程序从事件代理消费消息时,它们可能会偶尔遇到暂时无法处理消息的情况。在这种情况下,应用程序可能会回滚事务以强制重新交付消息。

立即重新交付消息通常没有帮助,因为它不允许足够的时间来解决暂时性条件。配置消息重新交付延迟可以帮助,在事务回滚后,暂停向客户端交付消息,直到配置的重新交付延迟时间过去。您还可以配置乘数,以允许重新交付尝试的指数退避。

当您配置消息重新交付延迟时,它仅在代理尝试在应用程序启动的本地事务回滚后重新交付消息给客户端时适用。

配置消息重新交付延迟是受控可用性(CA)功能。请联系Solace以了解此功能是否支持您的用例。

要配置消息重新交付延迟,请输入以下命令:

solace(configure/message-spool/topic-endpoint)# redelivery-delay

CLI现在处于可以配置主题端点在尝试重新交付消息给客户端时使用的初始间隔、最大间隔和延迟间隔乘数的级别。

  • 要配置初始间隔,请输入以下命令:
solace(.../message-spool/topic-endpoint/redelivery-delay)# initial-interval <value>

其中:

<value> 是一个整数值,指定前两次交付尝试之间的延迟,在毫秒为单位。有效值范围是1到3600000。默认值是1000。

此命令的无形式,no initial-interval,将值重置为默认值。

  • 要配置最大间隔,请输入以下命令:
solace(.../message-spool/topic-endpoint/redelivery-delay)# max-interval <value>

其中:

<value> 是一个整数值,指定任何两次重新交付尝试之间使用的最大延迟,在毫秒为单位。有效值范围是1到10800000。默认值是64000。

此命令的无形式,no max-interval,将值重置为默认值。

  • 要配置延迟间隔乘数,请输入以下命令:
solace(.../message-spool/topic-endpoint/redelivery-delay)# multiplier <value>

其中:

<value> 是一个浮点值,指定每次失败的交付尝试后每个延迟间隔乘以的数量。有效值范围是1.00到5.00。默认值是2.00。

此命令的无形式,no multiplier,将值重置为默认值。

要启用消息重新交付延迟配置,请输入以下命令:

solace(.../message-spool/topic-endpoint/redelivery-delay)# no shutdown

要禁用消息重新交付延迟配置,请输入以下命令:

solace(.../message-spool/topic-endpoint/redelivery-delay)# shutdown

配置消息重新交付

默认情况下,主题端点可以尝试重新交付消息给客户端的最大次数由max-redelivery命令控制。有关更多信息,请参阅“配置最大允许重新交付尝试次数”。

您可以改为禁用此功能。当消息重新交付被禁用时,给定的消息将只尝试从主题端点交付一次。

禁用消息重新交付是受控可用性(CA)功能。请联系Solace以了解此功能是否支持您的用例。

要禁用消息重新交付尝试,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# no redelivery

要启用消息重新交付尝试,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# redelivery

配置消息交付计数

您可以使用delivery-count选项启用或禁用消息的交付计数属性。当启用时,从主题端点发送到消费者的每条消息都包含一个属性,指示这是向消费者交付消息的第1次、第2次……或第n次尝试。默认情况下,交付计数是禁用的。

在冗余(HA)故障转移的情况下,大于1的消息计数将重置为2

启用消息交付计数是受控可用性(CA)功能。请联系Solace以了解此功能是否支持您的用例。

要在主题端点启用消息交付计数,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# delivery-count

要禁用消息的交付计数,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# no delivery-count

配置延迟交付

默认情况下,发布到主题端点的消息会立即发布给连接的消费者。有许多用例中,发布的消息不能立即交付给消费者,而是在固定延迟后才交付。一个例子是支付处理系统中的重试机制。在收到客户订单后,您可能希望实现交付延迟以重试因任何原因处理失败的信用卡交易。有关更多信息,请参阅“延迟交付”。

您可以使用delivery-delay选项配置主题端点的交付延迟,以便所有预定到主题端点的消息在一段时间内不符合交付条件。

如果您目前正在使用DMQs来实现交付延迟,请联系Solace Professional Services以获取关于迁移到使用delivery-delay选项的指导。

要配置主题端点的交付延迟,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# delivery-delay <delay>

其中:

<delay> 是要应用于到达主题端点的消息的延迟,在秒为单位,之后消息才有资格被交付。有效范围是0到4294967295。默认值是0。

此命令的无版本,no delivery-delay,将delivery-delay值重置回默认值。

配置最大消息队列使用量

要配置Solace PubSub+事件代理上持久主题端点的每主题端点最大消息队列使用量,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# max-spool-usage <size>

其中:

<size> 是一个整数值,指定主题端点允许的最大消息队列磁盘空间量,以MB为单位。将值设置为0不推荐用于主题端点。

此命令的无版本,no max-spool-usage,将重置默认值。

有关此设置的默认值的详细信息,请参阅“最大消息队列使用量”。

配置非所有者客户端的权限

要配置所有非给定持久主题端点所有者的所有客户端的权限级别,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# permission all {read-only | consume | modify-topic | delete}

其中:

read-only 为客户提供对消息队列到主题端点的消息的只读访问权限

consume 为客户提供只读权限,并能够从主题端点删除消息

modify-topic 为客户提供消费权限,并能够修改分配给主题端点的主题或选择器

delete 为客户提供modify-topic权限,并能够从主题端点删除消息,或完全删除主题端点。请注意,如果主题端点是使用CLI或SEMP由管理用户创建的,客户端无法删除主题端点。

此命令的无版本,no permission,将所有非主题端点所有者的客户端的权限级别重置为无;即,无访问权限。客户端访问级别为无是默认的权限级别。

  • 对于启用了保证端点权限覆盖的客户端用户名,忽略权限级别。(请参阅“启用端点权限覆盖”。)
  • 必须首先禁用客户端对持久消息主题端点的访问,然后才能配置权限。(请参阅“启用/禁用客户端发布到/消费自主题端点”。)

配置拒绝低优先级消息限制

要为主题端点配置拒绝低优先级消息限制,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# reject-low-priority-msg-limit <limit>

其中:

<limit> 是已队列的低优先级和高优先级消息的总数。当超过此值时,主题端点将丢弃任何进一步发布的低优先级消息,但会队列发布的高优先级消息。有效值从0到4294967295。如果设置值为0,则主题端点仅队列高优先级消息。默认值是0。

配置主题端点事件阈值

要配置控制给定主题端点生成消息队列相关事件的阈值,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# event

CLI现在处于可以从中配置主题端点的各种消息队列事件的设置和清除阈值的配置级别。

有关为主题端点生成的消息VPN级消息队列事件的特定信息以及如何设置生成这些事件的设置和清除阈值,请参阅“主题端点事件阈值”。

配置主题端点所有者

主题端点的所有权以以下方式建立:

  • 如果客户端应用程序通过Solace消息API动态配置主题端点,则与客户端关联的客户端用户名自动获得该主题端点的所有权。
  • 如果CLI用户通过Solace CLI手动配置主题端点,则没有客户端用户名自动获得该主题端点的所有权。
  • 任何具有对主题端点所属消息VPN的读写或管理员访问权限的CLI用户都对主题端点拥有完全权限(即,管理拥有所有权)。

要将给定主题端点的所有权赋予与特定客户端用户名关联的任何客户端,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# owner <owner>

其中:

<owner> 是现有客户端用户名帐户名称。

此命令的无版本,no owner,将主题端点的所有权重置回默认的无。

  • 必须首先禁用客户端对持久主题端点的访问,然后才能分配所有者。(请参阅“启用/禁用客户端发布到/消费自主题端点”。)
  • 主题端点所有者对主题端点拥有完全无限制的权限。也就是说,所有者可以消费(读取和删除接收到的消息)、删除或修改队列到主题端点。

配置消息丢弃处理

reject-msg-to-sender-on-discard选项配置持久主题端点应如何处理由于以下一个或多个条件而发生的入站消息丢弃:

  • 添加发布的消息将超过为主题端点配置的消息配额
  • 发布的消息超过了为主题端点允许的最大消息大小
  • 客户端将消息发布到它也订阅的主题,并且具有“无本地交付”的活跃流

如果由于上述任何条件而未将发布的消息队列,将发生以下情况:

  • 如果为主题端点启用了reject-msg-to-sender-on-discard选项,则消息被丢弃,并向发送者返回NACK。在这种情况下,消息不能被队列到任何其他队列或主题端点(无论这些端点是否启用或禁用了reject-msg-to-sender-on-discard选项)。

  • 仅当消息最初以非持久或持久传递模式发布时,才向客户端发送NACK。如果消息以直接传递模式发布,但由于主题匹配而更改为非持久,然后被丢弃,则不向发送者返回NACK。

  • 处理NACK的责任在于发布应用程序,而不是Solace API。Solace API不重新传输被拒绝的消息。

  • 如果为主题端点禁用了reject-msg-to-sender-on-discard选项,则入站消息被“默默”丢弃(即,丢弃消息但向发送者返回确认)。在这种情况下,其他端点可以队列该消息,如果它们没有遇到上述列出的任何条件。

要为主题端点启用reject-msg-to-sender-on-discard选项,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# reject-msg-to-sender-on-discard

此命令的无版本,no reject-msg-to-sender-on-discard,禁用了持久主题端点上的reject-msg-to-sender-on-discard选项。

  • 默认情况下,reject-msg-to-sender-on-discard选项未为主题端点启用。
  • reject-msg-to-sender-on-discard选项还影响事务会话的行为。如果正在向发送者返回“确认”,则事务会话提交成功。如果向发送者返回NACK,则提交失败。有关更多信息,请参阅“使用Solace API进行本地事务”和“使用JMS API进行事务会话”。

启用/禁用客户端发布到/消费自主题端点

  • 要阻止客户端访问指定的持久主题端点,请输入以下CONFIG命令:
solace(configure/message-spool/topic-endpoint)# shutdown [ingress | egress | full]
  • 要启用客户端访问指定的持久主题端点,请输入以下CONFIG命令:
solace(configure/message-spool/topic-endpoint)# no shutdown [ingress | egress | full]

其中:

ingress 指定禁用消息被添加到持久主题端点。

egress 指定禁用客户端绑定到持久主题端点以从其消费消息。

full 指定禁用消息被添加到持久主题端点,并禁用客户端绑定到持久主题端点。这是默认值。

启用/禁用向复制VPN传播消费者确认

默认情况下,活动复制消息VPN上的端点会将它们收到的消费者确认传播到备用复制消息VPN。

  • 要阻止主题端点向备用复制VPN传播消费者确认,请输入以下CONFIG命令:
solace(configure/message-spool/topic-endpoint)# no consumer-ack-propagation
  • 要允许主题端点向备用复制VPN传播消费者确认,请输入以下CONFIG命令:
solace(configure/message-spool/topic-endpoint)# consumer-ack-propagation

启用拒绝低优先级消息

为了防止消息拥塞场景,即交付到主题端点的消息数量如此之大以至于系统性能下降,您可以启用主题端点丢弃低优先级消息但继续队列高优先级发布的消息。主题端点仅在已队列的低优先级和高优先级消息总数超过为拒绝低优先级消息限制设置的值后,有选择地丢弃低优先级消息(请参阅“配置拒绝低优先级消息限制”)。默认情况下,拒绝低优先级消息功能未启用于端点。

为了避免无意中丢弃所有低优先级消息,建议在启用拒绝低优先级消息功能之前,将拒绝低优先级消息限制的默认值0更改为适合您网络的更合适的值。

要启用主题端点的拒绝低优先级消息功能,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# reject-low-priority-msg

此命令的无版本,no reject-low-priority-msg,配置持久主题端点不对发布的消息执行拒绝低优先级消息限制检查(默认配置)。

  • 当启用此功能时,还必须为主题端点启用reject-msg-to-sender-on-discard选项,以便在消息未入队到主题端点并被丢弃时向发布客户端发送会话事件。
  • 客户端应用程序可以使用Solace消息API通过服务类别(COS)属性为消息分配优先级。

配置最大消息生存时间(TTL)

您可以为主题端点配置最大生存时间(TTL)值,以便收到的消息被提供到期值以限制它们可以在启用了最大TTL的主题端点上停留的时间。如果消息未被消费且其到期时间已到,消息将被丢弃或移动到DMQ(如果发布者已将消息标记为DMQ-eligible)。

只有当启用了端点的Respect TTL选项时,才对消息应用最大TTL值。此外,消息还可以有发布者提供的生存时间,这表明发布者认为消息有效多长时间。这与最大TTL不同,因为发布者TTL从消息发布时开始,并随着消息通过网络而倒计时。最大TTL仅在消息在端点上时适用。如果消息既有发布者分配的TTL,又有端点分配的最大TTL,则Solace PubSub+事件代理将在消息在端点上时使用两者TTL值中的最小值。

要定义要应用于要队列的消息的主题端点的最大TTL,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# max-ttl <ttl>

其中:

<ttl> 是消息在启用了respect-ttl时可以停留在主题端点上的最大秒数。

此命令的无版本,no max-ttl,将默认最大TTL值设置为0(禁用),这意味着不会对任何收到的消息应用到期时间。

  • 当配置或更改此参数时,任何已经在队列上的消息都不会受到影响;这些消息将继续使用它们被队列到端点时分配给它们的TTL(如果有)。
  • DMQ上不能设置最大TTL。
  • 使用最大TTL会增加需要为存储在端点的每条消息维护的状态量,并会影响保证消息传递性能。

强制是否尊重消息TTL

您可以配置主题端点以尊重或忽略消息的生存时间(TTL)到期值。这包括发布客户端可以设置的TTL值和通过其配置的最大TTL属性设置在端点上的TTL值。

当主题端点被配置为尊重消息TTL时,会检查消息的TTL值。如果消息的TTL已过期,则将其从消息队列中移除并丢弃,或者,如果消息有资格进入DMQ,则将其移动到事件代理上配置的DMQ。如果消息没有分配TTL,则它永远不会过期。请注意,默认情况下,DMQ设置为忽略消息TTL到期时间,且无法更改。

当主题端点被配置为忽略消息TTL时,即使它们已被队列的时间超过了设置的TTL值,队列的消息也不会被移除。

要配置主题端点尊重消息TTL,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# respect-ttl

此命令的无版本,no respect-ttl,配置持久主题端点忽略消息TTL到期时间(默认配置)。

如果在启用respect-ttl选项后已有TTL值的消息已被队列,那么这些现有的队列消息不会被移除,即使它们的TTL到期值已超过。只有在启用respect-ttl选项后收到的带有TTL值的入站消息才可以因为TTL违规而被移除。

强制是否尊重消息优先级值

您可以配置端点以尊重或忽略消息的优先级值。

当端点被配置为尊重消息优先级时,所有接收到的消息中的优先级字段被用来以适当的顺序交付消息,换句话说,优先级较高的消息会在优先级较低的消息之前发送。

事件代理识别从0(最低)到9(最高)的十个优先级级别。如果消息中的优先级字段大于9,则事件代理将其视为优先级9。未指定优先级字段的接收消息被视为优先级4。

当从尊重优先级过渡到忽略优先级时,所有消息都保持其现有的优先级。尽管队列不再尊重新消息的优先级值,但现有消息的优先级值仍受到尊重。由于新消息被视为优先级9,当队列被配置为忽略消息优先级时,新消息可能会绕过在过渡前收到的消息。

在更改是否尊重或忽略优先级值之前,必须完全关闭端点。

强制消息优先级会增加在消费客户端从连接故障中恢复后向其交付重复消息的机会。

要配置主题端点尊重消息优先级值,请输入以下CONFIG命令:

solace(configure/message-spool/topic-endpoint)# respect-message-priority

此命令的无版本,no respect-message-priority,配置持久主题端点忽略消息优先级值(默认配置)。