跳到主要内容

Microgateway配置

Microgateway 允许 Solace PubSub+ 事件代理充当 HTTP 负载均衡器,或在 RESTful API 客户端和远程微服务之间充当简单的 API 网关。有关更多信息,请参阅 Microgateways。

本节描述了 Microgateways 的各种限制,并提供了在事件代理可以充当 Microgateway 之前所需的配置参数列表。

要通过事件代理传播 REST 请求,必须首先为其配置基本的保证消息传递。有关更多信息,请参阅保证消息传递配置。此外,在配置 Microgateway 部署中使用的队列时需要特别注意。有关更多信息,请参阅为 Microgateway 配置队列。

限制

Microgateways 有以下限制:

  • 不支持 HTTP CONNECT 和 TRACE 方法。
  • 事件代理不支持在 REST 交付点(RDP)将消息传递给 REST 消费者时更改原始 HTTP 方法的能力。
  • 事件代理不支持在 RDP 将消息传递给 REST 消费者时更改消息的查询参数的能力。
  • 事件代理不支持通过 HTTP 的窃听应用程序。唯一可以通过 HTTP 接收请求的应用程序是远程微服务。如果您添加了一个窃听 HTTP 应用程序,来自微服务和窃听应用程序的响应将导致原始 REST 客户端的竞态条件。
  • API 网关的许多功能不包含在 Microgateway 功能中,包括:
    • 扇出和响应整合
    • 负载转换
    • API 生命周期管理
    • API 版本控制

配置以接收REST请求

请按照以下步骤配置 Solace PubSub+ 事件代理以接收 REST 请求。

  1. 启用系统级别的 REST 服务以接收进入的 REST 连接(请参阅 REST 服务管理)。
  2. 为一个或多个消息 VPN 配置进入的 REST 服务(请参阅配置进入连接)。
    1. 指定一个专用的 REST 服务监听端口(请参阅设置监听端口)。
    2. 为明文或 SSL 服务配置 REST(请参阅启用 REST 明文服务和启用 REST SSL 服务)。
  3. 启用消息 VPN 的网关模式(请参阅配置 REST 消息 VPN 模式)。
  4. 可选地,配置 ACL 以控制 REST 客户端可以访问的 URI 以及它们允许使用的 HTTP 方法(请参阅 ACL 配置)。

配置以发布REST请求

请按照以下步骤配置 Solace PubSub+ 事件代理以发布 REST 请求。

  1. 启用系统级别的 REST 服务以发布出去的 REST 连接(请参阅启用出去的 REST 连接)。
  2. 在启用了 REST 的消息 VPN 中配置并启用一个 REST 交付点(RDP)(请参阅管理 REST 交付点)。
    1. 为 RDP 配置至少一个队列绑定(请参阅管理 REST 交付点)。
    2. 可选地,配置事件代理如何处理出站 URI 中的权威值(请参阅管理 REST 交付点)。
  3. 配置并启用一个 REST 消费者(请参阅管理 REST 交付点)。
    1. 为 REST 消费者配置连接参数(请参阅管理 REST 交付点)。

配置REST消息VPN模式

默认情况下,启用了 REST 的 VPN 以消息模式运行。

要配置 REST 消息 VPN 模式,请输入以下 CONFIG 命令:

solace(configure/message-vpn/service/rest)# mode {gateway | messaging}

其中:

  • gateway 配置消息 VPN 作为 Microgateway 运行,通过该 Microgateway 传播 REST 消息。
  • messaging 配置消息 VPN 作为事件代理运行,REST 消息在该事件代理上排队。

此命令的 no 版本(no mode)将消息 VPN 返回到默认模式(消息模式)。

为Microgateway配置队列

将消息 VPN 配置为作为 Microgateway 运行会改变事件代理对进入请求和响应进行编码以进行内部传输的方式。这种处理方式的改变要求在创建用于流量管理的队列或在部署中添加窃听应用程序时需要仔细考虑。

为微服务流量管理配置队列

配置为作为 Microgateways 运行的消息 VPN 将进入请求的 HTTP 方法(POST、GET、DELETE)和路径编码为 Solace 消息主题以进行内部传输。这使得事件代理能够将每个 HTTP 方法传递到单独的队列。您可以使用此功能来配置对远程微服务的流量管理。

要向 Microgateway 部署中使用的队列添加主题订阅,请输入以下 CONFIG 命令。

solace(configure/message-spool/queue)# subscription topic <HTTP method>/<target-path>

例如,要为具有特定路径的所有 POST 请求添加订阅:

solace(configure/message-spool/queue)# subscription topic POST/store/orders

要为具有特定路径的所有 HTTP 请求添加订阅:

solace(configure/message-spool/queue)# subscription topic */store/account/orders

要为各个 HTTP 方法添加订阅,无论路径如何:

solace(configure/message-spool/queue)# subscription topic POST/>
solace(configure/message-spool/queue)# subscription topic GET/>

有关如何为微服务流量管理配置队列的示例,请参阅微服务流量管理示例。

为窃听应用程序配置队列

为了使窃听应用程序能够接收 Microgateway 传播的请求和响应,您必须向每个相应的队列添加以下主题订阅:

  • 一个或多个与用于从 REST 客户端接收请求的现有订阅匹配的订阅。
  • 一个或多个与事件代理生成的回复主题相对应的订阅。这些主题根据以下格式生成:#P2P/<virtual-router-name>/_rest-<tsid>/<request-method>/<request-path>

例如,要向队列添加主题订阅,以便相应的窃听应用程序接收来自远程微服务的所有响应:

solace(configure/message-spool/queue)# subscription topic #P2P/v:solace/_rest-*/>

有关如何为窃听应用程序配置队列的示例,请参阅窃听应用程序示例。

将OAuth令牌传递给REST消费者

在 REST/HTTP 客户端连接中,事件代理使用 Authorization: basic <b64_username_password> HTTP 头字段进行其自身的身份验证。在网关模式下,代理将除 basic 之外的任何类型的授权头传递给 REST 消费者。您可以使用此机制将 OAuth 凭据通过代理传递,以便远程主机处理授权。

要通过代理传递 OAuth 凭据,请配置 REST 客户端在 bearer 类型的授权头中插入 OAuth 令牌:

Authorization: bearer <oauth_bearer_access_token>

此头通过代理传递,并将由远程服务器不变地接收。由于代理不验证头中的任何内容,您必须确保 OAuth 令牌未过期,并且在目的地按预期工作。

OAuth 令牌可能非常长。PubSub+ 事件代理不对 HTTP 头字段的大小施加任何限制,除了 HTTP 头字段必须适合整体消息大小限制(在大多数情况下,保证消息约为 30MB)。此外,尽管 HTTP 允许将头字段值拆分为多行,但我们建议每个 HTTP 头字段使用一行。

在网关模式下,PubSub+ 事件代理将重复的 HTTP 头字段传递给远程服务器。如果 REST 客户端发送多个(非基本)授权头,它们都将通过事件代理不变地传递;远程服务器预计会优雅地处理这些重复的头。