Ruby nsq如何监听新消息

Ruby nsq how to listen for new messages

我的设置如下:1 个微服务接收请求并在队列 (nsq) 中写入消息,第二个微服务必须读取队列中的消息并根据它们执行某些操作。

我是 rails 上 ruby 中 nsq 概念的新手。我已经从这里安装了 nsq:http://nsq.io/overview/quick_start.html. I have also used this gem to facilitate pushing messages: 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

上的示例代码 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

您可以将其包装在 class 中用于您的服务等。您可能需要 运行 某种中间件或单独的进程来处理这些连接。如果您的 rails 代码的某些部分需要与 NSQ 交互。虽然我没有使用过 NSQ,但我已经将 Sidekiq 用于后台作业和 运行ning 异步进程,其中有很好的说明和如何配置这些中间件的示例。如需更多建议和帮助,您可以尝试联系 ruby gem 的一些维护者。我相信他们可以为您指明正确的方向。