Azure.Messaging.EventHubs 与 WindowsAzure.ServiceBus 生成的消息有区别吗?
Is there a difference in the messages produced by Azure.Messaging.EventHubs vs WindowsAzure.ServiceBus?
我有一个生产者将消息写入 Azure 事件中心,一个消费者从事件中心读取消息。我将生产者升级到 .Net 核心,并在此过程中从使用 WindowsAzure.ServiceBus
包切换到 Azure.Messaging.EventHubs
以将消息写入事件中心。
来自旧生产者的事件仍在处理中,没有问题。但是,当消费者收到来自新生产者的任何消息时,我发现事件处理器在处理我的事件之前抛出异常。
Unable to cast object of type 'System.Collections.Generic.List`1[System.Diagnostics.Activity]' to type 'System.Collections.Generic.IEnumerable`1[System.Diagnostics.Activity]'
此消息不会显示在 Azure 的日志输出中,但会显示在 Application Insights 中。 当我在本地机器上 运行 时没有抛出异常。
此问题已在官方 Azure Functions EventHub 存储库中reported as a bug。在评论中,用户提到该问题是在 4.1.0 版本中引入的,并恢复到 4.0.1 修复了该问题。
我恢复到 4.0.1,它停止抛出异常,但是旧消息和新消息之间仍然存在差异。我正在使用 Microsoft.Azure.Functions.Extensions
进行依赖注入。每当我收到一批完全旧的消息时,都没有问题。但是,当我收到包含新消息的批处理时,依赖项注入范围没有配置服务。
如果我在本地运行项目,就没有问题。只有当我部署到 Azure Functions 环境时,我才会遇到这些问题。
到目前为止,我有:
- 以调试模式而不是发布模式部署
- 创建了一个新的 Azure Function App 并进行了全新部署
- 将发布配置从 'Framework Dependent' 更改为 'Self Contained'
- 将发布者更新为使用
Microsoft.Azure.EventHubs
,以便发布者和消费者使用相同的包
我试图思考我的本地环境和 Azure Functions 环境之间可能有什么不同,以便我看到行为上的差异。
本地:
- dotnet SDK 3.1.301
- dotnet 运行时间 3.1.7
蔚蓝:
- dotnet SDK 3.1.302
- dotnet 运行时间 3.1.6
根据楼主的评论分享答案:
将消费者还原为 Microsoft.Azure.WebJobs.Extensions.EventHubs 4.0.1
并将发布配置文件更改为 <SelfContained>false</SelfContained>
已解决问题。
我们也遇到了同样的问题
我们在代码中使用事件中心和应用洞察 dll 将数据发送到事件中心。
在接收方,我们有 azure 函数,它由具有应用洞察力的事件中心消息触发。
通常我们的 System.Diagnostics.DiagnosticSource dll 版本是 (4.5.0),它依赖于事件中心 dll。
但我们需要添加 System.Diagnostics.DiagnosticSource dll 版本 5.0.0 .
added screnshot of the dll version
在发送方和接收方添加 DiagnosticSource dll 版本 5.0.0 的问题已为我们解决并且工作正常
我有一个生产者将消息写入 Azure 事件中心,一个消费者从事件中心读取消息。我将生产者升级到 .Net 核心,并在此过程中从使用 WindowsAzure.ServiceBus
包切换到 Azure.Messaging.EventHubs
以将消息写入事件中心。
来自旧生产者的事件仍在处理中,没有问题。但是,当消费者收到来自新生产者的任何消息时,我发现事件处理器在处理我的事件之前抛出异常。
Unable to cast object of type 'System.Collections.Generic.List`1[System.Diagnostics.Activity]' to type 'System.Collections.Generic.IEnumerable`1[System.Diagnostics.Activity]'
此消息不会显示在 Azure 的日志输出中,但会显示在 Application Insights 中。 当我在本地机器上 运行 时没有抛出异常。
此问题已在官方 Azure Functions EventHub 存储库中reported as a bug。在评论中,用户提到该问题是在 4.1.0 版本中引入的,并恢复到 4.0.1 修复了该问题。
我恢复到 4.0.1,它停止抛出异常,但是旧消息和新消息之间仍然存在差异。我正在使用 Microsoft.Azure.Functions.Extensions
进行依赖注入。每当我收到一批完全旧的消息时,都没有问题。但是,当我收到包含新消息的批处理时,依赖项注入范围没有配置服务。
如果我在本地运行项目,就没有问题。只有当我部署到 Azure Functions 环境时,我才会遇到这些问题。
到目前为止,我有:
- 以调试模式而不是发布模式部署
- 创建了一个新的 Azure Function App 并进行了全新部署
- 将发布配置从 'Framework Dependent' 更改为 'Self Contained'
- 将发布者更新为使用
Microsoft.Azure.EventHubs
,以便发布者和消费者使用相同的包
我试图思考我的本地环境和 Azure Functions 环境之间可能有什么不同,以便我看到行为上的差异。
本地:
- dotnet SDK 3.1.301
- dotnet 运行时间 3.1.7
蔚蓝:
- dotnet SDK 3.1.302
- dotnet 运行时间 3.1.6
根据楼主的评论分享答案:
将消费者还原为 Microsoft.Azure.WebJobs.Extensions.EventHubs 4.0.1
并将发布配置文件更改为 <SelfContained>false</SelfContained>
已解决问题。
我们也遇到了同样的问题
我们在代码中使用事件中心和应用洞察 dll 将数据发送到事件中心。
在接收方,我们有 azure 函数,它由具有应用洞察力的事件中心消息触发。
通常我们的 System.Diagnostics.DiagnosticSource dll 版本是 (4.5.0),它依赖于事件中心 dll。
但我们需要添加 System.Diagnostics.DiagnosticSource dll 版本 5.0.0 .
added screnshot of the dll version
在发送方和接收方添加 DiagnosticSource dll 版本 5.0.0 的问题已为我们解决并且工作正常