跳到主要内容

保证消息传递操作

下图显示了保证消息从发布客户端,通过事件代理,到消费客户端的基本步骤。

img

  1. 连接到消息VPN的客户端应用程序向主题或队列目的地发布保证消息。

  2. 事件代理接收的入站消息被缓冲到队列或主题端点。

  3. 事件代理发送确认消息,确认消息已成功缓冲回发布客户端。

  4. 如果消费客户端:

    • 成功建立了与同一消息VPN的连接
    • 被授权接收保证消息
    • 在该会话中创建了消费者流程以绑定到端点
    • 有一个活跃的流程绑定到端点,可以传递消息。有关访问类型的更多信息,请参考队列访问类型和主题端点。
  5. 当消费客户端接收到消息时,它发送确认消息,确认消息已成功传递回事件代理。

  6. 事件代理从消息缓冲中删除消息。

有关消息缓冲和确认机制的更多信息,请参见消息缓冲。

会话和消费者流程

当应用程序使用Solace API时,会话用于在应用程序和事件代理之间提供客户端连接。会话使用单个TCP连接到事件代理。会话是所有客户端消息操作所必需的:例如,会话是发布保证消息所必需的,会话也是创建消费者流程以接收保证消息所必需的。

可以在会话中创建消费者流程,以建立消费者与队列或主题端点之间的一对一映射。消费者流程为保证消息从事件代理到消费者提供了传输手段。在会话中可以创建一个或多个消费者流程。

img

消费者流程不用于接收直接消息。相反,客户端直接从事件代理的消息总线通过会话接收发布到匹配其客户端订阅的主题的直接消息。

发布保证送达消息

当客户端发布保证消息时,它们可以:

  • 将消息发布到主题

    • 用于发布和订阅模型。
    • 发布到主题的保证消息由事件代理消息总线确认,表示系统已接收到消息。发布到主题的消息可以被没有客户端、单个客户端或多个客户端接收。如果没有消息的订阅者,该消息将被丢弃,因为在这种范式中,生产者和订阅者是解耦的。
  • 将消息发布到队列

    • 用于点对点模型。
    • 事件代理消息总线也确认发布到队列的保证消息,表示系统已接收到消息。然而,发布到队列的消息比发布到主题的消息更紧密耦合。因此,如果队列不存在,或者无法缓冲消息(例如,如果入站被禁用或超过配额),则消息总线将拒绝该消息,发布客户端应用程序将获得这一即时反馈。发布到队列的消息可以被单个消费者消费。

当客户端在会话中发布保证消息时,会自动建立到主机事件代理的发布者流程。发布的消息称为其持久性,因为它们被缓冲(即,被写入持久存储)到事件代理上配置的以下类型的端点之一:

  • 与消息的队列目的地匹配的队列。
  • 被分配了与消息的主题目的地匹配的主题订阅的主题端点。

以直接传递模式发布的消息

当消息的主题目的地与端点设置的主题订阅匹配时,也可以将以直接传递模式发布的消息缓冲到端点。在这种情况下,当消息被缓冲到端点时,它被赋予非持久传递模式,以便客户端可以通过其建立的保证消息流程消费消息。有关更多信息,请参见主题匹配和消息传递模式。

超过事件代理最大消息大小的消息

所有大于事件代理最大保证消息大小的Solace消息格式(SMF)保证消息(在大多数情况下为30MB)将被丢弃。发布客户端将被断开连接,并引发CLIENT_CLIENT_MESSAGE_TOO_BIG事件。

接收保证消息

要接收发布的保证消息,客户端必须创建消费者流程以绑定到事件代理上配置的队列端点或主题端点,并缓冲发布的消息称。一旦消费者绑定到端点并且它有一个活跃的消费者流程(即,通过该流程传递消息),它就可以消费缓冲到该端点的保证消息。

  • 客户端绑定到队列 客户端可以是对该端点缓冲的消息的独占或非独占消费者。有关独占和非独占消费者的信息,请参考队列和主题端点。

  • 客户端绑定到主题端点 客户端提供它希望端点缓冲消息的主题订阅。主题端点将缓冲消息的主题订阅在配置主题端点时未指定。

当消费客户端成功接收保证消息时,需要相应的应用程序确认以向事件代理指示客户端应用程序已接收消息,然后消息可以从端点中移除。

保证消息排队限制

PubSub+事件代理一次可以排队的最大保证消息数量受以下因素的综合影响:

  • 配置的端点接收的消息数量 - 如果单个发布的消息被排队到_n_个端点进行传递,即使事件代理只存储消息的一份副本,这也被视为_n_条消息被排队传递。
  • 事件代理的数据是否正在被复制 - 当使用复制设施时,复制队列中的一条消息被视为另一条被排队传递的消息。也就是说,如果一条消息被排队到_n_个端点进行传递,并且它将被复制,这也被视为_n_+1条消息被排队传递。
  • 事件代理是否正在处理事务 - 当使用事务时,事件代理必须在事务提交或回滚之前为每个消息维护额外的信息。
  • 是否有配置的端点被设置为尊重发布消息的TTL过期时间 - 当端点尊重消息的TTL时,TTL将被记录并维护,直到消息被消费或丢弃。