<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Jul 15, 2013 at 1:15 PM, William Henry <span dir="ltr"><<a href="mailto:whenry@redhat.com" target="_blank">whenry@redhat.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-size:12pt;font-family:times new roman,new york,times,serif"><div><br></div><div><br></div><hr><div class="im">
<blockquote style="padding-left:5px;font-size:12pt;font-style:normal;margin-left:5px;font-family:Helvetica,Arial,sans-serif;text-decoration:none;font-weight:normal;border-left:2px solid #1010ff"><div dir="ltr"><br><div class="gmail_extra">
<br><div><br></div><div class="gmail_quote">On Fri, Jul 12, 2013 at 8:09 PM, William Henry <span dir="ltr"><<a href="mailto:whenry@redhat.com" target="_blank">whenry@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="auto"><div><br><div><br></div>Sent from my iPhone</div><div><div><br>On Jul 12, 2013, at 5:27 PM, Doug Hellmann <<a href="mailto:doug.hellmann@dreamhost.com" target="_blank">doug.hellmann@dreamhost.com</a>> wrote:<br>
<div><br></div></div><blockquote><div><div dir="ltr"><br><div class="gmail_extra"><br><div><br></div><div class="gmail_quote">On Fri, Jul 12, 2013 at 5:40 PM, William Henry <span dir="ltr"><<a href="mailto:whenry@redhat.com" target="_blank">whenry@redhat.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div style="font-size:12pt;font-family:'times new roman','new york',times,serif">
<div>Hi all,<br></div><div><br></div><div>I've been reading through the Messaging Wiki and have some comments. Not criticisms, just comments and questions.<br> I have found this to be a very useful document. Thanks.<br>
</div><div><br></div><div>1. "There are multiple backend transport drivers which implement the API semantics using different messaging systems - e.g. RabbitMQ, Qpid, ZeroMQ. While both sides of a connection must use the same transport driver configured in the same way, the API avoids exposing details of transports so that code written using one transport should work with any other transport."<br>
</div><div><br></div><div>The good news for AMQP 1.0 users is that technically "boths sides of the connection" do not have to use same transport driver. In pre-AMQP 1.0 days this was the case. But today interoperability between AMQP 1.0 implementations has been demonstrated.<br>
</div></div></div></blockquote><div><br></div><div>In this case I think we mean the Transport driver from within Oslo. So you could not connect a ZMQ Transport on one end to an AMQP Transport on the other. It will be an implementation detail of the AMQP Transport class to decide whether it supports more than one version of AMQP, or if the different versions are implemented as different Transports.</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div style="font-size:12pt;font-family:'times new roman','new york',times,serif">
<div><br></div><div>2. I notice under the RPC concepts section that you mention Exchanges as a container in which topics are scoped. Is this exchange a pre AMQP 1.0 artifact or just a general term for oslo.messaging that is loosely based on the pre-AMQP 1.0 artifact called an Exchange? i.e. are you assuming that messaging implementations have something called an exchange? Or do you mean that messaging implementations can scope a topic and in oslo we call that scoping an exchange?<br>
</div></div></div></blockquote><div><br></div><div>The latter.</div></div></div></div></div></blockquote><div><br></div></div>Ack. Good. Fits very well into AMQP 1.0 then ;-)<div><div><br><blockquote><div><div dir="ltr"><div class="gmail_extra">
<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div style="font-size:12pt;font-family:'times new roman','new york',times,serif">
<div><br>3. Some messaging nomenclature: The way the wiki describes RPC "<span>Invoke Method on One of Multiple Servers</span>" is more like a queue than a topic. In messaging a queue is something that multiple consumers can attach to and one of them gets and services a message/request. A topic is where 1+ consumers are "connected" and each receives a the message and each can service it as it sees fit. In pre-AMQP 1.0 terms what this seems to describe is a direct exchange. And a direct excahnge can have multiple consumers listening to a queue on that exchange. (Remember that fanout is just a generalization of topic in that all consumers get all fanout messages - there are no sub-topics etc.)<br>
</div><div><br></div><div>In AMQP 1.0 the addressing doesn't care or know about exchanges but it can support this queue type behavior on an address or topic type behavior on an address. <br></div><div><br></div><div>
I know this isn't about AMQP specifically but therefore this is even more important. Topics are pub/sub with multiple consumer/services responding to a single message. Queues are next consumer up gets the next message.<span style="font-family:arial;font-size:small"> </span></div>
</div></div></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div style="font-size:12pt;font-family:'times new roman','new york',times,serif">
<div><br></div><div><br></div><div>(BTW I've seen this kind of confusion also in early versions of MCollective in Puppet.)<br></div><div><br></div><div>It might be better to change some of the references to "topic" to "address". This would solve the problem. i.e. a use case where one of many servers listening on an address services a message/request. And later all of servers listening on an address service a message/request. Addressing also solves the one-to-one as the address is specific to the server (and the others don't have to receive and reject the message).<br>
</div></div></div></blockquote><div><br></div><div>Too many of these terms are overloaded. :-)</div></div></div></div></div></blockquote><div><br></div></div><div>Yep. But topic pup/sub is certainly different to a queue. ;-)</div>
<div><br><blockquote><div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>I'm not sure of the details of how "topic" and "address" are different in AMQP 1.0. The word "address" implies to me that the message sender knows where the message receiver is in some concrete sense. We don't want those semantics in a lot of our use cases. If the "address" is abstract, then it sounds like it works much as a topic does. Maybe you can expand on the differences?</div>
</div></div></div></div></blockquote><div><br></div><div><br></div></div>Nope the address is essentially a namespace. The send knows not where it ends up. Hence in some applications it doesn't even know of its a topic or a queue an it could go to one or many depending.</div>
</div></blockquote><div><br></div><div>OK, that sounds like it would be part of the Transport's handling of a Target (<a href="https://github.com/markmc/oslo.messaging/blob/master/oslo/messaging/target.py" target="_blank">https://github.com/markmc/oslo.messaging/blob/master/oslo/messaging/target.py</a>).</div>
</div></div></div></blockquote></div><div>Thanks Doug. This is interesting. What's the difference between an exchange and a namespace? If exchange is a scope and namespace is essentially a scope, then why have both? <br>
</div></div></div></blockquote><div><br></div><div>The namespace relates to the API implementation inside the receiver. The way it currently works is the receiver subscribes to messages on a topic/exchange pair to have AMQP route messages to it, and then it looks inside the message for further dispatch to an object that knows about that API. That lets the nova API implementation be split up among different objects, for example. I'm not sure why it evolved that way, instead of using separate topics and having the messaging layer do all of the routing. Maybe we should take another look at that part of the new API design.</div>
<div><br></div><div>Doug</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-size:12pt;font-family:times new roman,new york,times,serif">
<div></div><span class="HOEnZb"><font color="#888888"><div><br></div><div>William<br></div></font></span><div class="im"><div><br></div><blockquote style="padding-left:5px;font-size:12pt;font-style:normal;margin-left:5px;font-family:Helvetica,Arial,sans-serif;text-decoration:none;font-weight:normal;border-left:2px solid #1010ff">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>Doug</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="auto"><div><span><span style="color:#888888" color="#888888"><div><br></div><div>William</div></span></span><div><div><br><blockquote><div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br>
</div><div>Thanks,</div><div>Doug</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>
<div style="font-size:12pt;font-family:'times new roman','new york',times,serif"><div><br></div><div>Please feel free to respond and critique my comments/suggestions.<br></div><div><br></div><div>Best,<br>
</div><div>William<br></div><div><br></div><div><br></div></div></div><br>_______________________________________________<br>
OpenStack-dev mailing list<br><a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.org</a><br><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br></blockquote></div><br></div></div></div></blockquote><blockquote><div><span>_______________________________________________</span><br><span>OpenStack-dev mailing list</span><br><span><a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.org</a></span><br>
<span><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a></span><br></div></blockquote></div></div></div></div>
<br>_______________________________________________<br>
OpenStack-dev mailing list<br><a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.org</a><br><a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br></blockquote></div><br></div></div><br>_______________________________________________<br>OpenStack-dev mailing list<br><a href="mailto:OpenStack-dev@lists.openstack.org" target="_blank">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br></blockquote><div><br></div></div></div></div><br>_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br></blockquote></div><br></div></div>