当将消息发布到服务总线主题时,如果我遍历3条消息:
{ A、B、C}
每次都在等待的SendAsync(),我希望它们按顺序发布到主题中:
{ A、B、C}
public async Task PublishMessage(string topic, string json, string sessionId)
{
var topicClient = new TopicClient(_connectionString, topic);
var busMessage = new Message(Encoding.UTF8.GetBytes(json));
busMessage.SessionId = sessionId;
await topicClient.SendAsync(busMessage);
}许多员工表示,情况并不一定如此,而且在某些情况下(例如,大型消息),这种发布顺序不能得到保证。我自己从来没有遇到过这样的情况,ASB难道不保证发布命令,即使像上面那样等待消息的发送?
本文https://devblogs.microsoft.com/premier-developer/ordering-messages-in-azure-service-bus/使用了以下引语:
虽然Azure服务总线允许FIFO方法(先进先出),但我们不能保证按我们希望它们被处理的顺序输入消息。
这一切对我来说都很令人费解,因为我认为SendAsync()只有在消息被添加到主题之后才会返回一个成功的结果。我们真的需要围绕这一点写一些复杂的层次来管理它吗?
请注意,这只涉及到发布的消息,我们使用SessionIds来处理消费。
发布于 2022-02-04 12:55:04
即使您等待一条消息被发送,然后只发送下一条消息,FIFO也无法保证。这是由于可能的原因太多。为了确保您得到有保证的排序,您需要使用启用session的队列或订阅。
https://stackoverflow.com/questions/70986334
复制相似问题