有没有一种方法可以在Azure服务总线中迭代会话



是否有方法在Azure服务总线中获取可用会话列表或带有消息的会话列表?

正如评论中所提到的,在Azure Service Bus中无法做到这一点,它不能像数据库一样用于此类查询。

我同意其他答案&评论说SB不应该被用作数据库,我找到了另一种实现它的方法,但要回答这个问题

使用C#sdk,我们可以通过重复调用AcceptNextSessionAsync来实现这一点,直到遇到ServiceTimeout异常(实际上是锁定所有可用会话(。

注意:此程序应该是主题/队列的唯一订阅者。

是的,我知道这很晚了,但有一种方法可以用C#遗留SDK做到这一点。

MessagingFactory messagingFactory = MessagingFactory.CreateFromConnectionString(<ConnectionString>);
QueueClient queueClient = messagingFactory.CreateQueueClient(<QueuePath>, ReceiveMode.PeekLock);
var sessions = client.GetMessageSessions(); // This gets the available sessions

但是,使用最新的SDK,这是不可能的。一种解决方法可以是使用循环存储会话id的列表,并在重复时停止。

ServiceBusClient client = new ServiceBusClient(<ConnectionString>);
List<string> messageIdList = new List<string>();
while (true)
{
try
{
ServiceBusSessionReceiver receiver = await client.AcceptNextSessionAsync(<QueueName>);
if (messageIdList.Contains(receiver.SessionId))
break;
messageIdList.Add(receiver.SessionId);
}
catch
{
break; 
}
}

正如你在自己的回答中提到的,这可能对一个消费者(在这种情况下是你(有效。当我们接受已经处理的会话时,我们会在某一点上停止,这意味着该会话的锁已过期并返回给我们。在这种情况下,具有较大锁定持续时间的队列可能很有用。请注意,这是一个变通方法。

最新更新