- 配置文件application.yml:
spring:
application:
name: client-stream-server-side
gRPC有关的配置,这里只需要配置服务端口号
grpc:
server:
port: 9900
-
启动类ClientStreamServerSideApplication.java的代码就不贴了,普通的springboot启动类而已;
-
重点是提供grpc服务的GrpcServerService.java,请结合前面小结的第五点来阅读代码,咱们要做的就是给上层框架返回一个匿名类,至于里面的onNext、onCompleted方法何时被调用是上层框架决定的,另外还准备了成员变量totalCount,这样就可以记录总数了:
package com.bolingcavalry.grpctutorials;
import com.bolingcavalry.grpctutorials.lib.AddCartReply;
import com.bolingcavalry.grpctutorials.lib.CartServiceGrpc;
import com.bolingcavalry.grpctutorials.lib.ProductOrder;
import io.grpc.stub.StreamObserver;
import lombok.extern.slf4j.Slf4j;
import net.devh.boot.grpc.server.service.GrpcService;
@GrpcService
@Slf4j
public class GrpcServerService extends CartServiceGrpc.CartServiceImplBase {
@Override
public StreamObserver addToCart(StreamObserver responseObserver) {
// 返回匿名类,给上层框架使用
return new StreamObserver() {
// 记录处理产品的总量
private int totalCount = 0;
@Override
public void onNext(ProductOrder value) {
log.info(“正在处理商品[{}],数量为[{}]”,
value.getProductId(),
value.getNumber());
// 增加总量
totalCount += value.getNumber();
}
@Override
public void onError(Throwable t) {
log.error(“添加购物车异常”, t);
}
@Override
public void onCompleted() {
log.info(“添加购物车完成,共计[{}]件商品”, totalCount);
responseObserver.onNext(AddCartReply.newBuilder()
.setCode(10000)
.setMessage(String.format(“添加购物车完成,共计[%d]件商品”, totalCount))
.build());
responseObserver.onCompleted();
}
};
}
}
开发客户端应用
- 在父工程grpc-turtorials下面新建名为client-stream-server-side的模块,其build.gradle内容如下: