JDev
JDev

Reputation: 1832

AWS SQS: Is it a way SQS call me consumer, every time a messages is pushed

Is there a way by which AWS SQS can call my REST API? Basically as soon as message is pushed to AWS SQS, I want to hear it and perform required action. I can schedule a listener that can pull messages every second but that won't be an optimizes solution and also the queue might be empty(sometimes).

Thanks In Advance!!

Upvotes: 2

Views: 2937

Answers (2)

E.J. Brennan
E.J. Brennan

Reputation: 46879

Sounds like you would be much better of using SNS instead of SQS. What you are trying to get SQS to do, SNS was designed to do:

You can use Amazon SNS to send notification messages to one or more HTTP or HTTPS endpoints. When you subscribe an endpoint to a topic, you can publish a notification to the topic and Amazon SNS sends an HTTP POST request delivering the contents of the notification to the subscribed endpoint. When you subscribe the endpoint, you select whether Amazon SNS uses HTTP or HTTPS to send the POST request to the endpoint. If you use HTTPS, then you can take advantage of the support in Amazon SNS for the following...

http://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.html

Upvotes: 2

Anthony Neace
Anthony Neace

Reputation: 26031

A couple of thoughts:

Use Publisher/Subscriber

Look into using a publisher-subscriber model with SNS/SQS, so that you publish a message to SNS and subscribe to it via SQS. If you absolutely need to handle a message as soon as it is published, you can publish to SNS and set another consumer in addition to your SQS subscription (such as a lambda subscriber that calls your Rest API?) to process it instead.

SQS Long Polling

Regarding SQS, it sounds like you would benefit from long polling. From the documentation:

Long polling helps reduce your cost of using Amazon SQS by reducing the number of empty responses (when there are no messages available to return in reply to a ReceiveMessage request sent to an Amazon SQS queue) and eliminating false empty responses (when messages are available in the queue but aren't included in the response):

  • Long polling reduces the number of empty responses by allowing Amazon SQS to wait until a message is available in the queue before sending a response. Unless the connection times out, the response to the ReceiveMessage request contains at least one of the available messages, up to the maximum number of messages specified in the ReceiveMessage action.
  • Long polling eliminates false empty responses by querying all (rather than a limited number) of the servers.
  • Long polling returns messages as soon any message becomes available.

Also from the documentation, to enable long polling programmatically, use the following for any of these SQS actions:

Reference:

Upvotes: 3

Related Questions