Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft ServiceBus接收错误的代理邮件_C#_Asp.net Mvc_Message Queue_Servicebus_Azureservicebus - Fatal编程技术网

C# Microsoft ServiceBus接收错误的代理邮件

C# Microsoft ServiceBus接收错误的代理邮件,c#,asp.net-mvc,message-queue,servicebus,azureservicebus,C#,Asp.net Mvc,Message Queue,Servicebus,Azureservicebus,我有一个javascript日志实用程序,它将请求批量发送到我的服务器,然后服务器将请求转发到队列客户端(Microsoft.ServiceBus.Messaging.QueueClient)。我希望将它们以异步方式批量发送到ServiceBus,并且仍然按照它们放入我发送的批中的顺序处理它们。SendBatchAsync的文档显示该方法用于“批量”处理。这让我觉得我可以向它发送一批请求,并将它们作为单个单元进行处理(即:按顺序)。尽管如此,这些消息的处理似乎出现了问题。我正在使用OnMessa

我有一个javascript日志实用程序,它将请求批量发送到我的服务器,然后服务器将请求转发到队列客户端(
Microsoft.ServiceBus.Messaging.QueueClient
)。我希望将它们以异步方式批量发送到ServiceBus,并且仍然按照它们放入我发送的批中的顺序处理它们。
SendBatchAsync
的文档显示该方法用于“批量”处理。这让我觉得我可以向它发送一批请求,并将它们作为单个单元进行处理(即:按顺序)。尽管如此,这些消息的处理似乎出现了问题。我正在使用
OnMessage
接收消息;我不确定这是否是一个限制或我遗漏了什么

我知道,与其他异步请求相比,异步并不保证顺序,但这是一个单独的请求。我不想在响应javascript客户端之前等待响应,因为我只是想发送它们,但我仍然需要确保它们保持有序,因为它们是连续事件

以下是我将它们发送到队列的方式:

MyQueueClient.SendBatchAsync(MyListOfBrokerMessages);
然后我处理它们:

        ServiceBus.TrackerClient.OnMessage((m) =>
        {
            try
            {
                ProcessMessage(m);
            }
我不明白批处理的意义,如果它不是作为一个批处理,而不是发出一个请求。必须有某种方法发送批次并使其处理有序

编辑:
我尝试使用
Send
而不是
SendBatchAsync
,并将
MaxConcurrentCalls
设置为1,但消息仍然不正常。

您可以在此处使用会话

  • 为批处理中的所有消息设置相同的
    会话id
  • 接收方,
    AcceptMessageSession()
    将为您提供一个会话
  • 在会话上调用receive(
    ReceiveBatch
    )。此会话将仅为您提供该批中的所有消息

  • 你可以在这里使用会话

  • 为批处理中的所有消息设置相同的
    会话id
  • 接收方,
    AcceptMessageSession()
    将为您提供一个会话
  • 在会话上调用receive(
    ReceiveBatch
    )。此会话将仅为您提供该批中的所有消息
  • 取自

    会话ID:如果消息具有
    Microsoft.ServiceBus.Messaging.BrokeredMessage.SessionId
    属性集,然后是服务总线 使用
    SessionId
    属性作为分区键。这样,所有属于 同一会话由同一消息代理处理。这使得服务总线能够 保证消息顺序以及会话状态的一致性

    对于使用
    SessionId
    AcceptSessionReceiver

    的编码样本,从

    会话ID:如果消息具有
    Microsoft.ServiceBus.Messaging.BrokeredMessage.SessionId
    属性集,然后是服务总线 使用
    SessionId
    属性作为分区键。这样,所有属于 同一会话由同一消息代理处理。这使得服务总线能够 保证消息顺序以及会话状态的一致性


    对于使用
    SessionId
    AcceptSessionReceiver

    的编码示例,我们将处理此问题并返回给您:)。谢谢我们将继续玩这个游戏,然后返回给您:)。谢谢