azo*_*zog 7 c# amazon-sqs amazon-web-services
我有一个创建SQS消息并将它们放在SQS队列上的进程,以及另一个读取这些消息并根据正文内容和消息属性执行某些逻辑的进程.
我可以使用正文和属性在SQS队列上成功创建消息,但是在阅读消息属性时我遇到了问题!
我确信我的消息创建过程是正确的,我可以在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);
Run Code Online (Sandbox Code Playgroud)
创建了上述工作和具有属性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;
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,我得到了消息的正文,但属性是空的!我直接使用SQS队列手动创建消息时遇到同样的问题.我想不通为什么?任何帮助都会很棒.非常感谢,
azo*_*zog 20
好的,所以我想出了这个.在调用拉取消息之前,需要将属性名称指定为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;
Run Code Online (Sandbox Code Playgroud)
以上对我有用.希望它对某人有用......
要检索消息的所有属性而不指定每个属性,可以在属性列表中放置"*"或"All".像这样:
//Specify attribute list
List<string> AttributesList = new List<string>();
AttributesList.Add("*");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4642 次 |
| 最近记录: |