add ability to use RoundRobinDnsAddressResolverGroup in Connection manager.

pull/1300/head
Hai Saadon 7 years ago
parent 6ed4e844fd
commit a8532ee4e5

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

@ -0,0 +1,16 @@
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 = RoundRobinDnsAddressResolverGroup::new;
AddressResolverGroupFactory DNS_ADDRESS_RESOLVER_GROUP = DnsAddressResolverGroup::new;
}

@ -190,7 +190,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
}
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) {
if (cfg.getEventLoopGroup() == null) {
this.group = new KQueueEventLoopGroup(cfg.getNettyThreads(), new DefaultThreadFactory("redisson-netty"));
@ -199,7 +199,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
}
this.socketChannelClass = KQueueSocketChannel.class;
this.resolverGroup = new DnsAddressResolverGroup(KQueueDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault());
this.resolverGroup = cfg.getAddressResolverGroupFactory().create(KQueueDatagramChannel.class, DnsServerAddressStreamProviders.platformDefault());
} else {
if (cfg.getEventLoopGroup() == null) {
this.group = new NioEventLoopGroup(cfg.getNettyThreads(), new DefaultThreadFactory("redisson-netty"));
@ -208,7 +208,7 @@ public class MasterSlaveConnectionManager implements ConnectionManager {
}
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) {

Loading…
Cancel
Save