I choose to create two separate projects to allow for the greatest flexibility in implementing client or server software.<div><br></div><div>Net::AMQP is a OO representation of the protocol. It uses the XML spec to dynamically create new classes in a Net::AMQP::Protocol:: namespace. The chief purpose of this is to (de)serialize the wire-level encoding of AMQP frames and provide convenient OO representation of the frames.</div>
<div><br></div><div>POE::Component::Client::AMQP is an asynchronous client module which establishes the TCP connection to the server and uses Net::AMQP for it's (de)serialization of the frames. It has to know some of the basics of the protocol, such as the connection grammar Start/StartOk, Tune/TuneOk, etc (though, now that I think of it, it's possible this could be moved to Net::AMQP as well). It uses the data in Net::AMQP to automatically handle synchronous methods and their expected responses and content header building. Ultimately POE::Component::Client::AMQP offers simply a channel for sending Net::AMQP packets and handling their responses, allowing you to write complex clients without worrying about the details of connecting and the protocol.</div>
<div><br></div><div>POE is a reactor pattern (<a href="http://en.wikipedia.org/wiki/Reactor_pattern" target="_blank">http://en.wikipedia.org/wiki/Reactor_pattern</a>) for Perl. It is similar to Twisted for Python and EventMachine for Ruby. Some people aren't fond of programming with the reactor pattern, as it's more difficult to track what's happening at any given moment, and one can't usually write linear code. For this reason, it's likely that another Perl client will be instituted (lenz is working on Net::AMQP::Simple) that will probably use IO::Socket directly.</div>
<div><br></div><div>Eric<br>
<br><div class="gmail_quote">On Wed, Jul 15, 2009 at 2:41 AM, Alexis Richardson <span dir="ltr"><<a href="mailto:alexis.richardson@gmail.com" target="_blank">alexis.richardson@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Eric<br>
<br>
Thanks for this. I'm not familiar with Perl so please can you explain<br>
how the two projects relate to each other? Should they always be used<br>
together?<br>
<font color="#888888"><br>
alexis<br>
</font><div><div></div><div><br>
<br>
On Sat, Jul 11, 2009 at 12:06 AM, Eric Waters<<a href="mailto:ewaters@gmail.com" target="_blank">ewaters@gmail.com</a>> wrote:<br>
> I'll avoid talking about something that's not specific to<br>
> RabbitMQ in this forum in the<br>
> future, but wanted to mention this as a follow up to a post earlier this week.<br>
> I now have functioning code released for Net::AMQP and POE::Component::Client::AMQP. Tested it against RabbitMQ 1.6.0. Get it from <a href="http://github.com/ewaters" target="_blank">http://github.com/ewaters</a>. You'll need to clone both repositories<br>
> to run the example pingpong.pl program (idea copied from ruby-amqp).<br>
> To try it out, clone both projects into the same directory, cd into<br>
> poe-component-client-amqp, and run:<br>
> DEBUG=0 perl -Ilib -I../net-amqp/lib examples/pingpong.pl<br>
> ../net-amqp/spec/amqp0-8.xml<br>
> If you'd like to see the full protocol debug, change DEBUG=1.<br>
> The perl modules are fully documented in POD. If anyone is interested, I'd<br>
> love for collaboration on the project. Drop me a line with your github<br>
> username and I'll add you as a github collaborator.<br>
> Sorry for the interruption. Back to your regularly scheduled RabbitMQ<br>
> programming. :)<br>
> Eric<br>
</div></div><div><div></div><div>> _______________________________________________<br>
> rabbitmq-discuss mailing list<br>
> <a href="mailto:rabbitmq-discuss@lists.rabbitmq.com" target="_blank">rabbitmq-discuss@lists.rabbitmq.com</a><br>
> <a href="http://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss" target="_blank">http://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss</a><br>
><br>
><br>
</div></div></blockquote></div><br></div>