Skip to content

Instantly share code, notes, and snippets.

@cfredri4
Created March 9, 2022 18:28
Show Gist options
  • Save cfredri4/ab7256d8184da46c01a9c0c0395f9b35 to your computer and use it in GitHub Desktop.
Save cfredri4/ab7256d8184da46c01a9c0c0395f9b35 to your computer and use it in GitHub Desktop.
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