user1157751
user1157751

Reputation: 2457

Amazon Message Queue Service (SQS) sending and confirmation

Scenario:

A elastic beanstalk environment has a few web servers which sends a request to another worker environment for user sign up, etc.

Problem:

When one of the worker machines have finished the task, I also want it to send a confirmation to the web server.

It seems that SQS does not have "confirmation" message.

When we offload a job to send a email, but I also want to let the web server to know that send email was successful.

One solution I could do is implement another queue that the web server polls, however, many servers can poll on the same queue, and the confirmation for Server 1, can be recieved by Server 2, and we would need to wait for a timeout for the message, but then Server 3 might intercept the message. It could wait a while for Server 1 to get a confirmation.

Upvotes: 1

Views: 2694

Answers (1)

Charles Engelke
Charles Engelke

Reputation: 5649

The way your worker machines "confirm" they processed a message is by deleting it from the queue. The lifecycle of a queue message is:

  1. Web server sends a message with a request.
  2. Worker receives the message.
  3. Worker processes the message successfully.
  4. Worker deletes the message.

A message being deleted is the confirmation that it was processed successfully.

If the worker does not delete the message in step 4 then the message will reappear in the queue after a specified timeout, and the next worker to check for messages will get it and process it.

If you are concerned that a message might be impossible to process and keep reappearing in the queue forever, you can set up a "dead letter" queue. After a message has been received a specified number of times but never deleted, the message is transferred to the dead letter queue, where you can have a process for dealing with these unusual situations.

Amazon's Simple Queue Service Developer Guide has a good, clear explanation of this lifecycle and how you can be sure that every message is processed or moved to a dead letter queue for special handling.

Upvotes: 3

Related Questions