Merge pull request #1308 from haiS8dn/master

add ability to use RoundRobinDnsAddressResolverGroup in Connection manager.
pull/1253/merge
Nikita Koksharov 7 years ago committed by GitHub
commit 5f69136517
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -27,6 +27,7 @@ import org.redisson.codec.DefaultReferenceCodecProvider;
import org.redisson.codec.JsonJacksonCodec; import org.redisson.codec.JsonJacksonCodec;
import org.redisson.codec.ReferenceCodecProvider; import org.redisson.codec.ReferenceCodecProvider;
import org.redisson.connection.ConnectionManager; import org.redisson.connection.ConnectionManager;
import org.redisson.connection.AddressResolverGroupFactory;
import org.redisson.connection.ReplicatedConnectionManager; import org.redisson.connection.ReplicatedConnectionManager;
import io.netty.channel.EventLoopGroup; import io.netty.channel.EventLoopGroup;
@ -86,6 +87,11 @@ public class Config {
private boolean keepPubSubOrder = true; private boolean keepPubSubOrder = true;
/**
* AddressResolverGroupFactory switch between default and round robin
*/
private AddressResolverGroupFactory addressResolverGroupFactory = AddressResolverGroupFactory.DNS_ADDRESS_RESOLVER_GROUP;
public Config() { public Config() {
} }
@ -107,7 +113,8 @@ public class Config {
setReferenceEnabled(oldConf.isReferenceEnabled()); setReferenceEnabled(oldConf.isReferenceEnabled());
setEventLoopGroup(oldConf.getEventLoopGroup()); setEventLoopGroup(oldConf.getEventLoopGroup());
setTransportMode(oldConf.getTransportMode()); setTransportMode(oldConf.getTransportMode());
setAddressResolverGroupFactory(oldConf.getAddressResolverGroupFactory());
if (oldConf.getSingleServerConfig() != null) { if (oldConf.getSingleServerConfig() != null) {
setSingleServerConfig(new SingleServerConfig(oldConf.getSingleServerConfig())); setSingleServerConfig(new SingleServerConfig(oldConf.getSingleServerConfig()));
} }
@ -591,6 +598,17 @@ public class Config {
return keepPubSubOrder; return keepPubSubOrder;
} }
/**
* Used to switch between {@link io.netty.resolver.dns.DnsAddressResolverGroup} implementations.
* Switch to round robin {@link io.netty.resolver.dns.RoundRobinDnsAddressResolverGroup} when you need to optimize the url resolving.
* @param addressResolverGroupFactory
*/
public void setAddressResolverGroupFactory(AddressResolverGroupFactory addressResolverGroupFactory) {
this.addressResolverGroupFactory = addressResolverGroupFactory;
}
public AddressResolverGroupFactory getAddressResolverGroupFactory() {
return addressResolverGroupFactory;
}
/** /**
* Read config object stored in JSON format from <code>String</code> * Read config object stored in JSON format from <code>String</code>

@ -0,0 +1,27 @@
package org.redisson.connection;
import io.netty.channel.socket.DatagramChannel;
import io.netty.resolver.dns.DnsAddressResolverGroup;
import io.netty.resolver.dns.DnsServerAddressStreamProvider;
import io.netty.resolver.dns.RoundRobinDnsAddressResolverGroup;
/**
* Created by hasaadon on 15/02/2018.
*/
public interface AddressResolverGroupFactory {
DnsAddressResolverGroup create(Class<? extends DatagramChannel> channelType, DnsServerAddressStreamProvider nameServerProvider);
AddressResolverGroupFactory ROUND_ROBIN_DNS_ADDRESS_RESOLVER_GROUP = new AddressResolverGroupFactory() {
@Override
public DnsAddressResolverGroup create(Class<? extends DatagramChannel> channelType, DnsServerAddressStreamProvider nameServerProvider) {
return new RoundRobinDnsAddressResolverGroup(channelType, nameServerProvider);
}
};
AddressResolverGroupFactory DNS_ADDRESS_RESOLVER_GROUP = new AddressResolverGroupFactory() {
@Override
public DnsAddressResolverGroup create(Class<? extends DatagramChannel> channelType, DnsServerAddressStreamProvider nameServerProvider) {
return new DnsAddressResolverGroup(channelType, nameServerProvider);
}
};
}

@ -190,7 +190,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
} }
this.socketChannelClass = EpollSocketChannel.class; this.socketChannelClass = EpollSocketChannel.class;
this.resolverGroup = new DnsAddressResolverGroup(EpollDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault()); this.resolverGroup = cfg.getAddressResolverGroupFactory().create(EpollDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault());
} else if (cfg.getTransportMode() == TransportMode.KQUEUE) { } else if (cfg.getTransportMode() == TransportMode.KQUEUE) {
if (cfg.getEventLoopGroup() == null) { if (cfg.getEventLoopGroup() == null) {
this.group = new KQueueEventLoopGroup(cfg.getNettyThreads(), new DefaultThreadFactory("redisson-netty")); this.group = new KQueueEventLoopGroup(cfg.getNettyThreads(), new DefaultThreadFactory("redisson-netty"));
@ -199,7 +199,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
} }
this.socketChannelClass = KQueueSocketChannel.class; this.socketChannelClass = KQueueSocketChannel.class;
this.resolverGroup = new DnsAddressResolverGroup(KQueueDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault()); this.resolverGroup = cfg.getAddressResolverGroupFactory().create(KQueueDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault());
} else { } else {
if (cfg.getEventLoopGroup() == null) { if (cfg.getEventLoopGroup() == null) {
this.group = new NioEventLoopGroup(cfg.getNettyThreads(), new DefaultThreadFactory("redisson-netty")); this.group = new NioEventLoopGroup(cfg.getNettyThreads(), new DefaultThreadFactory("redisson-netty"));
@ -208,7 +208,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
} }
this.socketChannelClass = NioSocketChannel.class; this.socketChannelClass = NioSocketChannel.class;
this.resolverGroup = new DnsAddressResolverGroup(NioDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault()); this.resolverGroup = cfg.getAddressResolverGroupFactory().create(NioDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault());
} }
if (cfg.getExecutor() == null) { if (cfg.getExecutor() == null) {

Loading…
Cancel
Save