-
-
Save cfredri4/ab7256d8184da46c01a9c0c0395f9b35 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public final class UdsNettyChannelProvider extends ManagedChannelProvider { | |
private static final String UDS_PREFIX = "unix:"; | |
@Override | |
public boolean isAvailable() { | |
return true; | |
} | |
@Override | |
public int priority() { | |
// Must be higher priority than NettyChannelBuilder | |
return 6; | |
} | |
@Override | |
public NettyChannelBuilder builderForAddress(String name, int port) { | |
return NettyChannelBuilder.forAddress(name, port); | |
} | |
@Override | |
public NettyChannelBuilder builderForTarget(String target) { | |
if (target.startsWith(UDS_PREFIX)) { | |
return NettyChannelBuilder.forAddress(new DomainSocketAddress(target.substring(UDS_PREFIX.length()))) | |
.eventLoopGroup(new EpollEventLoopGroup()) | |
.channelType(EpollDomainSocketChannel.class); | |
} else { | |
return NettyChannelBuilder.forTarget(target); | |
} | |
} | |
@Override | |
public NewChannelBuilderResult newChannelBuilder(String target, ChannelCredentials creds) { | |
try { | |
NettyChannelBuilder builder; | |
if (target.startsWith(UDS_PREFIX)) { | |
builder = NettyChannelBuilder.forAddress(new DomainSocketAddress(target.substring(UDS_PREFIX.length())), creds) | |
.eventLoopGroup(new EpollEventLoopGroup()) | |
.channelType(EpollDomainSocketChannel.class); | |
} else { | |
builder = NettyChannelBuilder.forTarget(target, creds); | |
} | |
return NewChannelBuilderResult.channelBuilder(builder); | |
} catch (IllegalArgumentException e) { | |
return NewChannelBuilderResult.error(e.getMessage()); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment