2011/1/25 Bill Moseley <span dir="ltr">&lt;<a href="mailto:moseley@hank.org">moseley@hank.org</a>&gt;</span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div>I do think it makes sense to use the dotted notation, and then use topic queues as that makes for very flexible routing options.  I was wondering if anyone had worked out some &quot;best practices&quot; over time that would be useful as we start to add more tasks.</div>

</blockquote><div><br></div><div>1+ year and several apps later I see the following pattern developing on my team:</div><div><br></div><div>1. Exchanges are declared by producers.</div><div>2. Queues are declared and bound by consumers.</div>

<div>3. In vast majority of cases, consumers are &quot;smart&quot; and producers are very dumb: they just put messages in well-known places. Consumers</div><div>    are &quot;smart&quot; in a sense that they almost always keep some persistent state (in Redis, for example), while producers are just monitored in case they crash.</div>

<div>4. Exchanges are named using the following pattern $prefix.$applications_group.$app.$environment. For example, <a href="http://megacorp.mail_delivery.shaper.qa">megacorp.mail_delivery.shaper.qa</a> or megacorp.search.online_indexer.production. It works well with multiple installations and if you want to route some data to your customers/partners/archive.</div>

<div><br></div><div>Also, it becomes increasingly obvious that many exchanges and bindings would be unnecessary if we begin to use default exchange more.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">



<div>BTW -- in that case can I configure binding for three queues:  *.qa.rotate_image. *.production.rotate_image, and then a third for all except &quot;qa&quot; a and &quot;production&quot;?</div></blockquote><div><br></div>

<div>&quot;Except&quot; case is not handled by AMQP very well (not in 0.9.1 I am most familiar with, anyway). Maybe *.other.rotate_image would be good enough?</div><div> </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div></div><div>Finally, I&#39;m still a bit confused when to create new exchanges (assuming all the same type).  Just trying to get some basic guidelines.  Is there any overhead with using more exchanges vs. just more bindings on the same exchange?  Is is common to use separate exchanges for grouping consumers (i.e. an exchange for report queues and another exchange for image manipulation queues)?</div>

</blockquote></div><br><br clear="all">Unless you have thousands of them on a small box, it probably does not make much difference. For support cases, dealing with apps that use 150 exchanges may be significantly more difficult than if they were using just 3, though.<div>

<br></div><div>Hope this helps.<br>-- <br>MK<br>
</div>