OpenAMQ’s JMS client with RabbitMQ server
This page is a mirrored copy of an article originally posted on the (now sadly defunct) LShift blog; see the archive index here.
Mon, 16 March 2009
OpenAMQ has released their JMS client for using JMS with AMQP-supporting brokers. This afternoon I experimented with getting it running with RabbitMQ.
After a simple, small patch to the JMS client code, to make it work with the AMQP 0-8 spec that RabbitMQ implements (rather than the 0-9 spec that OpenAMQ implements), the basic examples shipped with the JMS client library seemed to work fine. The devil is no doubt in the details, but no problems leapt out at me.
To get it going, I checked it out using Git (git clone
git://github.com/pieterh/openamq-jms.git
). Compilation was as simple as running ant
. Kudos to the OpenAMQ team for making the build process so smooth! (Not to mention writing a great piece of software :-) )
The changes to make it work with AMQP 0-8 were:
retrieving the 0-8 specification XML
changing the JMS client library’s
build.xml
file to point to the downloaded file in itsgenerate.spec
variablechanging one line of code in
src/org/openamq/client/AMQSession.java
: in 0-8, the finalnull
argument toBasicConsumeBody.createAMQFrame
must be omittedre-running the
ant
build
After this, and creating a /test
virtual-host using RabbitMQ’s rabbitmqctl
program, the OpenAMQ JMS client examples worked fine, as far as I could tell.
rabbitmqctl add_vhost /test
rabbitmqctl set_permissions -p /test guest '.*' '.*' '.*'
You can download the patch file I applied to try it yourself. Note that you’ll need to put the correct location to your downloaded amqp0-8.xml
file into build.xml.
Comments
On 16 March, 2009 at 7:00 pm,
wrote:On 20 January, 2010 at 11:35 pm,
wrote:I just tried this and there are missing files from the git repository is:
org.openamq.framing.ChannelCloseBody
Where are they gone ?
On 20 January, 2010 at 11:42 pm,
wrote:Nevermind, I had mispelled the name of the amqp spec file
On 2 February, 2010 at 10:10 pm,
wrote:I’m trying to get Drools to work with RabbitMQ, and unfortunately the drools JMS pipeline requires JNDI objects. Has anybody got an example of JNDI entries for topics, connectionFactories, etc working with this API?
On 10 June, 2010 at 2:00 am,
wrote:I am looking for example JNDI entries required for tomcat + blazeds integration.
Do you have any examples available?
On 20 October, 2010 at 8:20 am,
wrote:[...] Java JMS [...]
On 20 October, 2010 at 2:49 pm,
wrote:I am trying to use RabbitMQ from within GlassfishESBV2.2’s (GlassfishV2.x) resource adapter but with no success.
I’ve tried the genericra bundled with Glassfish, deployed the resource adapter, created the JNDI resources for Queue, QueueConnectionFactory and QueueConnectionFactoryPool but I keep with the problem of instanciating the AMQQueue, which has no default constructor …
And yes, I really need a JMS Provider API for RabbitMQ, I’m trying to use JBI and the JMS Binding Connectors.
Anyone has managed this?
Tony,
Good news. Feel free to send us patches to make the code work with both 0.8 and 0.91, if you like.
-Pieter