JHipster是否支持微服务间REST API调用?能否通过JDL定义?
JHipster微服务间REST调用方案解析
基础支持情况
JHipster完全支持微服务A通过REST API调用微服务B的场景,不管你想用RestTemplate还是Feign,都有可行的实现路径。
基于RestTemplate的实现(结合JDL)
JHipster的JDL本身不会直接生成RestTemplate的调用代码,但可以用它来定义微服务B的实体和API接口,之后再手动实现RestTemplate客户端:
- 先用JDL定义微服务B的业务模型与API,示例:
生成微服务B后,会自动生成标准的CRUD REST接口,你可以基于这些接口来编写调用逻辑。entity Book { title String required isbn String required unique } service BookService with serviceClass api Book with rest - 在微服务A中,创建一个客户端类,注入RestTemplate实例,直接调用微服务B的API:
@Service public class BookClient { private final RestTemplate restTemplate; private final String serviceBBaseUrl = "http://service-b/api/books"; public BookClient(RestTemplate restTemplate) { this.restTemplate = restTemplate; } public Book fetchBookByIsbn(String isbn) { return restTemplate.getForObject(serviceBBaseUrl + "/isbn/{isbn}", Book.class, isbn); } } - 要是想通过JDL统一管理服务间的API依赖,可以自定义JDL扩展规则,或者用JDL的
microservice标记实体所属服务,再写个简单脚本自动生成RestTemplate客户端的基础代码。
关于generator-jhipster-feign-client模块
这个模块确实文档和示例都很匮乏,其实没必要用它——JHipster原生就支持Feign客户端的自动生成:
- 在JDL里给实体加上
microservice属性,指定它属于微服务B,示例:entity Book { title String required isbn String required unique } microservice Book with service-b - 生成微服务A的时候,选择生成Feign客户端选项,JHipster会自动在A中创建对应的Feign接口:
直接注入这个接口就能调用微服务B的API,比RestTemplate更简洁省心。@FeignClient(name = "service-b") public interface BookClient extends BookApi { }
总结
如果一定要用RestTemplate,JHipster是支持的,但需要你手动编写客户端代码,JDL可以帮你规范服务端的API定义;如果能切换到Feign,用JHipster原生的生成功能就足够了,完全没必要依赖那个第三方模块。
内容的提问来源于stack exchange,提问作者Sreedhar Singaraju
相关产品推荐
相关产品推荐

