kubernetes CEL + Dapr -如何在YAML文件中访问ServiceBusMessage的属性作为过滤器

ykejflvf  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(111)

我一直在尝试使用Dapr将发送到ServiceBusTopic的消息路由到API端点,但似乎找不到正确的CommonExpressionLanguage语法。
例如,如果我的消息是这样的:

{
  "key_for_filtering": "filter_value",
  "key_one": "value_one",
  "key_two": "value_two",
}

我的YAML文件看起来像这样:

apiVersion: dapr.io/v2alpha1
kind: Subscription
metadata:
  name: foo-bar-topic-subscription
spec:
  metadata:
    rawPayload: "true"
  pubsubname: servicebus-topic-pubsub
  topic: foo-sbt
  routes:
    rules:
    - match: key_for_filtering== 1
      path: /api/v1/upsert-account-settings
    - match: key_for_filtering== 2
      path: /api/v1/update-cosmos-transactions
    - match: key_for_filtering== 4
      path: /api/v1/update-external-credentials
scopes:
- foo-baz-scope

我希望根据key_for_filtering键路由请求,我必须使用什么才能正确地将我的消息作为请求路由?
根据Kubernetes关于CommonExpressionLanguage的文档,我尝试使用self关键字,但它不起作用,我一直在尝试找到正确的语法,但似乎无法正确。
我也尝试过使用self.metadata并将值作为元数据传递,但无法找到这种方式的解决方案。
selfself.metadata的语法正确吗?

axkjgtzd

axkjgtzd1#

看看YAML,也许你需要检查配置。如果'key_for_filtering'应该包含字符串,那么它应该将其与字符串值进行比较,以确保数据类型匹配。
match:event ['key_for_filtering'] == 'filter_value1' path:/API/v1/upsert-account-settings
match:event ['key_for_filtering'] == 'filter_value2' path:/API/v1/update-cosmos-transactions
match:event ['key_for_filtering'] == 'filter_value3' path:/API/v1/update-external-credentials
这里,“event”是发送到ServiceBusTopic的消息,请确保“filter_value1”、“filter_value2”和“filter_value3”上的值与“key_for_filtering”的字符串值匹配。
[1][2]您可以在这里找到更多的信息。
[1][https://docs.dapr.io/](https://docs.dapr.io/)
[2][https://github.com/google/cel-spec](https://github.com/google/cel-spec)

相关问题