1 - fire up out of the box activemq installation. Literally that easy, just run bin/activemq &
2 - copy activemq-all-5.1.0.jar from activemq installation directory to the same directory as your JRuby scripts
3 - create the 2 scripts below , consumer.rb and producer.rb and you are off and running. For the Rails enthusiasts , I can imagine a very nice replacement for ActiveMessaging where you create a simple JMS library that will do an async post of messages to the queue, very nice indeed.
4 - Run each script in a separate window (jruby consumer.rb AND jruby producer.rb). Producer.rb will simply give you a ">" prompt to type some text to demonstrate the concept
Here is the code I ended up with:
consumer.rb
------------------------
require "java"
require "activemq-all-5.1.0.jar"
include_class "org.apache.activemq.ActiveMQConnectionFactory"
include_class "org.apache.activemq.util.ByteSequence"
include_class "org.apache.activemq.command.ActiveMQBytesMessage"
include_class "javax.jms.MessageListener"
include_class "javax.jms.Session"
class MessageHandler
include javax.jms.Session
include javax.jms.MessageListener
def onMessage(serialized_message)
message_body = serialized_message.get_content.get_data.inject("") { |body, byte| body << byte }
puts message_body
end
def run
factory = ActiveMQConnectionFactory.new("tcp://localhost:61616")
connection = factory.create_connection();
session = connection.create_session(false, Session::AUTO_ACKNOWLEDGE);
queue = session.create_queue("test1-queue");
consumer = session.create_consumer(queue);
consumer.set_message_listener(self);
connection.start();
puts "Listening..."
end
end
handler = MessageHandler.new
handler.run
producer.rb
--------------
require "java"
require "activemq-all-5.1.0.jar"
require 'readline'
include_class "org.apache.activemq.ActiveMQConnectionFactory"
include_class "org.apache.activemq.util.ByteSequence"
include_class "org.apache.activemq.command.ActiveMQBytesMessage"
include_class "javax.jms.MessageListener"
include_class "javax.jms.Session"
class MessageHandler
include javax.jms.Session
include javax.jms.MessageListener
def initialize
factory = ActiveMQConnectionFactory.new("tcp://localhost:61616")
connection = factory.create_connection();
@session = connection.create_session(false, Session::AUTO_ACKNOWLEDGE);
queue = @session.create_queue("test1-queue");
@producer = @session.create_producer(queue);
end
def send_message(line)
puts "received input of #{line}"
m = @session.createTextMessage() ;
m.set_text(line)
@producer.send(m)
end
end
handler = MessageHandler.new
loop do
line = Readline::readline('> ', true)
handler.send_message(line)
end
6 comments:
Great post, very useful, as usually people limit to textMessage, as opposite to bytesMessage, as you do.
Just to know: are really necessaries the include_class you put in the header? Is it not sufficient the require 'activemq-all.jar'
JMS Training Institutes in Chennai JMS Training Institutes in Chennai | JSP Training Institutes in Chennai | Spring Training Institutes in Chennai Spring Training Institutes in ChennaiMicroServices Training Institutes In Chennai Java MicroServices Training Institutes In Chennai
Java EE Training Institutes in Chennai Java EE Training Institutes in Chennai
Java Training Institutes Java Training Institutes
Java Spring Hibernate Training Institutes in Chennai J2EE Training Institutes in Chennai J2EE Training Institutes in Chennai Java Spring Hibernate Training Institutes in Chennai | Hibernate Training Institutes in Chennai Core Java Training Institutes in Chennai Core Java Training Institutes in Chennai
Hibernate Online Training Hibernate Online Training Hibernate Training in Chennai Hibernate Training in Chennai Java Online Training Java Online Training Hibernate Training Institutes in ChennaiHibernate Training Institutes in Chennai
I have read your blog its very attractive and impressive. I like it your blog.
JavaEE Training in Chennai JavaEE Training in Chennai
Java Training in Chennai Core Java Training in Chennai Core Java Training in Chennai
Java Online Training Java Online Training Core Java 8 Training in Chennai Java 8 Training in Chennai
Interesting Article
JMS training | Java Online Training
Java Training in Chennai | JMS training online
Thank you for some other informative website. I have a venture that I am simply now running on, and I’ve been at the glance out for such info.
Data entry services in India
Post a Comment