跳到主要内容

主题匹配和消息传递模式

当使用保证消息传递的PubSub+事件代理接收到发布到某个主题的消息时,它可以自动更改消息的传递模式,以适应终端或直接客户端订阅的持久性要求,当存在主题匹配时。更改消息传递模式被称为消息升级和降级。

消息升级和降级可能会给您的部署带来几个潜在的缺点。在决定实施此功能之前,请仔细考虑以下限制:

  • 消息升级不能保证无损失。直接消息发布者可以比保证消息路径处理消息的速度更快,并且它没有与保证发布者相同的反馈压力机制。在这种情况下,事件代理会积极丢弃升级路径上的消息,以保护保证消息路径。

  • 消息升级可能导致资源问题。因为直接消息发布者可以比保证消息客户端更快地发送消息,事件代理上为队列分配的磁盘空间可能会很快被消耗。

  • 高速率的消息升级可能会影响保证消息传递的延迟。

  • 消息降级可能导致重复消息。如果发布应用程序没有从事件代理接收到确认,消息会被重新传输。事件代理有内置机制防止保证消息订阅者的这种重新传输,然而直接消息订阅者会收到额外的副本。

如需更多指导,请联系Solace。

示例锚

直接消息发布到与终端订阅匹配的主题锚

客户端应用程序可能将直接消息发布到与队列或事件代理上的主题终端匹配的主题。由于终端只能接受保证消息(持久和非持久),事件代理会将消息的传递模式更改为非持久,以便终端可以接收它。当客户端以直接方式发布消息时,消息不会回传给客户端确认。然而,当消息的传递模式更改为非持久并且消息被卷绕到终端时,消息随后作为保证消息行为,并且接收客户端会向事件代理提供确认。

有关如何说明当发布为直接的消息匹配分配给终端的主题时消息的传递模式如何变化的示例,请参见发布直接消息。

事件代理接收到发布到主题的持久消息锚

当事件代理接收到发布到主题的持久消息时,它会将消息传递给任何具有匹配主题订阅的终端。然而,由于为单个客户端注册的主题订阅是直接消息,事件代理可以将消息的传递模式更改为直接,并将其发送给具有匹配主题订阅的那些客户端。在这种情况下,因为客户端以持久方式发布消息,消息会回传给发布客户端确认。

客户端接收持久消息的唯一方式是绑定到持久的主题终端或队列,或请求为其创建非持久队列或主题终端。

有关如何说明当发布为非持久或持久的消息匹配客户端的主题订阅时消息的传递模式如何变化的示例,请参见发布保证消息。

匹配主题的终端的消息传递模式如何变化锚

下表列出了匹配主题的终端的消息传递模式如何变化。

发布消息的传递模式终端接收为...
直接非持久
非持久非持久
持久持久