保证消息传递操作
下图显示了保证消息从发布客户端,通过事件代理,到消费客户端的基本步骤。
-
连接到消息VPN的客户端应用程序向主题或队列目的地发布保证消息。
-
事件代理接收的入站消息被缓冲到队列或主题端点。
-
事件代理发送确认消息,确认消息已成功缓冲回发布客户端。
-
如果消费客户端:
- 成功建立了与同一消息VPN的连接
- 被授权接收保证消息
- 在该会话中创建了消费者流程以绑定到端点
- 有一个活跃的流程绑定到端点,可以传递消息。有关访问类型的更多信息,请参考队列访问类型和主题端点。
-
当消费客户端接收到消息时,它发送确认消息,确认消息已成功传递回事件代理。
-
事件代理从消息缓冲中删除消息。
有关消息缓冲和确认机制的更多信息,请参见消息缓冲。
会话和消费者流程
当应用程序使用Solace API时,会话用于在应用程序和事件代理之间提供客户端连接。会话使用单个TCP连接到事件代理。会话是所有客户端消息操作所必需的:例如,会话是发布保证消息所必需的,会话也是创建消费者流程以接收保证消息所必需的。
可以在会话中创建消费者流程,以建立消费者与队列或主题端点之间的一对一映射。消费者流程为保证消息从事件代理到消费者提供了传输手段。在会话中可以创建一个或多个消费者流程。
消费者流程不用于接收直接消息。相反,客户端直接从事件代理的消息总线通过会话接收发布到匹配其客户端订阅的主题的直接消息。
发布保证送达消息
当客户端发布保证消息时,它们可以:
-
将消息发布到主题
- 用于发布和订阅模型。
- 发布到主题的保证消息由事件代理消息总线确认,表示系统已接收到消息。发布到主题的消息可以被没有客户端、单个客户端或多个客户端接收。如果没有消息的订阅者,该消息将被丢弃,因为在这种范式中,生产者和订阅者是解耦的。
-
将消息发布到队列
- 用于点对点模型。
- 事件代理消息总线也确认发布到队列的保证消息,表示系统已接收到消息。然而,发布到队列的消息比发布到主题的消息更紧密耦合。因此,如果队列不存在,或者无法缓冲消息(例如,如果入站被禁用或超过配额),则消息总线将拒绝该消息,发布客户端应用程序将获得这一即时反馈。发布到队列的消息可以被单个消费者消费。
当客户端在会话中发布保证消息时,会自动建立到主机事件代理的发布者流程。发布的消息称为其持久性,因为它们被缓冲(即,被写入持久存储)到事件代理上配置的以下类型的端点之一:
- 与消息的队列目的地匹配的队列。
- 被分配了与消息的主题目的地匹配的主题订阅的主题端点。
以直接传递模式发布的消息
当消息的主题目的地与端点设置的主题订阅匹配时,也可以将以直接传递模式发布的消息缓冲到端点。在这种情况下,当消息被缓冲到端点时,它被赋予非持久传递模式,以便客户端可以通过其建立的保证消息流程消费消息。有关更多信息,请参见主题匹配和消息传递模式。
超过事件代理最大消息大小的消息
所有大于事件代理最大保证消息大小的Solace消息格式(SMF)保证消息(在大多数情况下为30MB)将被丢弃。发布客户端将被断开连接,并引发CLIENT_CLIENT_MESSAGE_TOO_BIG
事件。