跳到主要内容

在PubSub+ JCSMP API中定义端点属性

当使用 PubSub+ JCSMP API 的客户端应用程序动态创建端点时,用于定义该端点的属性从以下来源获取(按呈现顺序):

  • 通过端点配置 API 函数或方法传入的端点属性和/或配置标志。 客户端在动态创建持久端点时(参见使用 PubSub+ JCSMP API 配置持久端点),只能提供有限的端点属性和/或配置标志(如客户端可配置端点属性中列出)。

  • CLI 配置端点使用的属性。 客户端创建的端点将被赋予与 CLI 配置端点相同的端点属性;除非客户端传入的端点属性和/或配置标志(如上所述)优先。这些 CLI 配置端点属性可以通过两种机制从管理员特别配置的端点获取:

    • 队列和主题端点有一个 name-filter,允许它们将端点名称与端点模板匹配。这使得客户端创建的队列或主题端点能够动态地从指定的端点模板复制属性。有关更多信息,请参阅设置名称过滤器以匹配队列名称或设置名称过滤器以匹配主题端点名称。此功能仅适用于 PubSub+ 事件代理 9.4.0 版本及更高版本。
    • 客户端配置文件有一个可选的 copy-from-template-on-create 命令,可用于将自定义值从端点模板复制到客户端创建的端点。但是,如果没有明确设置要复制的自定义端点模板,则使用 CLI 配置端点的系统默认值。有关此主题的更多信息,请参阅配置客户端创建端点的初始值。

对于 9.4.0 版本之前的事件代理,可以使用 copy-from-on-create 命令指定具有自定义值的 CLI 配置队列或主题端点,这些值将应用于任何新的客户端创建的端点。

客户端可配置端点属性

在创建持久队列或主题端点时,客户端应用程序可以通过端点属性和/或配置标志(通过端点配置 API 函数或方法传入)配置以下端点参数:

  • 访问类型(独占或非独占)——确定多个保证消息流绑定到队列端点时的行为。(只有队列可以有多个流绑定。)

    • 独占——可以绑定多达 1,000 个消费者流到队列,但所有绑定流中只有一个是能够接收消息的(即,只有一个是活动的)。第一个绑定到队列的流可以从队列中消费消息,当该流断开连接时,下一个最早绑定的流变为活动状态并可以开始接收消息,依此类推。
    • 非独占——所有绑定的消费者流都能够接收消息,当多个流绑定到非独占队列时,它们以轮询方式接收消息。
  • 最大消息大小——端点中存储的任何一条消息的最大大小(以字节为单位)。如果消息的大小超过此值,消息不会被排队到端点。

  • 消息丢弃行为——指定持久端点应如何处理由于以下任何条件导致的入站消息丢弃。(此属性不影响端点处理其他原因的消息丢弃。)

    • 发布的消息导致端点配置的消息配额被超过
    • 发布的消息超过端点允许的最大消息大小
    • 客户端发布到它也订阅的主题,并且具有“无本地投递”的活动流
    • (仅限队列)消息直接发布到队列,但队列已关闭

默认情况下,消息丢弃行为属性对于队列是启用的,对于主题端点是禁用的。

如果为端点启用了消息丢弃行为属性,由于上述一个或多个条件导致无法存储消息,该消息将被丢弃,并向发送者返回负确认(即“nack”)。在这种情况下,消息不能被存储到任何其他队列或主题端点(无论这些端点是否启用了消息丢弃行为属性)。

只有当消息最初是以非持久或持久投递模式发布时,才会向客户端发送 nack。如果消息是以直接投递模式发布,但由于主题匹配被改为非持久,并随后被丢弃,则不会向发送者返回 nack。发布应用程序负责决定如何处理 nack——而不是消息传递 API。Solace 消息传递 API 不会重新传输被 nack 的消息。

如果端点未启用消息丢弃行为属性,并且遇到上述一个或多个条件,端点会“静默”地丢弃入站消息(即,丢弃消息但向发送者返回确认)。在这种情况下,如果其他端点没有遇到上述列出的任何条件,消息可以被其他端点存储。

消息丢弃行为属性还影响事务会话的行为。如果向发送者返回确认,则事务会话提交成功。如果向发送者返回 nack,则提交失败。对于企业消息传递 API,请参阅 PubSub+ JCSMP API 中的使用本地事务。

  • 最大消息重传次数——指定队列尝试将消息重新投递给客户端的最大次数。如果给定消息的重传尝试次数超过最大消息重传值,消息将被丢弃,或者,如果在事件代理上配置了死信队列(DMQ),消息将被移除并放入 DMQ。(有关 DMQ 和使消息符合 DMQ 资格的信息,请参阅死信队列资格。)

有效范围是 0 到 255。0 表示永远重试,是默认值。

  • 权限——除所有者(即配置端点的客户端或管理员)之外的客户端在端点上的权限级别。所有者始终具有最高权限级别。可以分配以下权限级别,从高到低:
    • 删除——客户端具有修改主题的权限,并且可以删除端点。
    • 修改主题——客户端具有消费权限,并且可以更改吸引消息到主题端点的主题订阅。
    • 消费——客户端可以从端点读取和消费消息。当客户端消费消息时,它会被确认,随后从端点中移除该消息。
    • 只读——客户端可以从端点读取消息,但不能消费它们。
    • 无——除所有者之外的任何客户端都无法访问端点。
  • 配额——端点允许的最大消息存储磁盘空间(以兆字节为单位)。如果超出此配额,消息无法被排队到端点。这提供了负载平衡;然而,消息可以无序地投递到消费客户端。
  • 尊重消息 TTL——指定端点是否识别已发布消息上设置的生存时间(TTL)资格标志。如果识别消息 TTL,则过期的消息可以自动从端点中移除。有关发布消息时设置 TTL 资格的信息,请参阅生存时间。