Correction: <div><span class="Apple-style-span" style="font-family: helvetica, arial, freesans, clean, sans-serif; line-height: 20px; "><span class="Apple-style-span" style="font-family: arial; line-height: normal; "><br></span></span></div>
<div><meta charset="utf-8"><span class="Apple-style-span" style="font-family: helvetica, arial, freesans, clean, sans-serif; line-height: 20px; "><meta charset="utf-8"><span class="Apple-style-span" style="font-family: arial; line-height: normal; ">Vorpal Bunny is an experimental rabbitmq-jsonrpc-channel PHP driver designed to allow expedited single call HTTP delivery for Basic.Publish calls to RabbitMQ.</span></span><div>
<span class="Apple-style-span" style="font-family: helvetica, arial, freesans, clean, sans-serif; line-height: 20px; "><br></span></div><div><span class="Apple-style-span" style="font-family: helvetica, arial, freesans, clean, sans-serif; line-height: 20px; "><span class="Apple-style-span" style="font-family: arial; line-height: normal; "></span>The goal is to be a light-weight tool for higher throughput with smaller protocol overhead for single-call of Basic.Publish per application execution.</span><br>
<br><div class="gmail_quote">On Thu, Feb 24, 2011 at 10:02 PM, Gavin M. Roy <span dir="ltr"><<a href="mailto:gmr@myyearbook.com">gmr@myyearbook.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Vorpal Bunny is an experimental rabbitmq-jsonrpc-channel PHP driver designed to allow expedited single call HTTP delivery for Basic.Deliver calls to RabbitMQ.<div><br></div><div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px">The goal is to be a light-weight tool for higher throughput with smaller protocol overhead for single-call of Basic.Push per application execution. </span></font></div>
<div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px"><br></span></font></div><div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px">Our use case is focused on PHP web applications that span hundreds of servers with hundreds of backends each. With the existing AMQP drivers for PHP, applications can not currently maintain consistent connections and publish across application executions, instead they connect, publish and disconnect. Vorpal Bunny is intended to reduce the overhead on the RabbitMQ server and the PHP application by using the jsonrpc-channel plugin, which maintains its own channels per session inside RabbitMQ's running instance, eliminating most of the AMQP protocol overhead for one off message delivery.</span></font></div>
<div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px"><br></span></font></div><div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px">This is experimental for us and has not entered production, however I felt it may be useful for those out there who are exploring the rabbitmq-jsonrpc-channel plugin as well.</span></font></div>
<div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px"><br></span></font></div><div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px">Example use:</span></font></div>
<div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px"><span style="font-size:13px;line-height:18px"><pre style="margin-top:1em;margin-right:0px;margin-bottom:1em;margin-left:0px;padding-top:5px;padding-right:5px;padding-bottom:5px;padding-left:5px;line-height:1.5em;font-size:12px;background-color:rgb(238, 238, 238);border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-color:rgb(221, 221, 221);border-right-color:rgb(221, 221, 221);border-bottom-color:rgb(221, 221, 221);border-left-color:rgb(221, 221, 221);color:rgb(68, 68, 68);overflow-x:auto;overflow-y:auto">
<code style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px !important;padding-right:0px !important;padding-bottom:0px !important;padding-left:0px !important;line-height:1.4em;font-size:12px !important;background-color:rgb(238, 238, 238) !important;color:rgb(68, 68, 68) !important;border-top-width:1px !important;border-right-width:1px !important;border-bottom-width:1px !important;border-left-width:1px !important;border-top-style:none !important;border-right-style:none !important;border-bottom-style:none !important;border-left-style:none !important;border-top-color:rgb(222, 222, 222) !important;border-right-color:rgb(222, 222, 222) !important;border-bottom-color:rgb(222, 222, 222) !important;border-left-color:rgb(222, 222, 222) !important;border-width:initial !important;border-color:initial !important"> $vb = new VorpalBunny( 'localhost' );
$vb->publish( "test_exchange", "test", "Hello World!" );</code></pre></span></span></font></div><div><span style="font-family:helvetica, arial, freesans, clean, sans-serif;line-height:20px"><br>
</span></div><div><span style="font-family:helvetica, arial, freesans, clean, sans-serif;line-height:20px">The design tries to employ PHP's APC cache if available to keep one session with the RPC server active per Apache server on the RabbitMQ server. Application flow is as follows:</span></div>
<div><span style="font-family:helvetica, arial, freesans, clean, sans-serif;line-height:20px"><br></span></div><div><span style="font-family:helvetica, arial, freesans, clean, sans-serif;line-height:20px"> 1. Construct object, determining of APC cache is available</span></div>
<div><span style="font-family:helvetica, arial, freesans, clean, sans-serif;line-height:20px"> 2. On first call of publish, establish a session with the rabbitmq-jsonrpc-plugin, then send the message</span></div>
<div><span style="font-family:helvetica, arial, freesans, clean, sans-serif;line-height:20px"> 3. On subsequent calls, call publish will send without trying to establish a session and then look for an error indicating the session has timed out or is no longer available. If this is the case, re-establish the session and retry the delivery.</span></div>
<div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px"><br></span></font></div><div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px">Vorpal Bunny is available on GitHub at <a href="https://github.com/myYearbook/VorpalBunny" target="_blank">https://github.com/myYearbook/VorpalBunny</a></span></font></div>
<div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px"><br></span></font></div><div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px">You can also download 0.1 directly at </span></font><span style="font-family:helvetica, arial, freesans, clean, sans-serif;line-height:20px"><a href="https://github.com/myYearbook/VorpalBunny/zipball/0.1" target="_blank">https://github.com/myYearbook/VorpalBunny/zipball/0.1</a></span></div>
<div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px"><br></span></font></div><div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px">I will keep you all updated to our progress and observations to how well this performs in a high delivery transaction environment.</span></font></div>
<div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px"><br></span></font></div><div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px">Regards,</span></font></div>
<div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px"><br>Gavin</span></font></div><div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px"><br>
</span></font></div><div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px"><br></span></font></div><div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px"><br>
</span></font></div><div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px"><br></span></font></div><div><font face="helvetica, arial, freesans, clean, sans-serif"><span style="line-height:20px"><br>
</span></font></div>
</blockquote></div><br></div></div>