我希望我的Rails应用程序能够监听和发布STOMP消息。
This article给出了如何使用ruby STOMP客户端的示例,以及将该客户端集成到Rails应用程序中的gem activemessaging
。那里的功能似乎很理想,但是activemessaging
gem似乎不再被维护。
有没有人知道一个gem可以实现与activemessaging
gem类似的功能?我找不到,如果找不到的话:
我如何在Rails应用的上下文中初始化Stomp客户端,使其具有持久连接,以便1)客户端的生命周期与运行我的应用的ruby进程相关联,而不是请求-响应过程,2)我可以使用代码(如Active Record模型或应用中定义的服务对象)来消费消息?
2条答案
按热度按时间flvtvl501#
根据ActiveMessaging project website:
ActiveMessaging是一个通用的框架,可以轻松使用消息传递,但不依赖于任何特定的消息传递系统-事实上,它现在支持Stomp,AMQP,beanstalk,Amazon Simple Queue Service(SQS),JMS(使用StompConnect或直接在JRuby上),WebSphere MQ......
因此,它是一个简化各种消息传递协议和/或提供者之间集成的接口。但是,由于您使用的是标准化的消息传递协议(即你真的不需要它。
我建议您简单地使用this STOMP gem,这在原始文章中引用。
STOMP,顾名思义,是一个非常简单的协议。您应该能够在应用程序中使用它。
xriantvc2#
由于关于这个主题的报道太少了,我想我应该分享一下我提出的解决方案。在确定了直接使用STOMP gem是前进的方向之后,让我重新审视一下主要挑战:
如何在Rails应用程序的上下文中初始化一个带有持久连接的Stomp客户端,
1.客户端的生命周期与运行我的应用程序的ruby进程相关联,而不是请求-响应过程,
1.我可以使用Active Record模型或应用中定义的服务对象等代码来消费消息?
第1部分)原来是一个坏主意。我设法使用Rails初始化器实现了这一点,它在我的本地环境中工作得很好。然而,当我在一个临时环境中运行它时,我发现我的消息侦听器神秘地死了。实际上,生产Web服务器产生应用程序(运行初始化器),分叉进程(不运行它们)并随机杀死进程,最终杀死侦听器而无需替换它们。
相反,我使用daemons gem创建了一个易于启动和停止的后台进程。我在lib/daemons/message_listener.rb中的代码看起来像这样: