将消息发送到发布/订阅主题

publish-to-dapr 策略指示 API 管理网关向 Dapr 发布/订阅主题发送消息。 策略通过向 http://localhost:3500/v1.0/publish/{{pubsub-name}}/{{topic}} 发出 HTTP POST 请求、替换模板参数并添加策略语句中指定的内容来实现这一点。

策略假设 Dapr 运行时正在网关所在的 pod 中的 sidecar 容器中运行。 Dapr 运行时实现发布/订阅语义。 详细了解 Dapr 与 API 管理的集成

注意

按照策略声明中提供的顺序设置策略的元素和子元素。 详细了解如何设置或编辑 API 管理策略

策略语句

<publish-to-dapr pubsub-name="pubsub-name" topic="topic-name" ignore-error="false|true" response-variable-name="resp-var-name" timeout="in seconds" template="Liquid" content-type="application/json">
    <!-- message content -->
</publish-to-dapr>

属性

属性 说明 需要 默认
pubsub-name 目标 PubSub 组件的名称。 映射到 Dapr 中的 pubsubname 参数。 如果不存在,则 topic 属性值必须采用 pubsub-name/topic-name 形式。 允许使用策略表达式。
主题 主题的名称。 映射到 Dapr 中的 topic 参数。 允许使用策略表达式。 空值
ignore-error 如果设置为 true,则指示策略在收到来自 Dapr 运行时的错误时不触发“on error”部分。 不允许使用策略表达式。 false
response-variable-name 用于存储来自 Dapr 运行时的响应的变量集合项的名称。 不允许使用策略表达式。
timeout 等待 Dapr 运行时做出响应的时间(以秒为单位)。 范围为 1 到 240 秒。 允许使用策略表达式。 5
template 用于转换消息内容的模板引擎。 “Liquid”是唯一支持的值。
content-type 消息内容的类型。 “application/json”是唯一支持的值。

使用情况

使用注意事项

必须在自承载网关中启用 Dapr 支持。

示例

下面的示例演示如何将当前请求的主体发送到“orders”发布/订阅组件的“new”主题。 从 Dapr 运行时接收到的响应存储在 context 对象的“变量”集合的“daprresponse”项中。

例如,如果 Dapr 运行时找不到目标主题,并且响应错误,则会触发“on-error”部分。 从 Dapr 运行时收到的响应被逐字返回给调用方。 否则,返回默认的 200 OK 响应。

“backend”部分为空,请求不会转发到后端。

<policies>
     <inbound>
        <base />
        <publish-to-dapr
           pubsub-name="orders"
               topic="new"
               response-variable-name="dapr-response">
            @(context.Request.Body.As<string>())
        </publish-to-dapr>
    </inbound>
    <backend>
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
        <return-response response-variable-name="pubsub-response" />
    </on-error>
</policies>

后续步骤

有关使用策略的详细信息,请参阅: