我有以下设置:
- 活动中心
- 具有单个订阅的服务总线主题,该订阅接受来自该主题的所有消息(对于我的 POC)
- 以上服务总线订阅是在启用会话的情况下设置的
- 将事件从事件中心(输入)移动到服务总线主题(输出)的流分析 (SA) 作业。这是我的 SA 查询:
SELECT *, LOWER(source) as Partner
INTO [sb-output]
FROM [test-input]
- 上述作业还设置了服务总线的分区键。根据https://docs.microsoft.com/en-us/azure/stream-analytics/service-bus-topics-output#custom-metadata-上的文档,在 [sb-output] 的系统属性中使用以下 json输出属性:
{ "PartitionKey" : "Partner" }
我做了什么:
- 将事件发送到没有分区键的事件中心。这是成功的。
{
"specversion": "1.0",
"id": "c8c4faad-9f53-4e43-95ca-c318d673660a",
"type": "CustomerChanged",
"time": "2020-09-09T22:25:40.0148301Z",
"source": "ABCD",
"subject": "system-1",
"datacontenttype": "application/json",
"dataschema": "1.0",
"data": {
"customerNumber": "7879875212123",
"firstName": "John",
"lastName" : "Kennedy"
}
}
- SA 成功地将事件从事件中心移动到服务总线。
- 服务总线订阅成功收到如下消息:
{
"specversion": "1.0",
"id": "c8c4faad-9f53-4e43-95ca-c318d673660a",
"type": "CustomerChanged",
"time": "2020-09-09T23:22:13.3647825Z",
"source": "ABCD",
"subject": "system-1",
"datacontenttype": "application/json",
"dataschema": "1.0",
"data": {
"customerNumber": "7879875212123",
"firstName": "John",
"lastName": "Kennedy"
},
"EventProcessedUtcTime": "2020-09-09T23:22:14.3776603Z",
"PartitionId": 0,
"EventEnqueuedUtcTime": "2020-09-09T23:22:14.3080000Z",
"Partner": "abcd"
}
- 可以看出,属性 Partner 位于消息的末尾。
- 但是,Service Bus Explorer 工具显示 PartitionKey 属性尚未设置为“abcd”,而是设置为其他一些随机字符串。
故障排除:
为了确保我可以使用特定的 PartitionKey 键向服务总线主题发送消息,我编写了一个示例代码,通过显式设置消息的会话 id 属性将消息提交给服务总线主题。服务总线资源管理器向我展示了 SessionId 和 PartitionKey 属性都设置为正确的值。
在 ASA 输出配置中,尝试设置以下系统属性 json。都没有奏效。
{ "SessionId" : "Partner" }
{ "PartitionKey" : "Partner", "SessionId" : "Partner" }
- 在 ASA 输出配置中,尝试设置属性列 (to
Partner
) 以及系统属性列 (to{ "PartitionKey" : "Partner" }
)。那没有用。
问题:
- 我在绕过 PartitionKey 值从我的自定义字段传播到服务总线消息的 ASA 输出配置中做错了什么?
- 还有一个原因是系统属性列不显示我保存后输入的 json 文本吗?