如何从输出消息到服务总线的流分析设置 PartitionKey 属性?

How to set PartitionKey property from stream analytics on the output message to service bus?

我有以下设置:

  1. 事件中心
  2. 具有单个订阅的服务总线主题,该主题接受来自该主题的所有消息(对于我的 POC)
  3. 以上服务总线订阅已设置并启用了会话
  4. 将事件从事件中心(输入)移动到服务总线主题(输出)的流分析 (SA) 作业。这是我的 SA 查询:
    SELECT *, LOWER(source) as Partner
    INTO [sb-output]
    FROM [test-input]
  1. 上述作业还设置了服务总线的分区键。根据 https://docs.microsoft.com/en-us/azure/stream-analytics/service-bus-topics-output#custom-metadata-properties-for-output:
  2. 处的文档,在 [sb-output] 的系统属性中按照 json 使用
    { "PartitionKey" : "Partner" }

我做了什么:

  1. 向事件中心发送了一个没有分区键的事件。这是成功的。
{
    "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"
    }
}
  1. SA 已成功将事件从事件中心移动到服务总线。
  2. 服务总线订阅成功收到消息如下:
    {
        "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"
    }
  1. 可以看出,属性伙伴在消息的末尾。
  2. 但是,Service Bus Explorer 工具显示 PartitionKey 属性 没有设置为“abcd”,而是其他一些随机字符串。

疑难解答:

  1. 为了确保我可以使用特定的 PartitionKey 键向服务总线主题发送消息,我编写了一个示例代码,通过显式设置会话 ID 属性 在消息上。服务总线资源管理器向我展示了 SessionId 和 PartitionKey 属性都设置为正确的值。

  2. 在 ASA 输出配置中,尝试设置以下系统属性 json。都没有用。

{ "SessionId" : "Partner" }

{ "PartitionKey" : "Partner", "SessionId" : "Partner" }

  1. 在 ASA 输出配置中,尝试设置 属性 列(至 Partner)以及系统 属性 列(至 { "PartitionKey" : "Partner" })。那没有用。

问题:

  1. ASA 输出配置绕过 PartitionKey 值从我的自定义字段传播到服务总线消息,我做错了什么?
  2. 系统 属性 列不显示我在保存后输入的 json 文本的原因还有吗?

根据楼主的评论分享答案:

目前,Microsoft 正在修复。

在此之前,您可以使用建议的解决方法:{ "PartitionKey" : "Partner", "SessionId" : "Partner", "Label": "Partner" } 系统属性