我的设置如下:1微服务接收请求并在队列中写入消息(nsq),第二个微服务必须读取队列中的消息并根据它们执行某些操作。
我是ruby on rails上nsq概念的新手。我从这里安装了nsq:http://nsq.io/overview/quick_start.html。我也使用这个gem来促进推送消息:https://github.com/wistia/nsq-ruby。
我能够对邮件进行排队。这部分很容易。
问题:
我如何总是在第二个微服务中听取什么东西被按下以便我可以消耗它?
这就是我推送消息的方式:
require 'nsq'
class NsqService
attr_accessor :producer, :topic
def initialize(topic)
@topic = topic
@producer = producer
end
def publish(message)
producer.write(message)
end
private
def producer(nsqd='127.0.0.1:4150')
Nsq::Producer.new(
nsqd: nsqd,
topic: @topic
)
end
end
答案 0 :(得分:1)
nsq-ruby gem上的示例代码给出了以下代码示例:
require 'nsq'
consumer = Nsq::Consumer.new(
nsqlookupd: '127.0.0.1:4161',
topic: 'some-topic',
channel: 'some-channel'
)
# Pop a message off the queue
msg = consumer.pop
puts msg.body
msg.finish
# Close the connections
consumer.terminate
您可以将它包装在服务等的类中。您可能需要运行某种中间件或单独的进程来处理这些连接。如果您的rails代码的某些部分需要与NSQ连接。虽然我没有使用NSQ,但我使用Sidekiq进行后台作业并运行异步进程,这些进程具有良好的指令和如何配置这些中间件的示例。有关更多建议和帮助,您可以尝试联系ruby gem的一些维护者。我相信他们可以指出你正确的方向。