跳到主要内容

微服务流量管理示例

以下部分提供了一个示例,说明如何使用 Microgateway 通过 Solace CLI 配置基本的微服务流量管理。在示例中,创建了两个队列并绑定到一个 REST 交付点(RDP),以提供对单个远程微服务实例的 POST 请求的优先处理。

  • 第 1 步:启用 REST 网关模式
  • 第 2 步:创建适当的队列
  • 第 3 步:配置队列以尊重 TTL
  • 第 4 步:向每个队列添加主题订阅
  • 第 5 步:启用队列
  • 第 6 步:创建 REST 交付点
  • 第 7 步:创建队列绑定
  • 第 8 步:创建 REST 消费者
  • 第 9 步:指定远程微服务目的地
  • 第 10 步:启用 REST 消费者
  • 第 11 步:启用 REST 交付点
  • 第 12 步:验证所有连接都已启动

开始之前

以下部分提供的示例假设 Solace PubSub+ 事件代理上已配置了以下参数:

  • 进入和出去的 REST 连接的系统级参数。
  • 消息 VPN 的进入 REST 服务,包括专用的 REST 监听端口和加密方法。

第 1 步:启用 REST 网关模式

在事件代理可以充当 Microgateway 之前,您必须在要用于服务的消息 VPN 上启用网关模式。在本示例中,使用现有的消息 VPN 启用 Microgateway 部署。示例中省略了设置身份验证或使用 ACL 控制客户端对特定 URI 和 HTTP 方法的访问所需的步骤。有关更多信息,请参阅配置客户端身份验证和 ACL 配置。

img

solace(configure)# message-vpn microgateway
solace(configure/message-vpn)# service rest
solace(configure/message-vpn/service/rest)# mode gateway
solace(configure/message-vpn/service/rest)# exit
solace(configure/message-vpn/service)# exit
solace(configure/message-vpn)# exit

第 2 步:创建适当的队列

一旦在消息 VPN 上启用网关模式,事件代理将进入请求的 HTTP 方法和路径编码为内部传输的消息主题。此过程使事件代理能够将请求传递到特定队列。您可以使用此功能按方法或路径负载均衡请求,设置优先处理,并向服务添加窃听应用程序。

在本示例中,创建了两个队列(队列 A 和队列 B),以启用对 POST 请求的优先处理。

img

solace(configure)# message-spool message-vpn microgateway
solace(configure/message-spool)# create queue A
solace(configure/message-spool/queue)# exit
solace(configure/message-spool)# create queue B

第 3 步:配置队列以尊重 TTL

为防止浪费消息交换并停止陈旧消息在每个队列上持续存在,Solace 建议您配置 Microgateway 部署中使用的队列以尊重消息的生存时间(TTL)过期值。

当您为窃听应用程序配置队列时,请确保忽略此配置,以便所有消息持续存在并可供收集。

在本示例中,两个队列都配置为尊重 TTL。

solace(configure/message-spool/queue)# respect-ttl
solace(configure/message-spool/queue)# exit
solace(configure/message-spool)# queue A
solace(configure/message-spool/queue)# respect-ttl

第 4 步:向每个队列添加主题订阅

主题订阅为队列提供了从 REST 客户端接收进入请求所需的信息。您可以使用主题订阅将请求路由到特定队列以进行优先处理,或将关联队列的请求路由到特定微服务实例。此外,如果您想向服务添加窃听应用程序,可以为窃听应用程序添加匹配的主题订阅(请参阅窃听应用程序示例)。

在本示例中,向服务中的每个队列添加主题订阅,以对 POST 请求进行优先处理。在队列 A 上,添加了一个订阅以吸引所有 POST 请求。在队列 B 上,添加了订阅以吸引所有其他请求方法。尽管每个队列都平等服务,但为 POST 请求添加一个单独的专用队列可确保这些请求获得更快的处理,特别是在过载期间。

img

solace(configure/message-spool/queue)# subscription topic POST/>
solace(configure/message-spool/queue)# exit
solace(configure/message-spool)# queue B
solace(configure/message-spool/queue)# subscription topic GET/>
solace(configure/message-spool/queue)# subscription topic DELETE/>
solace(configure/message-spool/queue)# subscription topic PATCH/>
solace(configure/message-spool/queue)# subscription topic HEAD/>
solace(configure/message-spool/queue)# subscription topic OPTIONS/>
solace(configure/message-spool/queue)# subscription topic PUT/>

第 5 步:启用队列

在服务中的任何队列可以处理请求之前,您必须启用它们。

solace(configure/message-spool/queue)# no shutdown
solace(configure/message-spool/queue)# exit
solace(configure/message-spool)# queue A
solace(configure/message-spool/queue)# no shutdown
solace(configure/message-spool/queue)# exit
solace(configure/message-spool)# exit

第 6 步:创建 REST 交付点

RDP 促进消息向 REST 消费者的传递。有关此过程的更多信息,请参阅 Solace PubSub+ 事件代理配置对象。

在本示例中,创建了一个 RDP 以提供与相应 REST 消费者的连接。

img

solace(configure)# message-vpn microgateway
solace(configure/message-vpn)# rest
solace(configure/message-vpn/rest)# create rest-delivery-point RDP

第 7 步:创建队列绑定

每个 RDP 必须绑定到一个或多个队列,以使请求能够从 REST 客户端流向远程微服务。当您为 Microgateway 部署创建队列绑定时,您可以可选地配置事件代理如何处理出站 URI 中的权威值。有关更多信息,请参阅管理 REST 交付点。

在本示例中,每个队列都绑定到一个单独的 RDP。

img

solace(.../message-vpn/rest/rest-delivery-point)# create queue-binding A
solace(...est/rest-delivery-point/queue-binding)# exit
solace(.../message-vpn/rest/rest-delivery-point)# create queue-binding B
solace(...est/rest-delivery-point/queue-binding)# exit

第 8 步:创建 REST 消费者

REST 消费者提供 RDP 与远程微服务之间的连接。更具体地说,您必须为每个要接收请求的 DNS 名称配置至少一个 REST 消费者。有关更多信息,请参阅 REST 消费者。

RDP 可以包含多个 REST 消费者,然而,在本示例中,RDP 包含一个单独的 REST 消费者,用于最终传递到一个微服务实例。

img

solace(.../message-vpn/rest/rest-delivery-point)# create rest-consumer RC

第 9 步:指定远程微服务目的地

为确保请求能够传递到适当的远程微服务,您必须配置每个目的地的主机名,并可选地配置端口。

在本示例中,配置了一个单独的微服务实例作为进入请求的远程目的地。

solace(...est/rest-delivery-point/rest-consumer)# remote
solace(...t-delivery-point/rest-consumer/remote)# host www.mystore.com/storefront/
solace(...t-delivery-point/rest-consumer/remote)# port 8080
solace(...t-delivery-point/rest-consumer/remote)# exit

第 10 步:启用 REST 消费者

在每个 REST 消费者可以处理请求之前,您必须启用它。

solace(...est/rest-delivery-point/rest-consumer)# no shutdown
solace(...est/rest-delivery-point/rest-consumer)# exit

第 11 步:启用 REST 交付点

在每个 RDP 可以处理请求之前,您必须启用它。

solace(.../message-vpn/rest/rest-delivery-point)# no shutdown

第 12 步:验证所有连接都已启动

在服务中的所有组件配置并启用后,您可以发出以下 show 命令,以验证每个组件是否运行正常并已准备好处理请求(Admin StateOperational State 标志均为 Up)。

请注意,直到与相应的远程目的地建立连接后,服务中的所有组件才会收到 Operational StateUp

solace(.../message-vpn/rest/rest-delivery-point/)# show message-vpn <message-vpn> rest rest-delivery-point <rdp-name>
solace(.../message-vpn/rest/rest-delivery-point/)# show message-vpn <message-vpn> rest rest-consumer <rest-consumer-name>
solace(configure/message-vpn/rest/rest-delivery-point/)# show message-vpn <message-vpn> rest rest-delivery-point <rdp-name> queue-binding *