C# Microsoft ServiceBus接收错误的代理邮件
我有一个javascript日志实用程序,它将请求批量发送到我的服务器,然后服务器将请求转发到队列客户端(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
Microsoft.ServiceBus.Messaging.QueueClient
)。我希望将它们以异步方式批量发送到ServiceBus,并且仍然按照它们放入我发送的批中的顺序处理它们。SendBatchAsync
的文档显示该方法用于“批量”处理。这让我觉得我可以向它发送一批请求,并将它们作为单个单元进行处理(即:按顺序)。尽管如此,这些消息的处理似乎出现了问题。我正在使用OnMessage
接收消息;我不确定这是否是一个限制或我遗漏了什么
我知道,与其他异步请求相比,异步并不保证顺序,但这是一个单独的请求。我不想在响应javascript客户端之前等待响应,因为我只是想发送它们,但我仍然需要确保它们保持有序,因为它们是连续事件
以下是我将它们发送到队列的方式:
MyQueueClient.SendBatchAsync(MyListOfBrokerMessages);
然后我处理它们:
ServiceBus.TrackerClient.OnMessage((m) =>
{
try
{
ProcessMessage(m);
}
我不明白批处理的意义,如果它不是作为一个批处理,而不是发出一个请求。必须有某种方法发送批次并使其处理有序
编辑:
我尝试使用
Send
而不是SendBatchAsync
,并将MaxConcurrentCalls
设置为1,但消息仍然不正常。您可以在此处使用会话
会话id
AcceptMessageSession()
将为您提供一个会话ReceiveBatch
)。此会话将仅为您提供该批中的所有消息你可以在这里使用会话
会话id
AcceptMessageSession()
将为您提供一个会话ReceiveBatch
)。此会话将仅为您提供该批中的所有消息Microsoft.ServiceBus.Messaging.BrokeredMessage.SessionId
属性集,然后是服务总线
使用SessionId
属性作为分区键。这样,所有属于
同一会话由同一消息代理处理。这使得服务总线能够
保证消息顺序以及会话状态的一致性
对于使用SessionId
和AcceptSessionReceiver
的编码样本,从
会话ID:如果消息具有
Microsoft.ServiceBus.Messaging.BrokeredMessage.SessionId
属性集,然后是服务总线
使用SessionId
属性作为分区键。这样,所有属于
同一会话由同一消息代理处理。这使得服务总线能够
保证消息顺序以及会话状态的一致性
对于使用
SessionId
和AcceptSessionReceiver
的编码示例,我们将处理此问题并返回给您:)。谢谢我们将继续玩这个游戏,然后返回给您:)。谢谢