【问题标题】:Automatically reconnect Storm Topology to Redis Cluster on Redis restartRedis 重启时自动将 Storm 拓扑重新连接到 Redis 集群
【发布时间】:2018-11-27 05:25:15
【问题描述】:

我创建了一个使用 Jedis 库连接到 Redis 集群的 Storm 拓扑。 Storm 组件总是期望 Redis 启动并运行,然后才连接到 Redis 并订阅事件。目前我们使用 Redis 的 pub-sub 策略。

下面的代码示例解释了我在 Storm 中的 Jedis Connectivity to for Redis。

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?任何指导将不胜感激,即。文档,论坛答案。

【问题讨论】:

    标签: java redis apache-storm jedis redis-cluster


    【解决方案1】:

    这是 apache-storm 的一个常见问题,其中连接线程处于过时状态,尽管您使用的源已关闭/重新启动。理想情况下,它应该重试创建新的连接线程,而不是重用现有的连接线程。因此,想法是通过检测异常(例如 JMS 中的 JMSConnectionError)使其自动化。

    参考这个Failover Consumer Example,它将让你简要了解在这种情况下该怎么做。(PS 这是 JMS,在你的情况下是 JMS。)

    步骤是这样的。

    1. 在出现错误或连接丢失时捕获异常。
    2. 从 catch 初始化连接(如果不是由程序自愿关闭)。
    3. 如果异常进入第 1 步。

    【讨论】:

      猜你喜欢
      • 2016-04-16
      • 2021-06-02
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      • 2018-04-22
      • 1970-01-01
      相关资源
      最近更新 更多