Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用ActiveMQ的Rails发布/订阅_Ruby On Rails_Ruby_Activemq_Stomp - Fatal编程技术网

Ruby on rails 使用ActiveMQ的Rails发布/订阅

Ruby on rails 使用ActiveMQ的Rails发布/订阅,ruby-on-rails,ruby,activemq,stomp,Ruby On Rails,Ruby,Activemq,Stomp,我希望我的Rails应用程序能够侦听并发布到ActiveMQ队列 给出了如何使用ruby STOMP客户端以及将该客户端集成到Rails应用程序中的gemactivemessaging的示例。那里的功能似乎很理想,但是activemessaginggem似乎不再被维护 关于使用rabbitMQ而不是ActiveMQ,有很多参考资料,但我正在尝试改进我的Rails应用程序与已经使用ActiveMQ的现有Java堆栈的集成 那么,有人知道我可以使用gem来实现类似于activemessagingge

我希望我的Rails应用程序能够侦听并发布到ActiveMQ队列

给出了如何使用ruby STOMP客户端以及将该客户端集成到Rails应用程序中的gem
activemessaging
的示例。那里的功能似乎很理想,但是
activemessaging
gem似乎不再被维护

关于使用rabbitMQ而不是ActiveMQ,有很多参考资料,但我正在尝试改进我的Rails应用程序与已经使用ActiveMQ的现有Java堆栈的集成

那么,有人知道我可以使用gem来实现类似于
activemessaging
gem的功能吗?我找不到,所以如果没有:

我如何在Rails应用程序的上下文中初始化一个Stomp客户端,并将其永久连接到我的activeMQ实例,以便1)客户端的生命周期与运行我的应用程序的ruby进程的生命周期相关联,而不是与请求-响应过程相关联,2)我可以使用活动记录模型或应用程序中定义的服务对象之类的代码来消费消息

提前感谢。

根据:

ActiveMessaging是一个通用的框架,可以方便地使用消息传递,但它不与任何特定的消息传递系统绑定-事实上,它现在支持Stomp、AMQP、beanstalk、Amazon简单队列服务(SQS)、JMS(在JRuby上使用StompConnect或direct)、WebSphere MQ

因此,它是一个简化各种消息传递协议和/或提供者之间集成的接口。但是,由于您使用的是标准化的消息传递协议(即STOMP),因此您并不真正需要它

我建议您只使用原始文章中引用的


顾名思义,STOMP是一个非常简单的协议。您应该能够在应用程序中根据需要使用它。

因为关于这个主题的内容太少了,所以我想与大家分享我提出的解决方案。在确定直接使用STOMP gem是前进的方向后,让我再次重申关键挑战:

我如何初始化一个具有到的持久连接的Stomp客户端 我的Rails应用程序上下文中的activeMQ实例

1) 客户机的生命周期与ruby进程的生命周期相关联 运行我的应用程序,而不是请求-响应过程,以及

2) 我可以使用诸如活动记录模型或服务之类的代码来使用消息 在我的应用程序中定义的对象

结果证明这是个坏主意。我使用Rails初始值设定项实现了这一点,它在我的本地应用程序上运行良好。然而,当我在登台环境中运行它时,我发现我的消息侦听器神秘死亡。似乎发生的情况是,生产web服务器生成应用程序(运行初始值设定项)、分叉进程(不运行它们)并随机终止进程,最终终止侦听器,而从未替换它们

相反,我使用gem创建了一个易于启动和停止的后台进程。lib/daemons/message_listener.rb中的代码如下所示:

require 'daemons'
# Usage (from daemons dir):
# ruby message_listener start
# ruby message_listener status
# ruby message_listener stop
# See https://github.com/thuehlinger/daemons for full docs.

# Require this to get your app code
require_relative '../../config/environment'

Daemons.run_proc('listener.rb') do

  client = nil

  at_exit do
    begin
      client.close
    rescue # probably means there's no connection to close, do nothing to handle it.
    end
  end

  client = Stomp::Client.new(your_config_options)

  # Your message handling code using your rails app goes here 

  loop do
    # I'd expected that subscribing to a stomp queue would be blocking,
    # but it doesn't seem to be.
    sleep(0.001)
  end

end

谢谢,但是我不清楚的是什么?如果不清楚的话,也许我应该编辑这个问题。你能初始化stomp客户端的一个实例来维护一个持久连接吗?它的生命周期独立于对rails应用的http请求?