On Tue, Jan 4, 2011 at 2:12 PM, andrew chase <span dir="ltr">&lt;<a href="mailto:andrew@glyde.com">andrew@glyde.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Most of your bullet points are outside the realm (IMO) of what a<br>
message system should be concerned with. In particular, it looks like<br>
most of the features you&#39;re after are more in line with what a<br>
background job processing system would handle. Those types of systems<br>
often use messaging under the covers but often also use some type of<br>
persistent data store in addition (or instead of) a messaging system.<br>
I&#39;d suggest taking a look at a couple of these systems to see if they<br>
may be more what you&#39;re after (I know a couple ruby-based ones of the<br>
top of my head like Resque, DelayedJob, etc<br>
<a href="https://github.com/defunkt/resque" target="_blank">https://github.com/defunkt/resque</a>).<br></blockquote><div><br></div><div>Thanks Andrew,</div><div><br></div><div>I spent some time looking at those tonight and came full circle.  Found a post where Resque was used as a replacement for DJ and then in the post&#39;s comments people suggesting RabbitMQ... ;)  I&#39;ll keep reading, though.  I have plenty to learn.</div>

<div><br></div><div>I think our organization has been in the habit of building somewhat monolithic code and are looking for a solution that does everything as we do it now.  I&#39;m concerned we will attempt to build our own if we can&#39;t find a perfect fit, which I suspect is a much harder task to get right than we think.  As for scheduling, we already have a database table with the scheduled items, so maybe we only need a few producers that run from cron.</div>

<div><br></div><div><br></div><div>I had two slightly more RabbitMQ-specific questions that are hopefully more straight forward to answer.  </div><div><br></div><div>When a job is re-queued due to failure to ACK is there anything that indicates to the next consumer that the message has already been delivered to a failed consumer? I need a way to recognize that a message is causing consumers to die and stop the job.</div>

<div><br></div><div>And is it a common pattern for consumers to use RabbitMQ to message back that their work is done?  I was wondering if that&#39;s a good use for x-expires and/or x-message-ttl.</div><div><br></div><div>

Thanks again,</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><div class="h5">On Tue, Jan 4, 2011 at 1:39 PM, Bill Moseley &lt;<a href="mailto:moseley@hank.org">moseley@hank.org</a>&gt; wrote:<br>


&gt; Anyone have time to take a few of these on?<br>
&gt; I know they are not specifically on-topic (and a bit open-ended) but we are<br>
&gt; evaluating messaging solutions (and even discussing writing our own) so it<br>
&gt; would be a huge help to get some feedback.  I&#39;d be happy to provide more<br>
&gt; specifics if needed.<br>
&gt; Thanks,<br>
&gt;<br>
&gt; On Mon, Jan 3, 2011 at 3:13 PM, Bill Moseley &lt;<a href="mailto:moseley@hank.org">moseley@hank.org</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hi,<br>
&gt;&gt; I&#39;m just starting out with RabbitMQ and trying to wrap my head around a<br>
&gt;&gt; few concepts.  I apologize if I ask something that should be obvious or I<br>
&gt;&gt; missed in the docs and faq.  I&#39;m hoping someone can help with a few<br>
&gt;&gt; scenarios, and please point me to further reading as needed.<br>
&gt;&gt; I&#39;m curious about use-cases that are not directly related to RabbitMQ, but<br>
&gt;&gt; how to best use RabbitMQ in an web application&#39;s architecture.  Thes are<br>
&gt;&gt; probably very common situations.<br>
&gt;&gt; 1) Notification of job status and completion:  If the web app produces a<br>
&gt;&gt; request to generate an expensive PDF is there a common approach to detecting<br>
&gt;&gt; when the consumer is completed and the pdf is ready for downloading?  Should<br>
&gt;&gt; I create a single-use return queue with x-expires and/or x-message-ttl on<br>
&gt;&gt; the queue?   In a web app the web user may never come back to pick up the<br>
&gt;&gt; PDF.<br>
&gt;&gt; 2) Job sequencing:  What&#39;s a common approach to multiple step processing<br>
&gt;&gt; that must be done serially?  I.e. queue job &quot;A&quot; and when it&#39;s complete queue<br>
&gt;&gt; job &quot;B&quot;.  Doesn&#39;t really seem like consumer &quot;A&quot; should be responsible for<br>
&gt;&gt; submitting job &quot;B&quot;.  Is it better to create a consumer &quot;AB&quot; that submits &quot;A&quot;<br>
&gt;&gt; and waits for a message that &quot;A&quot; is complete and then submits job &quot;B&quot;?<br>
&gt;&gt; 3) Scheduling: I assume there&#39;s no facility for scheduling jobs to be<br>
&gt;&gt; delivered to consumers at some future time.  Is there a better approach than<br>
&gt;&gt; using cron to check the database for jobs that should be queued based on<br>
&gt;&gt; time?<br>
&gt;&gt; 4) Cancel a request:  We have some situations when a subsequent request<br>
&gt;&gt; should cancel processing of an earlier request.  (Frankly, I think this is a<br>
&gt;&gt; design problem on our end.)<br>
&gt;&gt; 5) Prevent duplicate job requests: In a web environment when things break<br>
&gt;&gt; problems often compound by users reloading requests that caused the problem<br>
&gt;&gt; in the first place.  I&#39;m not sure RabbitMQ would be involved at all in this<br>
&gt;&gt; scenario, but I&#39;m asking just in case. ;)<br>
&gt;&gt; Finally, it&#39;s great that RabbitMQ will send a message again if is is not<br>
&gt;&gt; ACK&#39;d and a consumer closes its connection.  But, is there any kind of max<br>
&gt;&gt; retry count available?  That is, what&#39;s a good approach to prevent an errant<br>
&gt;&gt; job from killing all consumers one-by-one?<br>
&gt;&gt; Thanks,<br>
&gt;&gt; --<br>
&gt;&gt; Bill Moseley<br>
&gt;&gt; <a href="mailto:moseley@hank.org">moseley@hank.org</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Bill Moseley<br>
&gt; <a href="mailto:moseley@hank.org">moseley@hank.org</a><br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; rabbitmq-discuss mailing list<br>
&gt; <a href="mailto:rabbitmq-discuss@lists.rabbitmq.com">rabbitmq-discuss@lists.rabbitmq.com</a><br>
&gt; <a href="https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss" target="_blank">https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss</a><br>
&gt;<br>
&gt;<br>
</blockquote></div><br><br clear="all"><br>-- <br>Bill Moseley<br><a href="mailto:moseley@hank.org" target="_blank">moseley@hank.org</a><br>