gpt4 book ai didi

c# - 无法在 C# 中访问 Amazon SQS 消息属性

转载 作者:太空狗 更新时间:2023-10-29 19:50:05 25 4
gpt4 key购买 nike

我有一个创建 SQS 消息并将它们放入 SQS 队列的进程,以及另一个读取这些消息并根据消息正文内容和属性执行特定逻辑的进程。

我可以成功地在 SQS 队列上创建一 strip 有正文和属性的消息,但是在读回消息属性时出现问题!

我确定我的消息创建过程是正确的,我可以在 AWS SQS 控制台中看到队列的属性。我只是不明白为什么我不能读回这些属性。

我创建消息的代码:

IAmazonSQS sqs = AWSClientFactory.CreateAmazonSQSClient();
var sendMessageRequest = new SendMessageRequest();
sendMessageRequest.QueueUrl = "myURL";
Dictionary<string, MessageAttributeValue> MessageAttributes = new Dictionary<string, MessageAttributeValue>();
MessageAttributeValue messageTypeAttribute = new MessageAttributeValue();
messageTypeAttribute.DataType = "String";
messageTypeAttribute.StringValue = "HIGH";
MessageAttributes.Add("MESSAGEPRIORITY", messageTypeAttribute);

sendMessageRequest.MessageAttributes = MessageAttributes;
sendMessageRequest.MessageBody = "Thats the message body";

sqs.SendMessage(sendMessageRequest);

上述工作正常,并且创建了一条具有属性 MESSAGEPRIORITY=HIGH 的消息(我可以在 SQS 控制台中看到该消息和属性)。

当读回消息时(我跳过了显示队列 URL 等的部分代码):

IAmazonSQS sqs = AWSClientFactory.CreateAmazonSQSClient();
ReceiveMessageResponse receiveMessage = new ReceiveMessageResponse();
ReceiveMessageRequest request = new ReceiveMessageRequest();
request.QueueUrl = "myURL";
receiveMessage = sqs.ReceiveMessage(request);
string messageBody = receiveMessage.Messages[0].Body;
Dictionary<string, MessageAttributeValue> messageAttributes = receiveMessage.Messages[0].MessageAttributes;

通过上面的代码,我得到了消息的正文,但是属性是空的!我在直接使用 SQS 队列手动创建消息时遇到了同样的问题。我不明白为什么?任何帮助都会很棒。非常感谢,

最佳答案

好吧,我想出了这个。在调用以拉取消息之前,需要将属性名称指定为 ReceiveMessageRequest 对象的属性。

所以,上面的代码需要改成:

IAmazonSQS sqs = AWSClientFactory.CreateAmazonSQSClient();
ReceiveMessageResponse receiveMessage = new ReceiveMessageResponse();
ReceiveMessageRequest request = new ReceiveMessageRequest();

//Specify attribute list
List<string> AttributesList = new List<string>();
AttributesList.Add("MESSAGEPRIORITY");

//Assign list and QueueURL to request
request.MessageAttributeNames = AttributesList;
request.QueueUrl = "myURL";

//Receive the message...
receiveMessage = sqs.ReceiveMessage(request);
//Body...
string messageBody = receiveMessage.Messages[0].Body;
//...and attributes
Dictionary<string, MessageAttributeValue> messageAttributes = receiveMessage.Messages[0].MessageAttributes;

以上对我有用。希望它对某人有用....

关于c# - 无法在 C# 中访问 Amazon SQS 消息属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23564689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com