跳到主要内容

SolGateway

当 IPC 应用程序还希望通过 Solace PubSub+ 事件代理与其他应用程序通信时,必须使用 SolGateway 应用程序。

尽管 SolGateway 与 C 和 Java RTO API 都兼容,但它仅包含在 C API 的标准包中。

SolGateway 应用程序允许运行在同一主机上的 IPC 应用程序与事件代理通信,并通过 Solace 消息总线与其他 Solace PubSub+ 中的应用程序进行交互。

如下面的图所示,SolGateway 允许驻留在同一主机上的多个应用程序直接相互通信。它还为这些应用程序提供了一个网关,以便与平台中的其他应用程序进行通信。

SolGateway 允许应用程序保持与其他应用程序通信的单一会话视图,使应用程序更具可移植性。

SolGateway 将来自 IPC 应用程序的流量桥接到事件代理,或者将来自事件代理的流量桥接到网关后面的 IPC 应用程序。SolGateway 不在 IPC 应用程序之间路由消息。如果主机上的两个 IPC 应用程序想要直接相互通信,您必须在它们之间建立一个 IPC 通道。

使用单一会话进行事件代理和 IPC 对等通信

img

作为使用 SolGateway 的替代方案,您可以使每个 IPC 应用程序直接连接到事件代理。然而,如果使用 SolGateway 通过单一会话完成此操作,则应用程序可以从其直接连接的 IPC 对等方和事件代理接收流量,因为订阅会在会话下的每个传输通道上复制。

如下面的图所示,您可以使应用程序使用单独的会话连接到事件代理,然后控制哪些订阅发送到对等应用程序,哪些发送到事件代理。

使用单独的会话进行事件代理和 IPC 对等通信

img

在这种通信模型中,应用程序控制哪些流量通过哪些会话传输,这为应用程序提供了更多的控制权。然而,与此同时,为了与所有其他应用程序通信,它比“单一会话”模型的可移植性更低。

SolGateway运行机制

SolGateway 提供以下服务:

  1. 建立与事件代理的连接。
  2. 接受来自 IPC 对等方的传入连接(使用 TCP 或共享内存通信)。
  3. 将从 IPC 对等方收到的订阅转发到事件代理。这会导致事件代理上的任何匹配消息被吸引到 SolGateway。
  4. 默认情况下,向每个连接的 IPC 对等方发送一个“>”和一个“#P2P/>”订阅,以便所有由对等方应用程序发布的消息都被发送到 SolGateway。可以通过命令行选项更改此行为。
  5. 将从事件代理收到的所有消息路由到想要这些消息的 IPC 对等方应用程序(根据 SolGateway 从 IPC 对等方应用程序收到的订阅)。
  6. 将从对等方 IPC 应用程序收到的所有消息发送到事件代理,以便它们可以被平台中感兴趣的其他应用程序接收。

SolGateway命令行选项

要查看 SolGateway 的命令行选项,请在命令行中运行 SolGateway 应用程序,且不带任何参数。

SolGateway限制

SolGateway 可以将从 IPC 对等方收到的主题订阅发送到事件代理,以吸引 Solace PubSub+ 中其他应用程序的匹配消息。它还可以将本地应用程序生成的消息发布到事件代理。因此,您必须小心确保本地应用程序不会从 IPC 对等方和事件代理(即,由 SolGateway 发布的消息反射回 SolGateway,然后发送到 IPC 对等方)同时收到相同的消息。

如果 IPC 应用程序订阅一个主题并在不同的主题上发布消息,则不会出现此问题。然而,如果 SolGateway 后面的 IPC 应用程序订阅了它们也在发布的相同主题,则可能会出现此问题。例如,在“使用单一会话进行事件代理和 IPC 对等通信”中,应用程序 A 订阅了主题“foo”,并通过两个应用程序之间的 IPC 连接接收应用程序 B 发布的匹配消息。SolGateway 也接收了“foo”主题的订阅,并从事件代理订阅了该主题。SolGateway 还将应用程序 B 发布的消息转发到事件代理。然后事件代理将此消息发送回 SolGateway,SolGateway 将其路由到应用程序 A,导致它收到两份副本。

要防止这种情况,您可以:

  • 在事件代理上为 SolGateway 连接配置订阅 ACL,以阻止不需要从 Solace PubSub+ 接收流量的订阅。
  • 使用 SolGateway 命令行选项“无本地交付”(-nl)。当指定此选项时,即使客户端有匹配发布的主题的订阅,也不能在同一个会话上接收该会话上发布的消息。