0

我在多个后端复制了一个 API。我没有任何可以区分后端的条件。我尝试使用动态端点并更改消息中介流: https ://apim.docs.wso2.com/en/latest/deploy-and-publish/deploy-on-gateway/api-gateway/message-mediation/chang -the-default-mediation-flow-of-api-requests/ 但是,请求之间的唯一区别是后端服务器的 IP 地址:

https://{uri.var.host}/resource

我正在考虑每次创建 API 并更改端点地址,但此解决方案可能很复杂,因为我将在 wso2 api 管理器中多次复制相同的 API(大约 100 次)。还有其他适合我的用例的解决方案吗?

4

1 回答 1

0

我们可以利用Dynamic Endpoints来实现您的要求。但是,要求客户端应用程序需要发送参数或标头来过滤和构建中介序列中的 BE 服务器 URL,以在 API 管理器中路由请求。

如果客户端应用程序可以在调用 API 时发送一个指定唯一(服务器)名称或任何其他值的标头,我们可以使用该键来过滤(或执行 switch case 操作)并在中介序列中构造 BE 服务器 URL,并将它们路由到相应的 BE 服务。有关更多信息,请参阅以下文档。

一个示例中介序列将如下所示(客户端应用程序将发送一个名为 as 的标头X-ServerName

<sequence xmlns="http://ws.apache.org/ns/synapse" name="dynamic-endpoint-seq">
    
    <!-- extract the name from the header -->
    <property name="server_name" expression="$trp:X-ServerName" />

    <!-- switch case for all applicable names -->
    <switch source="$ctx:server_name">
        <case regex="server-one">
            <property name="service_ep" value="http://server-one-ip/resource"/>
        </case>
        <case regex="server-two">
            <property name="service_ep" value="http://server-two-ip/resource"/>
        </case>
        <default>
            <property name="service_ep" value="http://server-default-ip/resource"/>
        </default>
    </switch>

    <header name="To" expression="get-property('service_ep')"/>
</sequence>
于 2021-06-15T15:40:43.710 回答