C# Azure.Messaging.EventHubs与WindowsAzure.ServiceBus生成的消息是否存在差异?

C# Azure.Messaging.EventHubs与WindowsAzure.ServiceBus生成的消息是否存在差异?,c#,azure,azure-functions,azure-eventhub,C#,Azure,Azure Functions,Azure Eventhub,我有一个生产者将消息写入Azure事件中心,一个消费者从事件中心读取消息。我将producer升级到.Net core,在此过程中,我从使用WindowsAzure.ServiceBus包切换到Azure.Messaging.EventHubs将消息写入事件中心 来自旧制作人的事件仍在处理中,没有问题。但是,当使用者收到来自新生产者的任何消息时,我发现事件处理器在处理我的事件之前抛出了一个异常 无法将类型为“System.Collections.Generic.List`1[System.Dia

我有一个生产者将消息写入Azure事件中心,一个消费者从事件中心读取消息。我将producer升级到.Net core,在此过程中,我从使用
WindowsAzure.ServiceBus
包切换到
Azure.Messaging.EventHubs
将消息写入事件中心

来自旧制作人的事件仍在处理中,没有问题。但是,当使用者收到来自新生产者的任何消息时,我发现事件处理器在处理我的事件之前抛出了一个异常

无法将类型为“System.Collections.Generic.List`1[System.Diagnostics.Activity]”的对象强制转换为类型为“System.Collections.Generic.IEnumerable`1[System.Diagnostics.Activity]”

此消息不会显示在Azure中的日志输出中,但会显示在Application Insights中在本地计算机上运行时不会引发异常。

此问题已发布在官方Azure功能EventHub repo上。在评论中,用户提到该问题是在版本4.1.0中引入的,恢复到4.0.1修复了该问题

我恢复到4.0.1,它停止了抛出异常,但旧消息和新消息之间仍然存在差异。我正在使用
Microsoft.Azure.Functions.Extensions
进行依赖注入。每当我收到一批完全旧的消息时,都没有问题。但是,当我收到包含新消息的批时,依赖项注入作用域没有配置任何服务

如果我在本地运行该项目,就没有问题。只有当我部署到Azure功能环境时,我才会遇到这些问题

到目前为止,我已经:

  • 以调试模式而不是发布模式部署
  • 创建了新的Azure Function应用程序并部署了新的
  • 将发布配置从“依赖框架”更改为“自包含”
  • 已将发布服务器更新为使用Microsoft.Azure.EventHubs,以便发布服务器和消费者使用相同的软件包
我试图思考我的本地环境和Azure功能环境之间的不同之处,以便我看到行为上的差异

本地

  • dotnet sdk 3.1.301
  • dotnet运行时3.1.7
Azure

  • dotnet sdk 3.1.302
  • dotnet运行时3.1.6

根据原始海报的评论分享答案:


将消费者恢复为
Microsoft.Azure.WebJobs.Extensions.EventHubs 4.0.1
并将发布配置文件更改为
false
解决了问题。

这非常有趣。您是否能够在控制台应用程序中重现此功能?功能应用程序只是增加了另一层复杂性。如果两个包之间存在互操作问题,那么它也应该在控制台应用程序中重现。您是否可以在ProcessEvents方法的第一行添加日志,以缩小函数是否能够使用消息或在该行的某些逻辑中跳过。还要确保日志确实在函数中工作。在内部,Azure函数使用
Microsoft.Azure.EventHubs
库进行集成。
Azure.Messaging.EventHubs
库与
Microsoft.Azure.EventHubs
兼容,支持跨这些库双向发送和接收,并且已经过验证。我同意Serkant和Krishnendu提出的建议。此外,我想看看发布事件的代码,以便更好地理解端到端场景。@SerkantKaraca我无法在控制台应用程序中重现它。函数应用程序在本地工作,所以我不认为这是包之间的互操作问题,我认为它更特定于Azure函数environment@KrishnenduGhosh-MSFT I在每个批处理的开始添加了一个日志,可以确认日志确实有效。我将使用者更新为不包含任何业务逻辑,它只输出分区键(即发送事件的设备的id)。没有反序列化,没有解析,只是查看分区键。当我这样做时,.Net核心生产者的消息仍然丢失。这确实解决了问题,但它没有回答最初的问题,即为什么来自
WindowsAzure.ServiceBus
的消息与来自
Azure.Messaging.EventHubs