Azure ServiceBus:从队列的一个会话ID中接收所有消息



我有2个问题,我未能找到任何解决方案。

  1. 在Azure Service Bus队列中是否有任何内置的方式,我只能在会话处理程序中的一个会话(对于该会话(中接收消息。

  2. 也有什么办法我只能仅从该会话的无生气队列中收到消息。

我可以在我的代码中以编程方式执行此操作,但是如果我的代码中其他逻辑,我不想编写。

在Azure Service Bus队列中是否有任何内置的方式,我只能从我的会话处理程序中的一个会话(该会话ID(接收消息。

正如肖恩·费尔德曼(Sean Feldman(提到的队列客户端的。

如果要使用Queue​Client.​Accept​Message​Session​Async(sessionID)接收队列消息,我们需要使用RequiresSession true

创建
var description = new QueueDescription(QueueName) 
{ 
    RequiresSession = true 
}; 
namespaceManager.CreateQueue(description);

也有什么方法我只能仅从该会话中的无生语队列中接收消息。

基于我的测试,我们无法通过以下代码从死语队列中获取死语队列消息

   var dlqName= QueueClient.FormatDeadLetterPath(queueName);
   var dlqClient = QueueClient.CreateFromConnectionString(connectionstring, dfQueue);
   var gid = Guid.NewGuid().ToString();
   var messageSession = client.AcceptMessageSession(gid);
   var receiveMessage = messageSession.Receive();

无法为子标题创建消息。TrackingID:06A39820-7BF6-412D-AB31-80EF5C174A12_G20_B31,SystemTracker:Tomsbservice:tomsbservice:Queueue:queuename | $ deadletterterqueue

我的解决方法是,我们可以获取死去的队列消息并提交给队列或其他普通队列。

我认为您无法为服务总线队列做到这一点。您可以通过服务总线主题和过滤的订阅来归结一些类似的东西。

因此,您将消息发送到一个主题,然后您必须创建一个与此类似的每个会话ID订阅:

var filter = new SqlFilter(@"sys.SessionId = "SESSIONID"");
namespaceManager.CreateSubscription("YOUR_TOPIC", "SESSIONID_SUBSCRIPTION", filter);

然后只接收此订阅的消息:

var client = new SubscriptionClient("...", "YOUR_TOPIC", "SESSIONID_SUBSCRIPTION");
var message = client.Receive();

消息会话功能是专门为此设计的。

Queue​Client.​Accept​Message​Session​Async(sessionID)允许为正常队列实现这一目标。至于DLQ-不确定是否有效。

最新更新