跟随Redis酒吧/酒吧
这很好用,我可以使用
$redis.publish 'channel', { object: @object.id }
使用redis cli
[0 127.0.0.1:64192] "publish" "channel" "{:object=>\"5331d541f4eec77185000003\" }"
当我在另一个类(listener类)中将订户块添加到该通道时,问题就开始了,如下所示
class OtherClass
$redis.subscribe('channel') do |payload|
p payload
end
end
在<代码>redis-cli中
[0 127.0.0.1:52930] "subscribe" "channel"
问题是,当我将subscriber listener类添加到同一个rails应用程序时。。。它停止工作,因为OtherClass
侦听redis服务器并停止执行任何其他代码。。。它只是坐在那里听着。
那么,有没有办法在同一个rails应用程序上使用redis制作消息总线呢。。。因此,事件是从某些类或服务对象发布的,并且有特定通道的侦听器在后台接收事件时进行操作。
我知道我可能会使用sidekiq或任何其他背景工作者来做这项工作。。。但过了一段时间,背景工作人员变得杂乱无章,无法维护。
Redis#subscribe
的实现是一个循环,它将控制当前线程以监听事件。这意味着,当按照您所示的方式将订阅放到Rails类的上下文中时,启动过程将停止。
您可以尝试将调用包装到线程中,但这种方法实际上会在每次将此类加载到新进程(如rails控制台或多个unicorns)时创建一个新订阅。此外,您还必须小心共享状态和其他线程问题。这可能不是你想要的。
您最好启动一个不同的进程,加载rails环境并订阅redis,与服务网络请求的进程分开。这可能是一个像下面这样的rake任务:
namespace :subscribe do
task :redis => :environment do
$redis.subscribe("bravo") do |on|
on.message do |channel, message|
Rails.logger.info("Broadcast on channel #{channel}: #{message}")
OtherClass.some_method # yada yada
end
end
end
end
我正在使用redis pub/sub 编写两个或多个节点进程之间的p2p通信,使用的是lib。 我将发布不同类型的消息,如: 您好:通知其他订阅者新进程已连接 我不知道是否它是更好的为redis订阅许多通道(一个消息类型)或创建一个单一的通道,并发送一个属性,定义消息的类型,如: 提前谢谢
条形图用于绘制基于区域的图表。 在本节中,我们将讨论不同类型的条形图表。 Sr.No. 图表类型和描述 1 基本酒吧 基本条形图。 2 堆积吧 条形图有条形堆叠在一起。 3 负堆积区域 条形图与负堆栈。
我有问题得到一个图例显示在条形图,我已经创建了使用chartjs。留档谈到了一个图例模板,但是我似乎找不到一个如何在图中实现它的好例子。下面是我用来生成图形的代码。
我有一个熊猫数据框,它有两列。 我需要“伯爵”专栏下令的情节。
我使用和库。是否有可能以这样的方式更改条形图的颜色方案,即对应于较高计数的条形图具有较深的红色,而对应于较低计数的条形图具有浅红色?所以,某种热图应用于条形图。我怎么做?目前,我的计数图中有随机颜色。 更新: 我试过这个: 但较暗的颜色并不对应较高的计数。看起来颜色是使用预定义的调色板随机分配给条的。
顺序对于创建发布服务器和订阅服务器是否重要?如果我有应用程序A,它充当发布者和几个客户端应用程序x1-xn(作为应用程序A的订阅者),我是否可以首先启动子应用程序,将它们注册为订阅者,然后启动应用程序A?这是否可行,或者我需要启动应用程序A?