在 上一篇文章,我们实现服务端。在本文中,我们将实现访问该服务的客户端。
使用 Spring Boot Start建立一个名为: account-grpc-server 的项目:
groupId: cn.com.hohistar.training
artifactId: account-grpc-client
选择 Web 和 Lombok 两个依赖。下载后将项目导入 IDEA 或 Eclipse 中(Maven 项目类型)。然后打开 pom.xml 文件,加入以下依赖:
1 2 3 4 5 6 7 8 9 10 11
| <dependency> <groupId>net.devh</groupId> <artifactId>grpc-client-spring-boot-starter</artifactId> <version>2.6.1.RELEASE</version> </dependency>
<dependency> <groupId>cn.com.hohistar.spbt</groupId> <artifactId>account-grpc-intf</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
|
第二个依赖就是我们在上一篇文章中建立的接口库
实现客户端
在 src/main/java 下新建一个名为: cn.com.hohistar.training.accountgrpcclient.gclient 的包,在包中新建名为: AccountHistoryClient 的类,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| @Component public class AccountHistoryClient {
private static final Logger LOG = LoggerFactory.getLogger(AccountHistoryClient.class);
@GrpcClient("account-grpc-service") private AccountHistoryServiceGrpc.AccountHistoryServiceBlockingStub accountStub;
public String handleOrder(String prod, Integer orderId, Integer count) {
String res = "";
AccountHistoryRequest.Builder reqBuilder = AccountHistoryRequest.newBuilder(); reqBuilder.setProd(prod); reqBuilder.setOrderId(orderId); reqBuilder.setCount(count);
try { AccountHistoryResponse resp = accountStub.handleOrder(reqBuilder.build()); res = resp.getResult(); } catch(StatusRuntimeException e) { LOG.error("Error when handleOrder: ", e); } return res; } }
|
将 src/main/resources 中的 application.properties 改名为: application.yml,并加入以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13
| server: port: 8083 spring: application: name: order-service
grpc: client: account-grpc-service: address: 'static://127.0.0.1:9090' enableKeepAlive: true keepAliveWithoutCalls: true negotiationType: plaintext
|
构建一个简单的Web服务来调用该客户端
新建名为: cn.com.hohistar.training.accountgrpcclient.biz 的包, 然后在包中建名为: OrderBiz 的类,内容如下:
1 2 3 4 5 6 7 8 9 10 11
| @Service public class OrderBiz {
@Autowired private AccountHistoryClient accountHistoryClient;
public String confirmOrder() {
return accountHistoryClient.handleOrder("tom", 1, 20); } }
|
新建名为: cn.com.hohistar.training.accountgrpcclient.api 的包,然后在包中新建一个名为: OrderApi 的类,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12
| @RestController public class OrderApi {
@Autowired private OrderBiz orderBiz;
@RequestMapping("/api/order") public String confirmOrder() {
return orderBiz.confirmOrder(); } }
|
现在可以启动应用,然后用浏览器访问:
1
| http://localhost:8083/api/order
|
查看结果。