跳到主要内容

接收保证消息

为了接收已发布的保证消息(即具有持久化或非持久化传输模式的消息),客户端必须创建一个消费者流,以绑定到事件代理上配置的队列端点或主题端点。一旦客户端绑定到端点,它就可以接收被投递并存储到该端点的已发布保证消息。

当消费客户端通过流成功接收一条保证消息时,需要发送一个对应的应用程序确认,以告知事件代理客户端应用程序已接收该消息,然后该消息可以从端点移除。

相关事件代理配置信息

为了让客户端能够从其连接的消息 VPN 中消费消息,事件代理必须启用保证消息和消息存储功能。此外,客户端必须被分配适当配置的客户端配置文件和/或访问控制列表(ACL)配置文件:

  • 要接收具有保证传输模式的消息,客户端必须被分配启用了 allow-guaranteed‑message‑receive 参数的客户端配置文件。此外,如果客户端将使用非持久化消息消费者,则分配的客户端配置文件还必须启用 allow‑guaranteed‑endpoint-create 参数,因为这些客户端会自动创建临时队列/主题端点。
  • 要允许客户端订阅主题(或仅订阅特定主题集),客户端必须被分配具有适当访问控制权限的 ACL。

有关如何为保证消息配置事件代理以及通过客户端配置文件和 ACL 授权连接客户端的更多信息,请参阅配置客户端身份验证。

队列

发布到队列目标的消息会被存储到事件代理上匹配的队列端点。因此,队列既可以作为消息可以发布的目标,也可以作为客户端可以绑定并从中浏览或消费消息的端点。通过这种方式,队列可以在典型的点对点(P2P)模型中使用。

然而,也可以为队列添加主题订阅,以便发布到匹配主题的消息被投递到队列。(有关更多信息,请参阅向队列添加主题订阅。)因此,队列也可以在发布/订阅(pub/sub)模型中使用。

多个流可以绑定到一个队列,但单个存储的消息只能被通过这些流之一绑定的单个消费客户端消费。如果队列被配置为独占访问类型,只有第一个绑定的流可以主动接收消息。如果第一个流断开连接,第二个流可以开始接收消息,依此类推。独占队列始终按照消息接收的顺序投递消息。

如果队列被配置为非独占访问类型,每个绑定的流将以轮询方式接收消息。有关访问类型的更多信息,请参阅定义端点属性。

主题端点

主题端点会吸引与端点关联的主题订阅匹配的、发布到主题的消息。在 Java 消息服务(JMS)中,主题端点等同于持久化主题订阅。主题端点可以在发布/订阅(pub/sub)模型中使用。

对于独占主题端点,只有一个客户端可以绑定并接收消息;如果其他客户端尝试绑定,它们将被拒绝。独占持久化主题端点始终按照消息接收的顺序投递消息。对于非独占持久化主题端点,多个消费者可以绑定,每个消费者都将按轮询方式服务。

  • 当使用 .NET API 时,客户端必须获取适当的主题实例,以便使用主题订阅接收消息(请参阅创建主题)。
  • 当使用 JavaScript 或 Node.js API 时,队列和主题端点都被建模为队列,并作为 solace.QueueDescriptor 对象传递给 solace.MessageConsumerProperties,该对象用于创建消息消费者。
  • 当消息的主题目标与主题端点设置的主题订阅匹配时,以直接传输模式发布的消息也可以被存储到主题端点。在这种情况下,当消息被存储到端点时,它被赋予非持久化传输模式,以便接收客户端可以通过其已建立的消费者流消费该消息。有关更多信息,请参阅主题匹配与消息传输模式。

端点持久性

端点可以是持久化的或非持久化的。

  • 持久化端点 的生命周期独立于任何特定会话。即使没有会话连接,消息也可以在持久化端点上累积。

    持久化端点只能与安装了保证投递刀片(Assured Delivery Blade, ADB)且启用了保证消息和消息存储功能的物理事件代理一起使用。有关配置事件代理以启用保证消息的信息,请参阅保证消息配置。

  • 非持久化或临时端点 由客户端在会话中创建,并持续会话的整个生命周期。当会话关闭时,临时端点及其消息将被删除。在客户端会话正常关闭时,临时端点将立即删除。如果创建这些端点的客户端因非事件代理高可用性(HA)故障切换或重启的原因断开连接,则临时端点将最多维持 60 秒。如果这些客户端未能在此时间内重新连接,临时端点将被移除。如果客户端断开连接是由事件代理 HA 故障切换或重启引起的,则临时端点最多维持 180 秒。

持久化端点与非持久化端点的区别

以下列表概述了持久化端点和非持久化端点在创建、持久化和消费者支持方面的关键区别。

持久化端点:

  • 可以由管理员或应用程序创建。
  • 如果由管理员创建端点,则应用程序无法删除该端点。
  • 在高可用性(HA)和数据复制(DR)故障切换中持续存在。
  • 可以根据端点的配置支持多个消费者。
  • 名称必须由管理员或配置端点的应用程序定义。

非持久化端点:

  • 只能由应用程序创建。
  • 在意外断开连接后最多持续 60 秒。
  • 在高可用性(HA)故障切换中持续存在,但在数据复制(DR)故障切换中不会持续。
  • 只支持单个消费者,其生命周期取决于该消费者。
  • 名称可以自动生成,也可以由应用程序定义。