跳到主要内容

设置消息属性

以下部分讨论了一些可以为要发布的消息设置的重要消息属性。这些属性会影响消息的路由方式。

  • 传输模式
  • 目标
  • 单一订阅者投递
  • 服务等级
  • 消息裁剪资格
  • 消息优先级

有关可以设置的消息属性的完整列表,请参阅适用于相应消息 API 的 PubSub+ 消息 API 文档。

传输模式

每个要发布的消息都有一个传输模式。默认情况下,使用直接传输模式。有关更多信息,请参阅消息传输模式。

PubSub+ 消息 API使用方法
JCSMPMessage.setDeliveryMode(...)
Java RTOMessageHandle.setDeliveryMode(...)
CsolClient_msg_setDeliveryMode(...)
.NETIMessage.DeliveryMode
JavaScript 和 Node.jssolace.Message.setDeliveryMode(...)

如何设置传输模式

相关示例

有关如何设置消息传输模式的示例,请参考 Java、Java RTO、C 和 .NET API 的 DirectPubSub 示例,以及 JavaScript 和 Node.js API 的 TopicPublisher 示例。

目标

主题(Topic)代表一个逻辑目标。客户端可以将消息发布到主题目标。客户端也可以订阅主题,当事件代理有一个与消息目标匹配的主题订阅时,客户端可以接收该消息。

主题可以分层组织。因此,支持通配符的主题订阅可以为客户端吸引层次结构的一部分,而无需订阅层次结构级别的每种可能组合。有关事件代理支持的字符和语法的详细信息,请参阅主题支持与语法。

发布的直接消息根据其设置的主题目标进行路由。

PubSub+ 消息 API使用方法
JCSMP在用于发布消息的发送方法上设置目标。请参阅发送直接消息或同时发送多条消息。
Java RTOMessageHandle.setDestination(...)
CsolClient_msg_setDestination(...)
.NETIMessage.Destination
JavaScript 和 Node.jssolace.Message.setDestination(...)

如何设置消息目标

相关示例

有关如何将消息发布到主题的示例,请参考 Java、Java RTO、C 和 .NET API 的 DirectPubSub 示例,以及 JavaScript 和 Node.js API 的 TopicPublisher 示例。

单一订阅者投递

当会话连接到事件代理时,可以使用单一投递(Deliver-To-One, DTO)标志将直接消息发送到单个客户端,即使可能有多个具有适当订阅的客户端能够接收该消息。值为 true 时,会在传出消息上设置此标志。

PubSub+ 消息 API使用方法
JCSMPXMLMessage.setDeliverToOne(...)
Java RTOMessageHandle.setDeliverToOne(...)
CsolClient_msg_setDeliverToOne(...)
.NETIMessage.DeliverToOne
JavaScript 和 Node.jssolace.Message.setDeliverToOne(...)

如何设置单一投递消息标志

相关示例

有关如何发布单一投递消息的示例,请参考适用于相应消息 API 的 DTOPubSub 示例。

服务等级

可以为发布到事件代理的直接消息应用服务等级(Class of Service, COS)。COS 值指定消息放置在事件代理上的每个客户端优先级队列中的哪一个,这可能会影响消息从事件代理发送到消费客户端的速度。服务等级 1 是最低的服务等级,服务等级 3 是最高的服务等级。默认值为等级 1。

必须使用每个 API 提供的数据结构设置 COS 值。不要直接使用整数设置值。

有关每个客户端出站优先级队列的更多信息,请参阅消息投递资源。

PubSub+ 消息 API使用方法
JCSMPMessage.setCos(...)
Java RTOMessageHandle.setUserCos(...)
CsolClient_msg_setClassOfService(...)
.NETIMessage.UserCos
JavaScript 和 Node.jssolace.Message.setUserCos(...)

如何设置 COS 标志

消息裁剪资格

Solace PubSub+ 的消息裁剪功能允许客户端应用程序仅接收它们订阅的主题上发布的最新消息,且接收速率可管理。在存在慢速消费者或需要较低消息速率的情况下,使用消息裁剪会非常有用。

要使用消息裁剪,需要执行以下步骤:

  • 发布的消息必须标记为可裁剪。
  • 接收客户端应用程序必须通过其客户端用户名分配一个允许使用消息裁剪的客户端配置文件。客户端配置文件还设置了速率,以控制新可裁剪消息替换排队等待投递给客户端的先前版本的延迟间隔。有关如何配置客户端配置文件并将其分配给客户端的信息,请参阅配置客户端身份验证。
PubSub+ 消息 API使用方法
JCSMPMessage.setElidingEligible(...)
Java RTOMessageHandle.setElidingEligible(...)
CsolClient_msg_setElidingEligible(...)
.NETIMessage.ElidingEligible(...)
JavaScript 和 Node.jssolace.Message.setElidingEligible(...)

如何启用消息裁剪资格

消息优先级

可以为发布到事件代理的直接消息设置消息优先级值;但是,只有在消息在投递过程中被提升为保证消息时(参见消息提升与降级),优先级值才会被尊重,并且相应的队列或主题端点被配置为尊重消息优先级时,优先级值才会生效。事件代理使用此值按适当顺序投递消息,即高优先级的消息会先于低优先级的消息发送。值为 0 表示最低优先级,值为 255 表示最高优先级(尽管事件代理将所有高于 9 的值视为优先级 9)。默认值为 4。

当端点被配置为强制执行消息优先级时,它会增加客户端在连接故障恢复后重复接收消息的机会。

PubSub+ 消息 API使用方法
JCSMPMessage.setPriority(...)
Java RTOMessageHandle.setPriority(...)
CsolClient_msg_setPriority(...)
.NETIMessage.Priority(...)
JavaScript 和 Node.jssolace.Message.setPriority(...)

如何启用消息优先级