我有一个微服务相关的疑惑,求大佬指点一下.
我在做课程设计的时候产生了一个疑问,打个比方:我现在有两个微服务,一个是用户服务,已经提供了通过访问 /users/{id} 的方式获取完整用户信息的功能,另一个是B服务,这个 B 服务需要使用一个通过用户 id 获取用户名的功能,且仅仅只需要用户名即可(并且这个功能并不想暴露给用户,emm,对于这里的确不合理,但这里只是举个例子,能懂我的意思就行)。如果直接通过 feign 访问 /users/xx 获取完整用户信息再取出用户名,总感觉太多余;如果在用户服务的 Controller 里添加通过 id 获取用户名的 handler 的话,为了让 B 服务访问,而普通用户不能访问,则需要在网关处做额外的配置。(我目前就只能想出这两个方法,如果能有更简便的方法,求指点啊。。。)
与之相比,在 SOA 架构下的话,我感觉好像就能很容易解决,只需要往 UserService 接口中添加这个功能,并实现即可,B 服务可以从注册中心直接拿到 UserService 中的这个功能,不会出现微服务中必须在 controller 中写 handler 的情况,也就不会出现暴露给用户的问题。
归根结底而言,我现在感觉到的问题就是,微服务之间的数据传递要通过 http 请求,并返回 json 的方式获取,而 json 中的数据往往都是 View Object,对于用户而言,无可厚非,但对于项目中的其他服务而言,这个 json 中的数据可能有太多都是无用的,往往更需要的是 Data Transfer Object ,可这些数据很可能是不能暴露给用户的。如果非要这么做,就必须在网关做额外处理。相较 SOA 着实麻烦了很多,所以就想问问大佬们,在微服务架构下,这样的情况有什么好的方式去处理?(我现在只是个刚大三的学生,0 工作经验啊,如果有什么说的不对的地方求轻喷。。。)