c# - 基于 session 的接收器的 Azure ServiceBus 管理

标签 c# azure azureservicebus azure-servicebus-topics azure-servicebus-subscriptions

在 Azure 服务总线中使用基于 session 的实体时,管理接收器的最佳实践是什么?我通过池管理我的非基于 session 的实体,类似于推荐的 here 。基于 session 的实体是否可以以相同的方式进行池化,也许与 SessionId 一起池化?
目前,我正在为每个调用创建/处置接收器实例,尽管 session 预计会连续接收多条消息。

接收器实例化如下:

await using var receiver = await _serviceBusFactory.ServiceBusClient.AcceptSessionAsync(topicName, subscriptionName, sessionId);

最佳答案

您可以像非 session 示例一样将它们集中起来,但有一个警告:如果 session 接收者失去 session 锁定,您将需要再次接受 session ,因此您可能希望尝试对 session 进行某些操作接收者在将其交还给调用者之前确保锁仍然有效,例如调用 GetSessionStateAsync。如果锁丢失,你会得到一个异常。我认为这可能可以通过在 SessionReceiver 上引入一个属性来指示它是否实际上已死亡来改进。

或者,您可以使用 ServiceBusSessionProcessor 来为您处理 session 接收器管理。

关于c# - 基于 session 的接收器的 Azure ServiceBus 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72457902/

相关文章:

c# - Linq to Twitter - token 无效/过期

azure - 您似乎正在尝试从广播中引用 SparkContext

azure - 在锁定的生产环境中查看 Azure Webjob 应用程序设置

c# - 即使 AllowDBNull = False,数据集也允许 Null 值?

c# - 什么是(以及为什么我需要)=> 在 C# 中创建任务时

c# - 基于非零的多维数组

c# - 拆分一批要发送到 Azure 服务总线的消息

azure - 如何在Azure Databricks集群上登录SSH

.net - [DocumentDB .NET SDK]替换时ReadDocumentAsync和CreateDocumentQuery有什么区别

Azure 函数(服务总线触发器)System.OperationCanceledException