Question

I've previously used Gearman along with supervisor to manage jobs.

In this case we are using Amazon SQS which I have spent some time trying to get my head around.

I have set up a separate micro instance from our main webserver to use as an Image processing server (purely for testing at the moment, it will be upgraded and become part of a cluster before this implementation goes live)

On this micro instance I have installed PHP and ImageMagick in order to perform the image processing.

I have also written a worker script which receives the messages from Amazon SQS.

All works perfectly, however I need this script to run over and over again in order to continuously check for messages.

I don't like the thought of running a continuous loop so have started to look at other methods with little success.

So my question is what is generally considered the best practice way to do this?

I am worried about memory since PHP wasn't really designed for this, therefore it feels like running the script for a while, then stopping and restarting it might be my best bet.

I have experience using supervisor (to ensure that gearman workers kept running) and am wondering if I could simply use that to continuously execute the simple php script over and over?

My thoughts are as follows:

  • Set up SQS long polling so that the script checks for 20 seconds.
  • Use a while loop with a 20 second sleep to keep this script running for say an hour at a time
  • Have all this run through supervisor. When the hour is up and the loop is complete, allow the script to exit.
  • Supervisor should then automatically restart it

Does this sound viable? Is there a better way? What is generally considered the best practice for receiving SQS messages in PHP?

Thanks in advance

Was it helpful?

Solution

In supervisord you can set autorestart to true to have it run your command over and over again. See: http://supervisord.org/configuration.html#program-x-section-settings

Overall, using an endless while loop is perfectly fine, PHP will free your objects correctly and keep memory in check if written correctly. It can run for years without leaks (if there's a leak, you probably created it yourself, so review your code).

How do I stop a Supervisord process without killing the program it's controlling? might be of interest to you; the OP had a similar setup, with autorestart and wanted to add graceful shutdowns to it.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top