我一直在尝试使用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
并将值作为元数据传递,但无法找到这种方式的解决方案。self
和self.metadata
的语法正确吗?
1条答案
按热度按时间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)