我正在使用Azure Relay,混合连接处理程序测试Azure Event Grid。它不适合我。
我可以看到发布到Azure Event Grid的消息。到现在为止还挺好。
我已经设置了对事件网格主题的订阅,并且我已将其配置为将事件发送到指定为具有混合连接端点的Azure中继的处理程序。
使用Hybrid Connection处理程序查看订阅的指标,我看到以下telemetri:
...但是我看不到Delivery Succeeded事件???
此外,连接到Azure Relay的混合连接侦听器(只是一个简单的控制台应用程序)不会收到任何内容。我已经通过直接向Relay发送一些测试消息来测试听众,并且工作正常。
逻辑上的结论是,发布到事件网格的事件可能不会传递给中继混合连接处理程序。但为什么?没有那么多参数,所以我不确定我做错了什么。配置它似乎很简单。
我开始相信事件网格/混合连接方案当前无法正常工作。毕竟它在preview,所以这可以解释它。
我知道这里没什么可去的,但我希望其他人可能会有这方面的经验?
问题仍然存在。问题似乎与从事件网格订阅传递到混合连接的json的格式化有关。
更新
我终于有时间仔细研究一下。
我设置了Event Grid Tester,每次事件网格收到一条消息,我都会在日志中看到这个错误:
HybridConnection: Message processing failed - Unable to cast object of type 'Newtonsoft.Json.Linq.JValue' to type 'Newtonsoft.Json.Linq.JObject'.
我仍然无法解决此问题,因为我无法控制消息。该消息由Azure Logic App生成,并使用Event Grid连接器发送到Event Grid。 Azure Logic Apps中的事件网格连接器处于预览状态,因此可以解释我所看到的挑战。
答案 0 :(得分:0)
我已使用Azure Relay在本地成功测试了Event Grid订阅者并将其记录为here。它基于Microsoft使用客户端的WCF变体提供和实现的示例,而不是.NET Standard version。
答案 1 :(得分:0)
您可以使用http POST请求将事件网格消息模拟到HybridConnection url:
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"
}
}
请注意,打开HybridConnection后,可以从 Azure事件网格测试器日志面板复制授权标头的sasToken。
另一种选择是通过以下代码生成它:
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;