Advanced message queue protocol (de)serialization and representation
use Net::AMQP; Net::AMQP::Protocol->load_xml_spec('amqp0-8.xml'); ... my @frames = Net::AMQP->parse_raw_frames(\$input); ... foreach my $frame (@frames) { if ($frame->can('method_frame') && $frame->method_frame->isa('Net::AMQP::Protocol::Connection::Start')) { my $output = Net::AMQP::Frame::Method->new( channel => 0, method_frame => Net::AMQP::Protocol::Connection::StartOk->new( client_properties => { ... }, mechanism => 'AMQPLAIN', locale => 'en_US', response => { LOGIN => 'guest', PASSWORD => 'guest', }, ), ); print OUT $output->to_raw_frame(); } }
This module implements the frame (de)serialization and representation of the Advanced Message Queue Protocol (http://www.amqp.org/). It is to be used in conjunction with client or server software that does the actual \s-1TCP/IP\s0 communication.
Net::AMQP->parse_raw_frames(\$binary_payload)
Given a scalar reference to a binary string, return a list of Net::AMQP::Frame objects, consuming the data in the string. Croaks on invalid input.
Net::AMQP::Value, Net::RabbitMQ, AnyEvent::RabbitMQ, Net::RabbitFoot, POE::Component::Client::AMQP
\s-1AMQP\s0 0-8 is fully supported.
\s-1AMQP\s0 0-9, 0-9-1, and 0-10 are usably supported. There are interoperability issues with table encodings because the standard disagrees with the dialects of major implementations (RabbitMQ and Qpid). For now, Net::AMQP limits itself to universally agreed table elements. See http://www.rabbitmq.com/amqp-0-9-1-errata.html <http://www.rabbitmq.com/amqp-0-9-1-errata.html> for details.
\s-1AMQP\s0 1.0 has not been tested.
Address the dialect problem, either via modified spec files that completely control the wire protocol, or by programmatic request. The former has precedent (viz \*(L"qpid.amqp0-8.xml\*(R" in spec), but could cause a combinatorial explosion as more brokers and versions are added. The latter adds interface complexity.
\*(L"All problems in computer science can be solved by another level of indirection.\*(R" \*(-- David Wheeler's observation
\*(L"...except for the problem of too many layers of indirection.\*(R" \*(-- Kevlin Henney's corollary
Copyright (c) 2009 Eric Waters and XMission \s-1LLC\s0 (http://www.xmission.com/). Copyright (c) 2012, 2013 Chip Salzenberg and Topsy Labs (http://labs.topsy.com/). All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of the license can be found in the \s-1LICENSE\s0 file included with this module.
Eric Waters <[email protected]>