本篇主要介绍了Quarkus中的远程调用,云原生JAVA开发框架项目的结构采用了传统的微服务模式。演示了如何编写符合istio的Quarkus java 程序。

 一、项目准备

 1、创建一个项目xyzshop,包括三个模块(按照 dubbo,spring cloud 示例的方式来组织):

 2、xyzshop-api: facade 模块,包含接口,方法的声明

 3、xyzshop-provider: 服务的具体实现

 4、xyzshop-consumer: 服务调用方

 本示例源码参见:https://github.com/cloudbeer/quarkus-demo-xyzdemo

 二、facade 模块

 facade 模块会被不同的模块引用,服务提供者来实现它,服务消费者通过引用它提供简化调用,这个包应该减小体积,去除非必要外部依赖。

 本示例的facade 模块是 xyzshop-api, 里包含了实体类以及 OrderService 接口。

 接口中可以约定接口的 restful 地址和配置。

云原生JAVA开发框架项目在Quarkus中的远程调用(图1)

 为了能让 facade 模块能被注入,需要在编译的时候加入 CDI 索引。

 在 pom.xml 中加入如下配置:

云原生JAVA开发框架项目在Quarkus中的远程调用(图2)

 三、provider 模块

 xyzshop-provider 比较简单,直接引用xyzshop-api,实现接口就可以了。

 但为了让 Quarkus 能找到资源,需要在实现类中加入 @Path 标记。

云原生JAVA开发框架项目在Quarkus中的远程调用(图3)

 使用 mvn compile quarkus:dev 启动项目即可。

 四、consumer 模块

 需要在配置里指定服务的远程调用地址:

云原生JAVA开发框架项目在Quarkus中的远程调用(图4)

 部署的时候,我会把 k8s 的服务提供者部署成 xyzshop-provider,端口 8080。

 但在本地开发的时候,用 http://localhost:8080 就好。

 消费端的代码示例如下:

云原生JAVA开发框架项目在Quarkus中的远程调用(图5)

 同时启动,需要重新配置一下启动端口,在 application.properties 文件中:

云原生JAVA开发框架项目在Quarkus中的远程调用(图6)

 启动的时候有个警告 debug 端口被占用,可以重新指定一下,请使用下面的命令启动:

云原生JAVA开发框架项目在Quarkus中的远程调用(图7)

 rest-client 扩展已经在 rpc 中内置了 opentracing 的 header。istio 的调用链追踪可以完美支持。

分享
继续阅读相关文章

发表评论 快来秀出你的观点

评论区暂时关闭,请谅解!
评论 点赞 收藏