0

我的设置如下: 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
4

1 回答 1

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 的维护者。我相信他们可以为您指明正确的方向。

于 2018-03-17T21:13:06.757 回答