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

我有两个问题没有找到解决办法

  • azure服务总线队列中是否有任何内置方式,我只能从会话处理程序中的一个会话(对于该会话ID)接收消息

  • 另外,是否有任何方法可以仅从该会话的死信队列接收消息


  • 我可以在代码中以编程方式完成这项工作,但我不想在代码中编写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”