当前位置: 首页 > 知识库问答 >
问题:

绝地武士:雷迪斯。客户。绝地武士。例外。JedisNoReachableClusterNodeException:群集中没有可访问的节点

司徒阳曜
2023-03-14

我试图从java连接到JedisCluster(ElastiCache Redis)。但是我得到了集群中没有可达节点的JedisConnectionExcema。

这是我连接JedisCluster的代码

public static void main(String[] args) throws IOException{
        final GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
        poolConfig.setMaxWaitMillis(2000);
        poolConfig.setMaxTotal(300);
        Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
        jedisClusterNode.add(new HostAndPort("mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com",6379));
        jedisClusterNode.add(new HostAndPort("mycachecluster.eaogs8.0002.usw2.cache.amazonaws.com",6379));
        JedisCluster jedisCluster = new JedisCluster(jedisClusterNode,poolConfig);
        System.out.println("Cluster Size...." + jedisCluster.getClusterNodes().size());
        try{
            jedisCluster.set("foo", "bar");
            jedisCluster.get("foo");
        }
        catch(Exception e){
            e.printStackTrace();
        }
        finally{
            jedisCluster.close();
        }
    }

运行这个之后我得到的异常

redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster
    at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnection(JedisSlotBasedConnectionHandler.java:57)
    at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnectionFromSlot(JedisSlotBasedConnectionHandler.java:74)
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:116)
    at redis.clients.jedis.JedisClusterCommand.run(JedisClusterCommand.java:31)
    at redis.clients.jedis.JedisCluster.set(JedisCluster.java:103)

我查过了

telnet mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com 6379

正如AWS文件中提到的,我得到的回复是连接的。

这里的问题是什么?为什么我不能使用java连接到JedisCluster?

注:

我用的是jedis版本2.9.0

更新:

在AWS中,传输加密和静止加密被激活

所以

Jedis jedis = null;
        try{
            jedis = new Jedis(URI.create("rediss://mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com:6379"));
            System.out.println(jedis.ping());
            System.out.println("XXXXX: "+jedis.get("c"));
        }
        catch(Exception exception){
            exception.printStackTrace();
        }
        finally{
            jedis.close();
        }

很好。但绝地武士团不是。

共有2个答案

幸阳波
2023-03-14

在启用SSL连接redis集群服务器时,JedisCluster出现了一些问题。即使有了最新的修订(截至2020年7月),我们也得到了例外JedisNoReachableClusterNodeExcema。关于各种服务器需求所需配置的文章非常少。

我们需要两种语言的库,一种是Java,另一种是Python。对于python,我使用了python redis py集群。而对于爪哇,我们最初尝试了绝地武士,然后是绝地武士团,但都没有帮助。我找到的另一个图书馆是

生菜

对于支持SSL的redis群集服务器,配置非常简单,并支持构建器模式来构造带有可选参数的连接对象。下面是创建并连接到redis cluster server的示例

RedisURI redisURI = RedisURI.Builder.redis("<<Redis Server primary endpoint>>", 6379).withSsl(true).withVerifyPeer(false).build();
RedisClusterClient redisClient  = RedisClusterClient.create(redisURI);
StatefulRedisClusterConnection<String, String> conn = redisClient.connect();
List<KeyValue<String, String>> res_1=  conn.sync().mget(keys...)_
conn.close();

但是请注意,如果redis服务器是一个单节点实例,那么即使是Jedis库也很好用。

上官高逸
2023-03-14

URI。创建(”rediss://...“,很明显,您正在使用Redis SSL方案来创建绝地武士的成功连接。但绝地武士团还没有SSL支持。

有一个悬而未决的功能请求。

 类似资料:
  • 我试图从绝地人才库中回收资源时出错了。代码如下。

  • 根据我的理解,使用JOhm和Jedis,可以在Redis中存储/检索java类对象。我有一个问题是,JOhm是否也将java对象保存在内存中,以便下次需要该对象(与key相关联)时,从内存返回该对象,而不是每次都从Redis读取该对象?

  • 我为数据可视化工具开发了一个插件。现在我想在它里面使用redis。当我在另一个项目(不在我的插件中)中尝试下面的redis代码时,效果很好。 但当我在插件中使用绝地武士时,我得到了由java引起的和错误。为了把我的插件安装到这个数据可视化工具上。我需要创建一个jar文件,我这样做了,它在不添加jedit部分的情况下运行良好。 我正在使用IntelliJ Idea,我创建了一个工件,并从顶部菜单中的

  • 所以,我有两个应用程序使用绝地武士。它们都连接到同一台服务器,其中一个监听发布以检查是否写入了某些内容。好吧,经过大约10个小时的持续使用和装载,设置/获取/发布/订阅等,绝地武士们返回了破碎的管道。我不知道为什么,因为我在绝地武士中有超时到0的时间。有什么想法吗?

  • 我已经通过了很多环节,比如绝地,无法获得绝地连接:无法从池中获得资源,无法获得绝地连接;无法从池中获取资源,但仍获取以下错误。 我在Spring Batch中使用Spring Data Redis,从mysql读取数据并写入redis DB。似乎有些连接错误。 下面的错误仅供参考。 我正在使用下面的简单配置。

  • 我们的应用程序使用并连接到,以下是我如何获得jedis资源: 这是我的绝地说唱者(统一资源管理): 是Jedis实例的容器,下面是我如何使用它: 请注意,可能非常大(例如可以达到最大8KB)。 每次我重启我们的应用程序,所有的redis连接都是正常的,但是几个小时后,异常出来了。频率变得越来越高,然后所有到Redis的连接都断开了,可以创建新的连接。 以下是我的配置: 异常堆栈跟踪: