<div dir="ltr">Hello everyone<br><br>I'm using RabbitMQ over <a href="https://github.com/videlalvaro/RabbitMqBundle">https://github.com/videlalvaro/RabbitMqBundle</a> within the Symfony2 PHP framework, which in turn uses <a href="https://github.com/videlalvaro/php-amqplib">https://github.com/videlalvaro/php-amqplib</a> of course.<br>
<br>I have imports to run that do a lot of traffic for about 3 hours per day and the rest of the day do nothing. RabbitMQ is used to parallelize the imports (raw data dumped in, processed data is written into storage).<br>
<br>The goal is to have 5 consumers start and in case one dies, automatically restarted, but always only 5 of them running at the same time. They all run the same queue and exchange, though that could be different in the future.<br>
<br>I was thinking of using a cronjob that checks every 5 minutes if something is in the queue (still looking how to see that properly). If there is, it checks if consumers are running and enough of them, and if not start them since there are some needed. I'd use the idle timeout feature of the bundle to shut down the consumers again if there is nothing to do anymore.<br>
<br>We use capifony to deploy our application. Capifony deploys to a folder like /dir/release/1/ and /dir/release/2/ then sets a symlink from /dir/current/ to the actual release directory 1 or 2. So the cronjob idea works well as it would switch to the current deployed version if I point it to the consumer in the "current" directory. Now I look for a bit a more in depth way to do this, as I want the workers of the old version stopped when I deploy. With the cronjob they would start on their own in the right version of course. The setup runs on a Linux box, so anything I can use on there would be highly helpful.<br>
<br>To make everything a bit more interesting, I need a sort of locking system. The queue is one, but multiple producers can fill it up. Then I have to wait until all the parts in the queue are finished before I can start a second set of import tasks (that relies on data from the first set). My current approach was to just monitor the queue and wait for it to empty. Once the system sees it empty (not 100% sure how to see that yet with the present tools) it would start the next batch of imports.<br>
<br>This setup I described is not how it has to be, but just my current path
 of thinking on how to do it. I'd appreciate alternatives on how to do 
it. Any pointers and posts that could help me with one or multiple of these topics are much appreciated.<br><br>Greetings,<br>Christian Riesen<br></div>