Сетка событий Azure для Azure Relay, гибридное подключение

Я тестирую Сетка событий Azure с помощью Azure Relay, обработчика гибридного подключения. Это не работает для меня.

Я вижу сообщения, публикуемые в сетке событий Azure. Все идет нормально.

Я настроил подписку на раздел "Сетка событий" и настроил ее на отправку событий обработчику, указанному как ретранслятор Azure с конечной точкой гибридного подключения.

Глядя на показатели для подписки с помощью обработчика гибридного подключения, я вижу следующую телеметрию:

  • Соответствующие события
  • Сбой доставки
  • Истекшие события

… Но я не вижу события "Успешная доставка"???

Кроме того, прослушиватель гибридного подключения (просто простое консольное приложение), подключенный к ретранслятору Azure, ничего не получает. Я протестировал слушателя, отправив несколько тестовых сообщений непосредственно в Relay, и это прекрасно работает.

Логический вывод заключается в том, что события, опубликованные в таблице событий, не доставляются, вероятно, обработчику ретрансляции гибридного соединения. Но почему? Там не так много параметров, поэтому я не уверен, что я делаю неправильно. Кажется, довольно просто настроить это.

Я начинаю верить, что сценарий Event Grid / Hybrid Connection в настоящее время не работает. Это в предварительном просмотре в конце концов, так что это может объяснить.

Я знаю, что здесь не так много всего, но я надеялся, что другие могут иметь некоторый опыт в этом?

Проблема все еще остается. Похоже, что проблемы связаны с форматированием json, передаваемого из подписки на сетку событий в Hybrid Connect.

Обновить

Наконец-то у меня появилось время более внимательно изучить это.

Я установил Event Grid Tester, и каждый раз, когда Event Grid получает сообщение, я вижу эту ошибку в журнале:

HybridConnection: Message processing failed - Unable to cast object of type 'Newtonsoft.Json.Linq.JValue' to type 'Newtonsoft.Json.Linq.JObject'.

Я до сих пор не могу это исправить, так как я не контролирую сообщение. Сообщение генерируется приложением логики Azure и отправляется в сетку событий с помощью соединителя сетки событий. Соединитель сетки событий в приложениях логики Azure находится в предварительном просмотре, что может объяснить проблемы, с которыми я сталкиваюсь.

2 ответа

Я успешно протестировал подписчика Event Grid локально с помощью Azure Relay и задокументировал его здесь. Он основан на примере, который Microsoft предоставляет и реализует с использованием варианта клиента WCF, а не версии .NET Standard.

Вы можете смоделировать сообщение таблицы событий на URL-адрес HybridConnection, используя запрос HTTP POST:

POST https://{myNamespace}.servicebus.windows.net/{myHybridConnectionName}

headers:
    content-type: application/json
    x-ms-version: 2015-07-08
    Aeg-Event-Type: Notification
    Authorization: SharedAccessSignature sr=xxx&sig=xxxx&se=11111111&skn=xxxxx

body:
    {
       "id": "123456",
       "eventTime": "2018-07-22T13:09:07.5164877Z",
       "eventType": "recordInserted",
       "dataVersion": "1.0",
       "metadataVersion": "1",
       "subject": "/myapp/vehicles/motorcycles",
       "data": {
          "make": "Ducati",
          "model": "Monster"
       }
   }

Обратите внимание, что заголовок sasToken для авторизации можно скопировать из панели журнала Azure Event Grid Tester, когда HybridConnection был открыт.

другой вариант - сгенерировать его с помощью следующего кода:

using Microsoft.Azure.Relay;
// ... 
var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("hybridconnectionPolicyName", "hybridconnectionPrimaryKey");
var token = tokenProvider.GetTokenAsync("https://{myNamespace}.servicebus.windows.net/{myHybridConnectionName}", TimeSpan.FromDays(10)).Result.TokenString;
Другие вопросы по тегам