在 Spring Boot 中使用 gRPC 进行通讯(三) - 构造客户端

上一篇文章,我们实现服务端。在本文中,我们将实现访问该服务的客户端。

使用 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

查看结果。

本文标题:在 Spring Boot 中使用 gRPC 进行通讯(三) - 构造客户端

文章作者:晨星

发布时间:2020年01月16日 - 21:01

最后更新:2020年09月16日 - 08:09

原始链接:https://www.mls-tech.info/java/springboot-use-grpc-03/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。