diff --git a/redisson/src/main/java/org/redisson/config/SentinelServersConfig.java b/redisson/src/main/java/org/redisson/config/SentinelServersConfig.java index b1f182e65..bad5b7e9e 100644 --- a/redisson/src/main/java/org/redisson/config/SentinelServersConfig.java +++ b/redisson/src/main/java/org/redisson/config/SentinelServersConfig.java @@ -17,7 +17,11 @@ package org.redisson.config; import java.net.URI; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; + import org.redisson.misc.URIBuilder; /** @@ -28,6 +32,8 @@ import org.redisson.misc.URIBuilder; public class SentinelServersConfig extends BaseMasterSlaveServersConfig { private List sentinelAddresses = new ArrayList(); + + private Map natMap = Collections.emptyMap(); private String masterName; @@ -50,6 +56,7 @@ public class SentinelServersConfig extends BaseMasterSlaveServersConfig(config.getNatMap())); } /** @@ -114,4 +121,19 @@ public class SentinelServersConfig extends BaseMasterSlaveServersConfig getNatMap() { + return natMap; + } + + /** + * Defines NAT mapping. Address as a map key is replaced with mapped address as value. + * + * @param natMap - nat mapping + * @return config + */ + public SentinelServersConfig setNatMap(Map natMap) { + this.natMap = natMap; + return this; + } + } diff --git a/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java b/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java index b4116768a..66c0e2ff1 100755 --- a/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/SentinelConnectionManager.java @@ -79,6 +79,8 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager { private final Set disconnectedSlaves = new HashSet<>(); private ScheduledFuture monitorFuture; private AddressResolver sentinelResolver; + + private final Map natMap; private boolean usePassword = false; @@ -95,6 +97,8 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager { this.config = create(cfg); initTimer(this.config); + this.natMap=cfg.getNatMap(); + this.sentinelResolver = resolverGroup.getResolver(getGroup().next()); for (URI addr : cfg.getSentinelAddresses()) { @@ -469,8 +473,14 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager { } private String createAddress(String host, Object port) { - if (host.contains(":") && !host.startsWith("[")) { - host = "[" + host + "]"; + if (host.contains(":")){ + String pureHost = host.replaceAll("[\\[\\]]",""); + host = applyNatMap(pureHost); + if(host.contains(":")){ + host = "[" + host + "]"; + } + }else { + host=applyNatMap(host); } return "redis://" + host + ":" + port; } @@ -607,5 +617,13 @@ public class SentinelConnectionManager extends MasterSlaveConnectionManager { super.shutdown(); } + + private String applyNatMap(String ip) { + String mappedAddress = natMap.get(ip); + if (mappedAddress != null) { + return mappedAddress; + } + return ip; + } }