Azure Servicebus:从队列的一个会话id接收所有消息
我有两个问题没有找到解决办法Azure Servicebus:从队列的一个会话id接收所有消息,azure,azureservicebus,azure-servicebus-queues,Azure,Azureservicebus,Azure Servicebus Queues,我有两个问题没有找到解决办法 azure服务总线队列中是否有任何内置方式,我只能从会话处理程序中的一个会话(对于该会话ID)接收消息 另外,是否有任何方法可以仅从该会话的死信队列接收消息 我可以在代码中以编程方式完成这项工作,但我不想在代码中编写if-else逻辑。我认为您无法在服务总线队列中完成这项工作。您可以使用服务总线主题和筛选订阅来归档类似的内容 因此,您将消息发送到一个主题,然后必须为每个会话ID创建一个订阅,如下所示: var filter=newsqlfilter(@“sys.Se
我可以在代码中以编程方式完成这项工作,但我不想在代码中编写if-else逻辑。我认为您无法在服务总线队列中完成这项工作。您可以使用服务总线主题和筛选订阅来归档类似的内容 因此,您将消息发送到一个主题,然后必须为每个会话ID创建一个订阅,如下所示:
var filter=newsqlfilter(@“sys.SessionId=\“SessionId\”);
CreateSubscription(“您的主题”、“会话ID\u订阅”、过滤器);
然后只接收来自此订阅的消息:
var client=newsubscriptionclient(“…”、“您的主题”、“SESSIONID\u订阅”);
var message=client.Receive();
消息会话功能就是专门为此而设计的
允许在正常队列中实现这一点。
至于DLQ-不确定这是否有效
azure服务总线队列中是否有任何内置方式,我只能从会话处理程序中的一个会话(对于该会话ID)接收消息
正如肖恩·费尔德曼提到的客户接受消息一场异步(sessionID)允许在正常队列中实现这一点
如果要使用队列客户接受消息一场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();
无法为子队列创建MessageSession。TrackingId:06a39820-7bf6-412d-ab31-80ef5c174a12_G20_B31,SystemTracker:tomsbservice:Queue:queuename |$DeadLetterQueue
我的解决方法是,我们可以获取死信队列消息,然后提交到队列或其他正常队列。您的意思是您从某个地方获得了会话ID,现在您希望接收该会话ID的消息吗?那么,使用队列进行密钥查找吗?这个ID是固定的还是随着时间的推移而改变?我正在为我的发件人的每个实例生成会话ID。对于同一发件人,可以发送多个请求。客户端可以为不同类型的请求选择多个发送方实例。现在,在每个发送方中,我只想接收该sessionId的消息以及该sessionId的所有死信消息。DLQ表示“无法为子队列创建MessageSession”