【发布时间】:2012-02-06 14:56:45
【问题描述】:
我有一个 rabbitmq 队列订阅者,每次使用新消息时都会启动一个新线程:
AMQP.start(@conf) do |connection|
channel = AMQP::Channel.new(connection)
requests_queue = channel.queue("one")
requests_queue.subscribe(:ack => true) do |header, body|
puts "we have a message at #{Time.now} and n is #{n}"
url_search = MultiJson.decode(body)
Thread.new do
5.times do
lead = get_lead(n, (n == 5))
puts "message #{n} is_last = #{lead.is_last} at #{Time.now}";
AMQP::Exchange.default.publish(
MultiJson.encode(lead),
:routing_key => header.reply_to,
:correlation_id => header.correlation_id
)
n += 1
sleep(2)
end
end
end
end
我的问题是,消息处理后如何处理线程?我应该使用线程池吗?
我正在使用 JRuby。上面的代码是使用普通的 ruby 语法在后台创建一个 Java JVM 线程,还是我应该显式地创建一个 Java 线程?
【问题讨论】: