我是NServicebus新手,在文档中很难找到答案。
我正在尝试接收一条以简单JSON格式发布到Amazon的消息,如下所示:
"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
发布于 2022-07-20 21:36:30
您想要的是本地发送,实际上是记录在案。您必须使您的消息符合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"}
}
);https://stackoverflow.com/questions/73055704
复制相似问题