GRPC无法发起远程调用

//1.创建一个server对象,声明监听端口port
//2.同时通过new方法实例化NewsService(),通过addService加入其中,说明grpc需要管理这个NewService对象,这样远程才会发起对NewService的调用工作
//3.  .build()完成构建,start()启动服务
io.grpc.Server server = ServerBuilder.forPort(port)
        .addService(gRPCSyslogApiService)
        .addService(gRPCSyslogService)
        .addService(ProtoReflectionService.newInstance())
        .build()
        .start();
System.out.println(String.format("GRPC服务端启动成功,端口号为: %d", grpcPort));
//等待服务关闭,这样是服务一直等待使用的状态了
server.awaitTermination();
RPC (Remote Procedure Call) 是一种允许应用程序在分布式系统中调用远端服务器上的函数的技术。下面是使用RPC进行远程调用的一般步骤: 1. **定义接口**[^1]: 在客户端和服务端都需要定义相同的服务接口。接口通常包含了函数签名,包括函数名、输入参数类型和返回值类型。 ```markdown // 定义接口 interface MyService { int add(int a, int b); } ``` 2. **服务端实现**: 服务端实现该接口,暴露给其他应用访问。这通常涉及到创建服务器实例,注册服务以及监听请求。 ```java class MyServiceImpl implements MyService { public int add(int a, int b) { return a + b; } } Server server = new ServerImpl(MyServiceImpl.class); server.start(); ``` 3. **序列化与反序列化**: 调用方需要将请求参数序列化成可以发送的数据结构,服务端接收到后解序列化以执行相应的函数。常见的序列化库有JSON-RPC或Thrift。 ```json // 序列化请求 request = {"method": "add", "params": [2, 3], "id": 1} // 反序列化响应 response = json.loads(service.call(request)) ``` 4. **发起请求**: 客户端通过网络向服务端发送请求,通常通过TCP/IP协议。 ```python import grpc stub = channel.unary_unary_rpc_method_handler( '/my/package/MyService/add', request_serializer=my_package.MyRequest.SerializeToString, response_deserializer=my_package.MyResponse.FromString) result = stub.add(request) ``` 5. **接收响应**: 服务端处理请求并返回结果,客户端解析响应并处理结果。 ```python print("Result:", result.result) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值