Сетка событий 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;