【发布时间】:2019-07-14 13:53:00
【问题描述】:
到目前为止,我已经构建了一个简单的客户端-服务器架构并对其进行管理以使其正常工作。我能够发送请求并返回有效响应。
我的问题是如何让客户端拥有多个 grpc 服务器才能分发工作。假设我有一个主服务器(客户端),它将请求发送到不同机器上的多个服务器(因此不同的 IP)。在客户端有什么可以帮助我的吗?有一个主机和端口列表并创建一个负载均衡器/管理通道工厂? 问题是我想让多台机器连接到分布式系统中的一台主机。 grpc 中的每个请求都是一个文件,服务器(worker)计算它并返回一个响应。
谢谢。到目前为止,这里是使用 grpc 的客户端/服务器的代码,它工作得很好。
客户端
@Component
public class DocumentParserClient {
private static final Logger LOGGER = LoggerFactory.getLogger(DocumentParserClient.class);
private static final String GRPC_HOST = "localhost";
private static final int GRPC_PORT_I1 = 6565;
private static final int GRPC_PORT_I2 = 6566;
private ManagedChannel managedChannel;
private WikiDocParserGrpc.WikiDocParserBlockingStub wikiDocParserBlockingStub;
@PostConstruct
private void init() {
this.managedChannel = ManagedChannelBuilder.forAddress(GRPC_HOST, GRPC_PORT_I1).usePlaintext(true).build();
this.wikiDocParserBlockingStub = WikiDocParserGrpc.newBlockingStub(managedChannel);
}
public String parseDocument(WikiOWrapperDto wikiOWrapperDto) {
long start = System.currentTimeMillis();
LOGGER.info("client sending {}",start);
WikiOWrapper wikiOWrapper = GrpcDtoTransform.wrapINPUTFromDtoToGRPC(wikiOWrapperDto);
LOGGER.info("client parsing {}", System.currentTimeMillis() - start);
TokenCompressorDoc tokenCompressorDoc = wikiDocParserBlockingStub.parseWikiDOC(wikiOWrapper);
LOGGER.info("client received {}", System.currentTimeMillis() - start);
return "Success";
}
}
服务器端
@GRpcService
public class WikiDocParserGrpcService extends WikiDocParserGrpc.WikiDocParserImplBase {
private static final Logger LOGGER = LoggerFactory.getLogger(WikiDocParserGrpcService.class);
private JSoupParser jSoupParser;
@Autowired
public WikiDocParserGrpcService(JSoupParser jSoupParser) {
this.jSoupParser = jSoupParser;
}
@Override
public void parseWikiDOC(WikiOWrapper wikiOWrapper, StreamObserver<TokenCompressorDoc> responseObserver) {
long start = System.currentTimeMillis();
LOGGER.info("server received {}", start);
WikiOWrapperDto wikiOWrapperDto = GrpcDtoTransform.wrapOUTPUTfromGrpcToDto(wikiOWrapper);
TokenCompressorDocDto tokenCompressorDocDto = jSoupParser.parseJsonParseWrapperFromObject(wikiOWrapperDto);
responseObserver.onNext(GrpcDtoTransform.wrapOUTPUTFromGRPCToDto(tokenCompressorDocDto));
responseObserver.onCompleted();
LOGGER.info("server responded in {}", System.currentTimeMillis()- start);
}
}
【问题讨论】:
标签: java client-server load-balancing grpc