我创建了一个Storm拓扑,它使用Jedis库连接到Redis Cluster。 Storm组件总是希望Redis启动并运行,然后才连接到Redis并订阅事件。目前我们使用Redis的pub-sub策略。
下面是代码示例,它解释了我在Storm中为Redis提供的Jedis连接。
try {
jedis.psubscribe(listener, pattern);
} catch(Exception ex) {
//catch statement here.
} finally {
pool.returnResource(jedis);
}
....
pool = new JedisPool(new JedisPoolConfig(), host, port); //redis host port
ListenerThread listener = new ListenerThread(queue, pool, pattern);
listener.start();
预期行为
一旦Redis死亡并重新上线,预计Storm将确定Redis的状态。如果Redis死机并上线,则无需重启。
实际行为
一旦Redis因任何原因重新启动,我总是必须重新启动Storm拓扑,然后才开始收听Redis。
问题
Redis重启后如何让Storm监听并重新连接到Redis?任何指导将不胜感激,即。 docs,论坛答案。
答案 0 :(得分:-1)
这是apache-storm的一个常见问题,其中连接线程处于陈旧状态,尽管您消耗的源是关闭/重新启动的。理想情况下,它应该重新创建新的连接线程,而不是重用现有的连接线程。因此,想法是通过检测异常(例如,在JMS的情况下为JMSConnectionError)使其自动化。
参考这个Failover Consumer Example,它会让你简要了解在这种情况下该怎么做。(P。这是JMS,你的情况下是JMS的redis。)
步骤将是这样的。