跳到主要内容

在PubSub+ JCSMP API中接收保证消息

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

当消费客户端通过流成功接收保证消息时,需要发送相应的应用程序确认,以告知事件代理客户端应用程序已收到该消息,然后该消息才能从端点中删除。

相关的事件代理配置信息

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

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

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

队列

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

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

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

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

主题端点

主题端点会吸引与端点关联的主题订阅匹配的发布到主题的消息。主题端点相当于 Java 消息服务(JMS)中的持久主题订阅。主题端点可以在发布和订阅模型中使用。

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

  • 当使用 JCSMP 或 .NET API 时,客户端必须获取适当的主题实例,以使用主题订阅接收消息(请参阅 PubSub+ JCSMP API 中的创建主题)。
  • 当使用 JavaScript 或 Node.js API 时,队列和主题端点都被建模为队列,并作为 solace.QueueDescriptor 对象传递给 solace.MesssageConsumerProperties,用于创建消息消费者。
  • 当消息的投递模式为直接时,如果消息的主题目标与主题端点的主题订阅集匹配,消息可能会存储到主题端点。在这种情况下,当消息存储到端点时,它会被赋予非持久投递模式,以便接收客户端可以通过其建立的消费者流消费该消息。有关更多信息,请参阅主题匹配和消息投递模式。 Kimi: 好的,以下是剩余部分的翻译:

端点持久性

端点可以是持久的或临时的(即,非持久的)。

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

只有当物理事件代理安装了 Assured Delivery Blade(ADB)并且启用了保证消息传递和消息存储功能时,才能使用持久端点。有关配置事件代理以进行保证消息传递的信息,请参阅保证消息传递配置。

  • 临时端点由客户端在会话中创建,并持续会话的整个生命周期。当会话关闭时,临时端点及其消息将被删除。在客户端会话正常关闭时,临时端点会立即被删除。在其他关闭情况下(例如,切换到冗余事件代理或连接失败),临时端点将被维护六十秒,以便重新建立会话。