Можем ли мы отфильтровать сообщения из очереди Amazon SQS по атрибутам сообщений? - PullRequest
0 голосов
/ 17 мая 2018

На данный момент я попытался отфильтровать сообщения на основе атрибута сообщения Name = "Class".Как видно из приведенного ниже кода,

//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);

Но сообщения не фильтруются на основе предоставленного MessageAttributeName = "class".

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Зависит от того, как сообщение попадает в очередь. Если вы отправляете сообщение через SNS, тогда вы можете фильтровать сообщения; https://docs.aws.amazon.com/sns/latest/dg/message-filtering.html

Никакого другого механизма фильтрации сейчас не существует.

Надеюсь, это поможет!

0 голосов
/ 16 января 2019

В соответствии с методом AWS SDK мы можем использовать следующий код для выполнения фильтра.

 ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest("QUEUE URL" );        
    receiveMessageRequest.setMaxNumberOfMessages(Integer.valueOf(1));
private static AmazonSQS sqs;   
List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("Attribute Name")).getMessages();

Если вы хотите, чтобы все сообщение было использовано, используйте указанный код

    ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest("QUEUE URL" );        
    receiveMessageRequest.setMaxNumberOfMessages(Integer.valueOf(1));
private static AmazonSQS sqs;   
List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("All")).getMessages();
0 голосов
/ 17 мая 2018
receiveMessageRequest.MessageAttributeNames = AttributesList;

Это сообщает SQS, какие атрибуты сообщения вы хотите, чтобы он возвратил, с сообщением , если они присутствуют в сообщении .Это не фильтр сообщений.Если атрибуты отсутствуют, ничего не происходит.

Но ваша путаница кажется понятной - на самом деле неясно, почему API имеет такую ​​функциональность, хотя это может быть пережитком, когда SQS поддерживает только сообщения меньшего размера, чемэто происходит сегодня, или это может быть так, что вы можете не тратить время на анализ информации из ответа, который вы в конечном итоге отбросите.Я почти всегда просто прошу All.

...