Как установить свойство PartitionKey из stream analytics для выходного сообщения на служебную шину?

#azure-stream-analytics #azure-servicebus-topics #azure-servicebus-subscriptions

#azure-stream-analytics #azure-servicebus-темы #azure-служебная шина-подписки

Вопрос:

У меня есть следующая настройка:

  1. Концентратор событий
  2. Раздел Service bus с единой подпиской, которая принимает все сообщения из раздела (для моего POC)
  3. Вышеуказанная подписка на служебную шину настроена с включенными сеансами
  4. Задание Stream analytics (SA), которое перемещает события из концентратора событий (входные данные) в раздел служебной шины (выходные данные). Вот мой запрос SA:
     SELECT *, LOWER(source) as Partner
    INTO [sb-output]
    FROM [test-input]
  
  1. Вышеуказанное задание также устанавливает ключ раздела для служебной шины. Используется следующий json в системных свойствах [sb-output] на основе документации на https://learn.microsoft.com/en-us/azure/stream-analytics/service-bus-topics-output#custom-metadata-properties-for-output :
     { "PartitionKey" : "Partner" }
  

Что я сделал:

  1. Отправлено событие в event hub без ключа раздела. Это было успешно.
 {
    "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. Однако инструмент проводника служебной шины показывает мне, что для свойства PartitionKey установлено значение не «abcd», а какая-то другая случайная строка.

Устранение неполадок:

  1. Чтобы убедиться, что я могу отправить сообщение в раздел служебной шины с определенным ключом PartitionKey, я написал пример кода, который отправляет сообщение в раздел служебной шины, явно установив свойство идентификатора сеанса в сообщении. Проводник служебной шины показал мне, что как для идентификатора сеанса, так и для свойств PartitionKey установлено правильное значение.

  2. В выходной конфигурации ASA попытался установить следующие системные свойства json. Ни то, ни другое не сработало.

{ "SessionId" : "Partner" }

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

  1. В выходной конфигурации ASA попробовал установить оба столбца свойств (на Partner ), а также столбцы системных свойств (на { "PartitionKey" : "Partner" } ). Это не сработало.

Вопрос:

  1. Что я делаю не так с выходной конфигурацией ASA, которая обходит распространение значения PartitionKey из моего пользовательского поля в сообщение служебной шины?
  2. Также есть причина, по которой в столбцах системных свойств не отображается текст json, который я ввел после сохранения?

Комментарии:

1. MS работает над исправлением. До тех пор они предлагали следующую работу: { «PartitionKey»: «Partner», «SessionID»: «Partner», «Label»: «Partner» } в системных свойствах. Я протестировал это, и это работает.

2. Вы хотели бы опубликовать это в качестве ответа, чтобы вы могли пометить этот вопрос как ответ?

Ответ №1:

Предоставление ответа в соответствии с комментарием оригинального плаката:

В настоящее время Microsoft работает над исправлением.

До тех пор вы можете использовать предложенный обходной путь: { "PartitionKey" : "Partner", "SessionId" : "Partner", "Label": "Partner" } в системных свойствах.