前言
现在越来越多的公司开始拥抱Spring Cloud了,Spring Boot做为下一代 web 框架,Spring Cloud 作为最新最火的微服务的翘楚,你还有什么理由拒绝。很多Java方向的同学也开始积极的学习Spring Cloud,其实这边还有一个问题就是说:虽然大家学了Eureka,Ribbon,Hystrix,Zuul,Feign等等,但是要运用到实际的项目中去还是有些难度的。
微服务难就难在服务的拆分上,框架只是工具,很多人都会用,服务拆分,服务之间的关系这些都是在拆分时候需要考虑的事情。
今天就有一位同学给我发邮件,咨询我下面2个问题:
下面以我自己的经验来做一些解答,仅供参考:
关于第一个问题中的API是各个微服务下的Controller?
我们所说的API其实就是一个接口,大部分都是用Spring MVC方式去开发的,也就是Controller中的一个加了注解的方法,注解就是我们常用的那几个:
- @RequestMapping
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
关于第一个问题中的是否需要统一的一个工程,在里面封装其他微服务的controller?
这种其实也没有固定的模式,大部分是直接通过API网关转发到你的业务服务上
以猿天地这样的博客网站的业务类举例:
有一个业务功能,当我查看具体的博客文章的时候,需要返回的信息如下:
- 博文
- 发布时间
- 作者
- 标签
- 阅读数量
- 评论信息
- 作者信息(昵称,介绍)
这个时候我们这个查看文章的接口其实就涉及到了3部分的数据,文章本身的信息,评论信息,作者的信息
就是有3个服务,用户服务,博客服务,评论服务
那么问题来了,涉及到多个服务之前的交互,其实跟上面那位同学问我的是一样的问题,是否需要统一工程,组装其他服务?是否可以相互调用?
这种的话我推荐2种实现方式:
一. API网关直接转发到博客服务中
我们这个API就是一个获取博文信息的接口,主体肯定是博客服务,在博客服务中有一个博文信息的接口,在接口中去调用用户服务提供的用户信息接口,还要去调用评论服务中博文的评论信息,下面看伪代码:
@GetMapping("/blog/detail/{id}")public BlogInfo blogInfo(@PathVariable("id") Long id) { // 获取博客信息 Blog blog = blogService.getById(id); // 获取用户信息 UserInfo userInfo = userFeignClient.getUserInfo(blog.getUserId()); // 获取评论信息 CommentInfo commentInfo = commentFeignClient.getCommentInfo(id); return 组装所有信息返回。 }
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- 在IDEA中如何配置Java开发环境?(IDEA中怎么配置Java开发环境)
- Java NoSQL 分布式部署的具体步骤是怎样的?(java nosql分布式部署如何进行)
- Java 依赖倒置原则的作用究竟是什么?(java依赖倒置的作用是什么)
- Redis客户端日志分析技巧:提升数据监控与性能优化
- Java Quarter 数据校准的详细步骤及技巧(java quarter如何进行数据校准)
- Java 中线程间通信的方法有哪些?(java线程间通信的方法是什么)
- Java 多线程批量处理的方法究竟有哪些?(java多线程批量处理的方法是什么)
- Java 中 BigDecimal 的详细介绍与实用使用方法(java中BigDecimal的介绍及使用)
- 如何通过 JavaScript 事件循环来优化代码?(JavaScript 事件循环如何优化代码)
- 如何用 Java 解析 XML 并获取标签属性值?(java怎么解析xml获取标签属性值)