我有一个相当简单的功能,它将消息发送到azure servicebus队列。
public async Task<string> SendMessagesToQueue(string serviceBusConnectionString, int message, string queueName)
{
try
{
QueueClient queueClient = new QueueClient(serviceBusConnectionString, queueName, ReceiveMode.PeekLock);
// Create a new brokered message to send to the queue
var brokeredMessage = new Message($"Message {message}");
// Send the message to the queue
await queueClient.SendAsync(brokeredMessage);
await queueClient.CloseAsync();
// Delay by 10 milliseconds so that the console can keep up
await Task.Delay(10);
return brokeredMessage.MessageId;
}
catch (Exception ex)
{
return ex.ToString();
throw;
}
}
这样可以正常工作并将消息放入队列中。但是,brokeredMessage.MessageId始终为null。
是否有正确/更好的方法来检索邮件ID?
答案 0 :(得分:2)
MessageId是代理消息的属性,可用于在消息接收期间标识队列中的消息。除非队列启用了requireduplicateDetection属性(否则可能导致丢失),MessageId对于队列中的消息不必唯一。消息。 因此,如果您发送不带messageId的消息,它将自动生成,类似于序列号。
答案 1 :(得分:1)
我猜因为MessageId
是用户定义的值。您可以自由生成并分配它。 BrokeredMessage.MessageId Property
答案 2 :(得分:1)
MessageId是一个可以使用Message类中的public setMessageId函数设置的属性。
在最新版本的Java客户端中,即使您未设置消息,也会在收到消息时返回消息ID。如果在发送消息之前进行设置,则在接收消息时将获得与消息Id相同的值。
答案 3 :(得分:0)
MessageId是代理消息的属性。代理消息具有两个主要属性:系统属性和自定义属性。而MessageId是自定义属性之一。您可以在提交消息期间设置MessageId,也可以对其进行编辑并重新提交到另一个队列/主题。它没有任何特定格式。它可以是字符串,guid,整数。同样,MessageId不必是唯一的,而SequenceNumber是队列中消息唯一的。
您可以使用WindowsAzure.ServiceBus或Microsoft.Azure.ServiceBus库执行消息传递操作。 WindowsAzure.ServiceBus不支持.Net Core应用程序,但Microsoft.Azure.ServiceBus可支持