我们可以按消息属性过滤来自 Amazon SQS 队列的消息吗?

Raj*_*jat 6 c# amazon-sqs amazon-web-services

现在我已经尝试根据消息属性名称=“类”过滤消息。正如你在下面的代码中看到的

//Specify attribute list
        List<string> AttributesList = new List<string>();
        AttributesList.Add("Class");
        receiveMessageRequest.MessageAttributeNames = AttributesList;
        receiveMessageRequest.QueueUrl = urlSQS;
        receiveMessageRequest.MaxNumberOfMessages = 10;
        ReceiveMessageResponse receiveMessageResponse = objClient.ReceiveMessage(receiveMessageRequest);
Run Code Online (Sandbox Code Playgroud)

但消息并未根据提供的 MessageAttributeName = "class" 进行过滤。

Ami*_*ena 12

请注意有关 AWS 上的消息传递服务的这一点

SQS:不支持过滤(拾取消息时)

SNS:支持基于属性的过滤:订阅者可以设置应用于传入消息的订阅属性(订阅过滤策略),并且只有相关消息才能发送给订阅者。

EventBridge:Amazon EventBridge 支持使用事件模式进行声明式筛选。通过事件模式内容过滤,您可以编写仅在非常特定的条件下触发的复杂规则。例如,您可能需要一个规则,仅当事件字段位于特定数字范围内、事件来自特定 IP 地址或仅当事件 JSON 中不存在特定字段时才会触发。

请参阅我的文章,了解 AWS 上主要消息传递框架之间的详细差异。

https://www.linkedin.com/pulse/mastering-art-decoupling-application-architecture-aws-amit-meena/

在此输入图像描述


Mic*_*bot 9

receiveMessageRequest.MessageAttributeNames = AttributesList;
Run Code Online (Sandbox Code Playgroud)

这会告诉 SQS 您希望它随消息返回哪些消息属性(如果消息中存在 )。它不是消息过滤器。如果属性不存在,则什么都不会发生。

但是你的困惑似乎可以理解——为什么 API 甚至具有这个功能实际上并不明显,尽管它可能是 SQS 只支持比现在更小的消息时的保留,或者它可能是为了避免花费任何时间解析您最终将丢弃的响应中的信息。我几乎总是只是要求All