InfoQ Homepage News InfoQ Article: Introduction to ActiveMessaging

# InfoQ Article: Introduction to ActiveMessaging

he maintainer of the ActiveMessaging (also called a13g for short) project gives a comprehensive and informative introduction to his open-source framework, which enables enterprise messaging technologies to be easily integrated with Ruby on Rails applications. ActiveMessaging is getting support from noted industry leaders such as James Strachan and Jon Tirsen.

ActiveMessaging is especially interesting to Rails developers in the enterprise, because through its support for Stomp and StompConnect it allows easy interoperability with Apache's ActiveMQ messaging server and any other enterprise messaging server that supports JMS.

Our easy-to-follow introductory article assumes basic knowledge of Ruby on Rails and messaging concepts, and has code samples and all the instructions you need to get started using ActiveMessaging.

Read InfoQ's Introduction to ActiveMessaging today.

Style

## Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

• ##### Great article!

by James Strachan /

• ##### Performance/Throughput?

by Stefan Tilkov /

• ##### Re: Performance/Throughput?

by Andrew Kuklewicz /

• ##### Now, we can only push the messages to the views

by hemant kumar /

• ##### Re: Now, we can only push the messages to the views

by Andrew Kuklewicz /

• ##### Re: Now, we can only push the messages to the views

by hemant kumar /

• ##### Re: Now, we can only push the messages to the views

by Alex MacCaw /

• ##### Re: Now, we can only push the messages to the views

by Alex MacCaw /

• ##### Re: Now, we can only push the messages to the views

by James Strachan /

• ##### Re: Now, we can only push the messages to the views

by hemant kumar /

• ##### Re: Now, we can only push the messages to the views

by James Cook /

• ##### Re: Now, we can only push the messages to the views

by Chong Francis /

• ##### Excellent!

by Lee Zieke /

• ##### Re: Excellent!

by Andrew Kuklewicz /

• ##### Re: Excellent!

by Lee Zieke /

• ##### Errors

by Denis Labelle /

• ##### Re: Errors

by Denis Labelle /

• ##### Re: Errors

by Ajay Nayak /

• ##### Ghost consumers lingering after script/poller stop?

by Brian Balser /

• ##### Great article!

Your message is awaiting moderation. Thank you for participating in the discussion.

Thanks for a great article Andrew! ActiveMessaging really rocks (as does Rails, Stomp and ActiveMQ :). Keep up the good work!

James
LogicBlaze
Open Source SOA

• ##### Performance/Throughput?

Your message is awaiting moderation. Thank you for participating in the discussion.

Excellent article. Are there any benchmarks/performance figures yet?

• ##### Re: Performance/Throughput?

Your message is awaiting moderation. Thank you for participating in the discussion.

good question - the straight answer is I haven't seen or or run any such test myself. If anyone else has, I would be very curious to hear about it.

So I don't know exactly what the a13g overhead is, or how it scales. I have a feeling this may depend much more on your message broker, and then what you do in the message processor. These kind of tests are a bit tricky as you are testing the network, the broker, the box, etc.

That said, it would be good to design a benchmark, perhaps based off the work done at ActiveMQ.

I can say that anecdotally, I find the processing of the message to take longer than the overhead in dispatch - we even do synchronous messages from our java app to our rails app and back.

One other nice thing is that you can run multiple instances of the poller process, so with N number of pollers all listening to the same queue, you in theory have as much scalability as you have processing power, and depending on the efficiency of the broker dispatch.

Cheers,
Andrew Kuklewicz

• ##### Now, we can only push the messages to the views

by hemant kumar /

Your message is awaiting moderation. Thank you for participating in the discussion.

This work is awesome, and all we need is a way to push these messages to the browser, so that browser doesn't poll for it. any ideas on this?

• ##### Re: Now, we can only push the messages to the views

Your message is awaiting moderation. Thank you for participating in the discussion.

I only know one non-polling based way to push to the browser, and that is the Juggernaut project.

Personally I am very tempted to mess with the juggernaut juggernaut.rubyforge.org/ solution, I just haven't had an excuse.

From what I understand it involves a separate "push server" that sits between a rails server app, and the flash apps on the browser. I see no reason a processor in a13g couldn't send a message to the juggernaut push server that would then get pushed up to the browser - if you give it a try let me know - it looks awful cool.

• ##### Re: Now, we can only push the messages to the views

Your message is awaiting moderation. Thank you for participating in the discussion.

This work is awesome, and all we need is a way to push these messages to the browser, so that browser doesn't poll for it. any ideas on this?

We've had that part solved for a while using a cometd style integration using ActiveMQ and Jetty...

activemq.apache.org/ajax.html

In benchmarks for customers we've had a single process handling 14,000 concurrent users

James
LogicBlaze
Open Source SOA

• ##### Re: Now, we can only push the messages to the views

by hemant kumar /

Your message is awaiting moderation. Thank you for participating in the discussion.

Well Andrew, I have checked out Juggernaut inside out and actually have implemented by own push server.But the problem is, it can't bypass firewalls and worst of it NATs. This is a big hurdle in my opinion. Without solving above issues Juggernaut won't get mass adoptation.

• ##### Re: Now, we can only push the messages to the views

by hemant kumar /

Your message is awaiting moderation. Thank you for participating in the discussion.

Are we talking Java?

• ##### Excellent!

by Lee Zieke /

Your message is awaiting moderation. Thank you for participating in the discussion.

Would you please take a look at the table messages, I have got
mysql> select * from messages;
+----+--------------+---------------------+
| id | body | received_date |
+----+--------------+---------------------+
| 1 | Hello World | 0000-00-00 00:00:00 |
| 2 | testDateTime | 0000-00-00 00:00:00 |
+----+--------------+---------------------+

FIELD received_date, it supposed to be DateTime at which message were generated.

Please take a look at on_message

• ##### Re: Now, we can only push the messages to the views

by James Cook /

Your message is awaiting moderation. Thank you for participating in the discussion.

James, is that "cometd style" or api/protocol compliant cometd?

• ##### Re: Excellent!

Your message is awaiting moderation. Thank you for participating in the discussion.

Yeah, there is a one letter typo, I sent in a fix for this before the article was published, but guess it didn't make it into the article.

def on_message(message)  logger.debug "PersistMessageProcessor received: " + message  my_message = Message.create(:body=>message, :received_date=>DateTime.new)end

should be
:received_date=>DateTime.now
not
:received_date=>DateTime.new

Cheers,

-Andrew Kuklewicz

• ##### Re: Excellent!

by Lee Zieke /

Your message is awaiting moderation. Thank you for participating in the discussion.

perfect, a toast !

• ##### Errors

Your message is awaiting moderation. Thank you for participating in the discussion.

Hello all,

I followed along with the example, however when posting the message from the view, the server outputs the following message (infinitely, it would appear):

transmit failed: undefined method length' for #<Message:0x45f89b8>
transmit failed: undefined method length' for #<Message:0x45f89b8>
transmit failed: undefined method length' for #<Message:0x45f89b8>
...

My poller runs fine:

=> Subscribing to /queue/PersistMessage (processed by
PersistMessageProcessor)

I don't see a message in either the poller console, or the activemq console.
I changed the broker.yml configuration to look at denis:61613 instead of localhost because when activemq starts, it states:

...
INFO TransportServerThreadSupport - Listening for connections at: tcp://denis:61616
INFO TransportConnector - Connector openwire Started
INFO TransportServerThreadSupport - Listening for connections at: ssl://denis:61617
INFO TransportConnector - Connector ssl Started
INFO TransportServerThreadSupport - Listening for connections at: stomp://denis:61613
INFO TransportConnector - Connector stomp Started
INFO TransportServerThreadSupport - Listening for connections at: xmpp://denis:61222
INFO TransportConnector - Connector xmpp Started
...

Any ideas?

Thx,
dl

• ##### Re: Errors

Your message is awaiting moderation. Thank you for participating in the discussion.

er, nevermind I overlooked 1 line in my controller, rather than
def new
@message = params[:message]
...
end

was
def new
@message = Message.new(params[:message])
...
end

• ##### Re: Now, we can only push the messages to the views

Your message is awaiting moderation. Thank you for participating in the discussion.

For pushing message in COMET style, you may use AjaxMessaging code.google.com/p/ajaxmessaging/

• ##### Re: Now, we can only push the messages to the views

by Alex MacCaw /

Your message is awaiting moderation. Thank you for participating in the discussion.

Hemant:
Not true, Juggernaut can use port 443 which is open on most firewall (used for https).

• ##### Re: Now, we can only push the messages to the views

by Alex MacCaw /

Your message is awaiting moderation. Thank you for participating in the discussion.

Juggernaut can bypass firewalls in that it can use ports commonly open on a firewall, such as 443. I'm not sure how NAT poses a problem, the port just gets forwarded to a internal server.

• ##### Ghost consumers lingering after script/poller stop?

by Brian Balser /

Your message is awaiting moderation. Thank you for participating in the discussion.

I've noticed that when using the poller, there are occasional consumers lingering around which AMQ sends the msg, and hence dropped, any idea if I'm not using the poller correctly? I have a run_poller script that does:

script/poller start
sleep 30
script/poller stop

• ##### Re: Errors

by Ajay Nayak /

Your message is awaiting moderation. Thank you for participating in the discussion.

I have followed all your steps to config to code.
But when i am running "script/poller run"

Only getting as :
^C^[[Aajay-dhandes-imac:MessageMonster mrunalini\$ script/poller run
/Users/mrunalini/.gem/ruby/1.8/gems/stomp-1.1.3/lib/stomp/connection.rb:156: warning: parenthesize argument(s) for future version
"/Users/mrunalini/code/MessageMonster"
"/Users/mrunalini/code/MessageMonster/config/messaging.rb"
Missing the Rails 2.3.3 gem. Please gem install -v=2.3.3 rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.

My development environment is Mac OSX Leapord.

Please post suitable solutions for me.

Thanks,
Ajay nayak

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Is your profile up-to-date? Please take a moment to review and update.

Note: If updating/changing your email, a validation request will be sent

Company name:
Company role:
Company size:
Country/Zone:
State/Province/Region:
You will be sent an email to validate the new email address. This pop-up will close itself in a few moments.