Azure 服务总线队列:消息的排序如何工作?
Azure Service Bus Queue: How the ordering of the message work?
public static async Task DoMessage()
{
const int numberOfMessages = 10;
queueClient = new QueueClient(ConnectionString, QueueName);
await SendMessageAsync(numberOfMessages);
await queueClient.CloseAsync();
}
private static async Task SendMessageAsync(int numOfMessages)
{
try
{
for (var i = 0; i < numOfMessages; i++)
{
var messageBody = $"Message {i}";
var message = new Message(Encoding.UTF8.GetBytes(messageBody));
message.SessionId = i.ToString();
await queueClient.SendAsync(message);
}
}
catch (Exception e)
{
}
}
这是我使用会话 ID 将消息发送到服务总线队列的示例代码。
我的问题是如果调用DoMessage 函数2 次:我们分别将其命名为MessageSet1 和MessageSet2。 MessageSet2 是否会由处理消息接收端的接收天蓝色函数接收和处理。
我想按 MessageSet1 然后 MessageSet2 的顺序处理,除非 MessageSet1 完成,否则从不处理 MessageSet2。
您的操作存在一些问题。
首先,Azure Functions 目前不支持会话。您可以跟踪 issue。
其次,您正在创建的会话已关闭。会话应应用于使用相同 SessionId
的一组消息。这意味着您的 for
循环应该将相同的 SessionId
分配给集合中的所有消息。像这样:
private static async Task SendMessageAsync(int numOfMessages, string sessionID)
{
try
{
var tasks = new List<Task>();
for (var i = 0; i < numOfMessages; i++)
{
var messageBody = $"Message {i}";
var message = new Message(Encoding.UTF8.GetBytes(messageBody));
message.SessionId = sessionId;
tasks.Add(queueClient.SendAsync(message));
}
await Task.WhenAll(tasks).ConfigureAwait(false);
}
catch (Exception e)
{
// handle exception
}
}
对于使用 Sessions 的有序消息,请参阅文档 here。
public static async Task DoMessage()
{
const int numberOfMessages = 10;
queueClient = new QueueClient(ConnectionString, QueueName);
await SendMessageAsync(numberOfMessages);
await queueClient.CloseAsync();
}
private static async Task SendMessageAsync(int numOfMessages)
{
try
{
for (var i = 0; i < numOfMessages; i++)
{
var messageBody = $"Message {i}";
var message = new Message(Encoding.UTF8.GetBytes(messageBody));
message.SessionId = i.ToString();
await queueClient.SendAsync(message);
}
}
catch (Exception e)
{
}
}
这是我使用会话 ID 将消息发送到服务总线队列的示例代码。
我的问题是如果调用DoMessage 函数2 次:我们分别将其命名为MessageSet1 和MessageSet2。 MessageSet2 是否会由处理消息接收端的接收天蓝色函数接收和处理。
我想按 MessageSet1 然后 MessageSet2 的顺序处理,除非 MessageSet1 完成,否则从不处理 MessageSet2。
您的操作存在一些问题。
首先,Azure Functions 目前不支持会话。您可以跟踪 issue。
其次,您正在创建的会话已关闭。会话应应用于使用相同 SessionId
的一组消息。这意味着您的 for
循环应该将相同的 SessionId
分配给集合中的所有消息。像这样:
private static async Task SendMessageAsync(int numOfMessages, string sessionID)
{
try
{
var tasks = new List<Task>();
for (var i = 0; i < numOfMessages; i++)
{
var messageBody = $"Message {i}";
var message = new Message(Encoding.UTF8.GetBytes(messageBody));
message.SessionId = sessionId;
tasks.Add(queueClient.SendAsync(message));
}
await Task.WhenAll(tasks).ConfigureAwait(false);
}
catch (Exception e)
{
// handle exception
}
}
对于使用 Sessions 的有序消息,请参阅文档 here。