Azure Servicebus messageid始终为null

时间:2017-06-14 19:09:24

标签: azure azureservicebus

我有一个相当简单的功能,它将消息发送到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;
        }
    }

这样可以正常工作并将消息放入队列中。但是,bro​​keredMessage.MessageId始终为null。

是否有正确/更好的方法来检索邮件ID?

4 个答案:

答案 0 :(得分:2)

MessageId是代理消息的属性,可用于在消息接收期间标识队列中的消息。除非队列启用了requireduplicateDetection属性(否则可能导致丢失),MessageId对于队列中的消息不必唯一。消息。 因此,如果您发送不带messageId的消息,它将自动生成,类似于序列号。

答案 1 :(得分:1)

我猜因为MessageId是用户定义的值。您可以自由生成并分配它。 Brokered​Message.​Message​Id 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可支持