NServiceBus调用SetMessageId为何实际设置的是CorrelationId?
解决NServiceBus发送Azure Service Bus消息时MessageId设置异常的问题
当使用NServiceBus的IMessageSession.Send()发送消息到Azure Service Bus Queue时,直接调用sendOptions.SetMessageId()会导致设置的值被当作CorrelationId,而MessageId是自动生成的GUID——这是因为NServiceBus默认会自动管理MessageId。
要正确设置自定义MessageId,需先禁用NServiceBus的自动MessageId生成功能,再设置自定义ID:
var sendOptions = new SendOptions(); // 禁用NServiceBus自动生成MessageId的行为 sendOptions.SuppressMessageIdGeneration(); // 设置自定义的MessageId sendOptions.SetMessageId(message.MessageId); await MessageSession.Send(command, sendOptions, cancellationToken);
原因说明
NServiceBus默认会自动生成唯一GUID作为MessageId,此时调用SetMessageId()传入的值会被框架当作CorrelationId使用。通过SuppressMessageIdGeneration()关闭自动生成逻辑后,自定义ID才会被正确映射到Azure Service Bus消息的MessageId字段。
内容的提问来源于stack exchange,提问作者serge_portima
相关产品推荐
相关产品推荐

