如何从输出消息到服务总线的流分析设置 PartitionKey 属性?
How to set PartitionKey property from stream analytics on the output message to service bus?
我有以下设置:
- 事件中心
- 具有单个订阅的服务总线主题,该主题接受来自该主题的所有消息(对于我的 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-properties-for-output:
处的文档,在 [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"
}
- 可以看出,属性伙伴在消息的末尾。
- 但是,Service Bus Explorer 工具显示 PartitionKey 属性 没有设置为“abcd”,而是其他一些随机字符串。
疑难解答:
为了确保我可以使用特定的 PartitionKey 键向服务总线主题发送消息,我编写了一个示例代码,通过显式设置会话 ID 属性 在消息上。服务总线资源管理器向我展示了 SessionId 和 PartitionKey 属性都设置为正确的值。
在 ASA 输出配置中,尝试设置以下系统属性 json。都没有用。
{ "SessionId" : "Partner" }
{ "PartitionKey" : "Partner", "SessionId" : "Partner" }
- 在 ASA 输出配置中,尝试设置 属性 列(至
Partner
)以及系统 属性 列(至 { "PartitionKey" : "Partner" }
)。那没有用。
问题:
- ASA 输出配置绕过 PartitionKey 值从我的自定义字段传播到服务总线消息,我做错了什么?
- 系统 属性 列不显示我在保存后输入的 json 文本的原因还有吗?
根据楼主的评论分享答案:
目前,Microsoft 正在修复。
在此之前,您可以使用建议的解决方法:{ "PartitionKey" : "Partner", "SessionId" : "Partner", "Label": "Partner" }
在 系统属性 中
我有以下设置:
- 事件中心
- 具有单个订阅的服务总线主题,该主题接受来自该主题的所有消息(对于我的 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-properties-for-output: 处的文档,在 [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"
}
- 可以看出,属性伙伴在消息的末尾。
- 但是,Service Bus Explorer 工具显示 PartitionKey 属性 没有设置为“abcd”,而是其他一些随机字符串。
疑难解答:
为了确保我可以使用特定的 PartitionKey 键向服务总线主题发送消息,我编写了一个示例代码,通过显式设置会话 ID 属性 在消息上。服务总线资源管理器向我展示了 SessionId 和 PartitionKey 属性都设置为正确的值。
在 ASA 输出配置中,尝试设置以下系统属性 json。都没有用。
{ "SessionId" : "Partner" }
{ "PartitionKey" : "Partner", "SessionId" : "Partner" }
- 在 ASA 输出配置中,尝试设置 属性 列(至
Partner
)以及系统 属性 列(至{ "PartitionKey" : "Partner" }
)。那没有用。
问题:
- ASA 输出配置绕过 PartitionKey 值从我的自定义字段传播到服务总线消息,我做错了什么?
- 系统 属性 列不显示我在保存后输入的 json 文本的原因还有吗?
根据楼主的评论分享答案:
目前,Microsoft 正在修复。
在此之前,您可以使用建议的解决方法:{ "PartitionKey" : "Partner", "SessionId" : "Partner", "Label": "Partner" }
在 系统属性 中