Ich muss mit Passwort Azure Redis Cluster, verwenden, mit SSL, mit Pipelining Unterstützung.Azure Redis SSL Cluster + Salat Java (EDIT: Salat-Version <4.2)
Ich war Jedis mit bis jetzt, aber es fehlt die Unterstützung für Cluster + ssl + Passwort + Pipelining-Combo.
Ich habe versucht, Salat (https://github.com/mp911de/lettuce/releases/tag/4.1.2.Final) und traf zur Zeit eine Verbindung Problem, das ich nicht in der Lage bin, mich frei zu lösen.
zu einer Azure Redis Cluster anschließen (2 * P4) arbeitet ohne SSL aber nicht mit. Ich kann auch mit einem einzelnen Knoten mit SSL aber ohne Cluster-Unterstützung verbinden. Problem ist, wenn Cluster + ssl kombiniert, der Auth-Anruf Zeitlimit (der Befehl wird über die Leitung gesendet aber Timeout).
Der Cluster ohne SSL Arbeits Code wie folgt aussieht:
RedisURI redisURI = RedisURI.Builder.redis(host, 6380)
.withPassword(password)
.withSsl(true)
.build();
RedisClusterClient client = RedisClusterClient.create(redisURI);
RedisAdvancedClusterCommands<String, String> connection = client.connect().sync();
connection.set("a", "1");
System.out.println(connection.get("a"));
Es hängt während 1 Minute und log4j Protokolle wie folgt aussieht:
RedisURI redisURI = RedisURI.Builder.redis(host, 6379)
.withPassword(password)
.build();
RedisClusterClient client = RedisClusterClient.create(redisURI);
RedisAdvancedClusterCommands<String, String> connection = client.connect().sync();
connection.set("a", "1");
System.out.println(connection.get("a"));
Ausgabe 1
Aktivieren von SSL ist:
2016-05-26 14:25:17,110 | TRACE | lettuce-nioEventLoop-3-1 | CommandEncoder | [/{CLIENT} -> {HOST}/{IP}:6380] Sent: *2
$4
AUTH
$44
{PASSWORD}
2016-05-26 14:26:17,134 | WARN | main | ClusterTopologyRefresh | Cannot connect to RedisURI [host='***', port=6380]
com.lambdaworks.redis.RedisCommandTimeoutException: Command timed out
at com.lambdaworks.redis.LettuceFutures.await(LettuceFutures.java:95)
at com.lambdaworks.redis.LettuceFutures.awaitOrCancel(LettuceFutures.java:74)
at com.lambdaworks.redis.AbstractRedisAsyncCommands.auth(AbstractRedisAsyncCommands.java:64)
at com.lambdaworks.redis.cluster.RedisClusterClient.connectToNode(RedisClusterClient.java:342)
at com.lambdaworks.redis.cluster.RedisClusterClient.connectToNode(RedisClusterClient.java:301)
at com.lambdaworks.redis.cluster.ClusterTopologyRefresh.getConnections(ClusterTopologyRefresh.java:240)
at com.lambdaworks.redis.cluster.ClusterTopologyRefresh.loadViews(ClusterTopologyRefresh.java:132)
at com.lambdaworks.redis.cluster.RedisClusterClient.loadPartitions(RedisClusterClient.java:468)
at com.lambdaworks.redis.cluster.RedisClusterClient.initializePartitions(RedisClusterClient.java:445)
at com.lambdaworks.redis.cluster.RedisClusterClient.connectClusterImpl(RedisClusterClient.java:359)
at com.lambdaworks.redis.cluster.RedisClusterClient.connect(RedisClusterClient.java:244)
at com.lambdaworks.redis.cluster.RedisClusterClient.connect(RedisClusterClient.java:231)
at com.ubikod.ermin.reach.tools.Test.main(Test.java:20)
Exception in thread "main" com.lambdaworks.redis.RedisException: Cannot retrieve initial cluster partitions from initial URIs [RedisURI [host='***', port=6380]]
at com.lambdaworks.redis.cluster.RedisClusterClient.loadPartitions(RedisClusterClient.java:471)
at com.lambdaworks.redis.cluster.RedisClusterClient.initializePartitions(RedisClusterClient.java:445)
at com.lambdaworks.redis.cluster.RedisClusterClient.connectClusterImpl(RedisClusterClient.java:359)
at com.lambdaworks.redis.cluster.RedisClusterClient.connect(RedisClusterClient.java:244)
at com.lambdaworks.redis.cluster.RedisClusterClient.connect(RedisClusterClient.java:231)
at com.ubikod.ermin.reach.tools.Test.main(Test.java:20)
Keeping SSL und Deaktivieren von Cluster funktioniert:
RedisURI redisURI = RedisURI.Builder.redis(host, 6380)
.withPassword(password)
.withSsl(true)
.build();
RedisClient client = RedisClient.create(redisURI);
RedisCommands<String, String> connection = client.connect().sync();
connection.set("a", "1");
System.out.println(connection.get("a"));
das ist also nicht nur ein SSL-Problem, es ist ein SSL + Cluster Combo Problem. Ich habe versucht, withStartTls
zu verwenden, Peer-Verifizierung deaktivieren, das Timeout erhöhen, jede Kombination von denen ohne Glück.
Jede Idee, wenn es sich um eine Bibliothek Bug oder ein Azure Redis Fehler ist?
Seine tatsächlich in der bevorstehenden 4.2 Release-Serie unterstützt. Wenn jemand es versuchen möchte, finden Sie die Snapshot-Builds unter https://oss.sonatype.org/content/repositories/snapshots/biz/paluch/redis/letuce/4.2-SNAPSHOT/ –
@GuillaumePerrot Vielen Dank für Ihre Freigabe! –