require 'java'
include_class 'org.springframework.context.support.ClassPathXmlApplicationContext'
class Subscriber
include javax.jms.MessageListener
def initialize
ctx = ClassPathXmlApplicationContext.new("subscriber.xml")
@sub = ctx.getBean("topicSubscriberContainer")
@sub.setMessageListener(self)
@count = 0
end
def onMessage(msg)
stop if (@count += 1) > 10000
puts "#{@count}: #{msg.getJMSMessageID()}"
end
def start
@sub.start
sleep
end
def stop
sleep 1
@sub.stop
java.lang.System.exit(0)
end
end
subscriber = Subscriber.new
subscriber.start
Publisher.rb
require 'java'
include_class 'org.springframework.context.support.ClassPathXmlApplicationContext'
class Publisher
def initialize
ctx = ClassPathXmlApplicationContext.new("publisher.xml")
con = ctx.getBean("topicPublisherConnectionFactory").createTopicConnection()
@session = con.createTopicSession(false,javax.jms.Session::AUTO_ACKNOWLEDGE)
@pub = @session.createPublisher(ctx.getBean("topicDestination"))
end
def send(text)
msg = @session.createTextMessage(text)
@pub.send(msg)
puts "#{msg.getJMSMessageID()}"
end
end
# data/text to publish
file = File.open("msg.txt","r")
data = file.read
file.close
publisher = Publisher.new
for i in (1..1000)
publisher.send(data)
end
Peeker.rb
require 'java'
include_class 'org.springframework.context.support.ClassPathXmlApplicationContext'
class Peeker
include javax.jms.MessageListener
def initialize
ctx = ClassPathXmlApplicationContext.new("peeker.xml")
con = ctx.getBean("topicSubscriberConnectionFactory").createTopicConnection()
topic = ctx.getBean("topicDestination")
@session = con.createTopicSession(false,javax.jms.Session::CLIENT_ACKNOWLEDGE)
@subscriber = @session.createDurableSubscriber(topic, $subscription_id, $selector, false)
@subscriber.setMessageListener(self)
@count = 0
end
def onMessage(msg)
stop if (@count += 1) > 10
puts "#{@count}: #{msg.getJMSMessageID()}"
@file.write(msg.getText())
# just to peek msgs, do not call # msg.acknowledge()
end
def start
@file = File.open("#{$subscription_id}.txt","w")
@session.start
sleep
end
def stop
sleep 1
@file.close
@session.stop
java.lang.System.exit(0)
end
end
$subscription_id = ENV['SubscriptionID']
$selector = ENV['Selector']
peeker = Peeker.new
peeker.start
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License.
[by Kiyohito Yamamoto]