当前位置: 首页 > 知识库问答 >
问题:

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

傅志诚
2023-03-14

我有一个进程创建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);
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队列手动创建消息时,我也有同样的问题。我想不通为什么?任何帮助都会很好。非常感谢,

共有1个答案

连坚白
2023-03-14

好吧,我想出了这一招。在调用提取消息之前,需要将属性名称指定为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;

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

 类似资料:
  • 我面临着python selenium的问题,我输入了下面的代码,几分钟前它运行良好,但现在说chrome不可访问请帮助! 后果 编辑 当我尝试这段代码时,它确实起作用,但我不知道为什么它突然起作用。有人能解释一下这段代码吗?

  • 我正在向与它自己的Thread相关联的Handler发送消息。在handleMessage方法中,我尝试使用runOnUiThread使用消息的内容更新UI。如果从handleMessage中获取消息obj参数并将其分配给一个新的最终变量,这很好。但是如果我不使用此赋值并直接在runnable中msg.obj,则obj变量为空,即使在调用runOnUiThread之前检查传递给handleMess

  • 我得到以下错误,我不确定问题是什么 1智能感知:“标准::基本团队” 书cpp 我得到了 书H 我甚至不明白错误告诉了我什么

  • 有趣的是,当我使用https://developer.microsoft.com/en-us/graph/graph-explorer时,我可以获得用户的电子邮件。我已经检查了查询,但似乎没有任何区别。我看到的唯一区别是,在调查AAD-->企业应用程序-->权限时,我可以在Graph Explorer应用程序中看到用户同意权限,但在我的应用程序中看不到。

  • 问题内容: 我正在尝试从Objective-C 访问Swift类的属性。 在另一个视图控制器中,我尝试按以下方式进行访问: 而我得到 在类型’BusinessDetailViewController *’的对象上找不到属性’lat’ 为什么我不能访问此属性?我想念什么? 问题答案: 非Objective-C类型的可选值不会桥接到Objective-C中。也就是说,前三个属性下面 会 是在Objec

  • 问题内容: 我正在尝试在cgo中访问ac struct,但是要这样做 无法确定C.utmpx的名称种类 utmpx是结构 这是执行代码: 在utmpx.h文件中,有 我可以使用_PATH_UTMPX,但在使用UTMPX_FILE时也会收到相同的警告,为什么? 看来我无法访问在.h文件中声明的这些变量,该怎么办? 平台:macOS sirria,go 1.8 问题答案: 我必须定义_GNU_SOUR