NServicebus接收的消息不包含所有NServicebus特定的内容



我是NServicebus的新手,很难在文档中找到答案。

我正在尝试接收一条以简单JSON格式发布到Amazon SQS的消息,如下所示:

"MyMessage": {
"Id": 1,
"Name": "Name",
"Field1": "text",
"Field2": 1,
"Field3": false
}

然而,每当这条消息被发送到队列时,我的NServicebus订户都会说这是一条有毒消息,并没有试图处理它

我意识到这个消息缺少了很多NServicebus的东西,因为当我通过NServicebus发布消息时,它看起来是这样的:

{
"Headers": {
"NServiceBus.MessageId": "a244a014-e331-41e6-b6ca-aed6011af905",
"NServiceBus.MessageIntent": "Publish",
"NServiceBus.ConversationId": "e42f0308-4c51-4787-ade0-aed6011af90f",
"NServiceBus.CorrelationId": "a244a014-e331-41e6-b6ca-aed6011af905",
"NServiceBus.OriginatingMachine": "DESKTOP-1234567",
"NServiceBus.OriginatingEndpoint": "endpoint",
"$.diagnostics.originating.hostid": "da7dce712dfbc0f093aa30eb7f25d2b4",
"NServiceBus.ContentType": "application/json",
"NServiceBus.EnclosedMessageTypes": "Type",
"NServiceBus.Version": "7.7.3",
"NServiceBus.TimeSent": "2022-07-18 17:10:16:400164 Z"
},
"Body": "Base 64 encoded string here",
"S3BodyKey": null
}

问题是我收到的消息不是通过NServicebus发布的,而是以我上面显示的格式发布的。它没有所有的头和一个base64编码的主体。

有没有一种方法可以设置NServicebus来接收和处理这样的消息?或者它不是为了处理这样的事情而建造的?

注意:这是一个.Net 6应用程序

编辑:我发现这篇文章提到NServicebus如何在没有所有头的情况下接收消息,但没有提到如何接收。

https://www.bradjolicoeur.com/Article/nsb-features-message-headers

您想要的被称为Native Send,并且实际上是有文档记录的。您必须使您的消息符合NServiceBus所期望的格式,以便能够让处理程序正确处理它

本机发送函数如下所示:

public static async Task SendMessage(IAmazonSQS sqsClient, string queue, string messageBody, Dictionary<string, string> headers)
{
var bodyBytes = Encoding.UTF8.GetBytes(messageBody);
var base64Body = Convert.ToBase64String(bodyBytes);
var serializedMessage = Newtonsoft.Json.JsonConvert.SerializeObject(new
{
Headers = headers,
Body = base64Body,
});
var queueUrlResponse = await sqsClient.GetQueueUrlAsync(QueueNameHelper.GetSqsQueueName(queue));
await sqsClient.SendMessageAsync(queueUrlResponse.QueueUrl, serializedMessage);
}

要使用它,您需要指定消息类型和其他一些头值:

await SendMessage(
sqsClient: client,
queue: "samples-sqs-nativeintegration",
messageBody: "{Property:'PropertyValue'}",
headers: new Dictionary<string, string>
{
{"NServiceBus.EnclosedMessageTypes", "MessageTypeToSend"},
{"NServiceBus.MessageId", "99C7320B-A645-4C74-95E8-857EAB98F4F9"}
}
);

最新更新