• JERRY贵林
    2019-08-18
    波波老师,组合大于继承,baseResponse 定义成Response泛型对象不是更好么?里面塞一个<T> data属性,这样不用定义那么多Response了

    作者回复: 嗯,原来我认为如果Response用组合方式,由于Java范型的类型擦除问题,Feign会有反序列化问题,后来有学员提出新版的Feign可以正常反序列化组合方式的Response。

    后续会开发一个新项目,接口采用组合方式,作为本课程补充,会把项目地址贴在本课程下方评论区。

    
     6
  • 大老李
    2019-07-19
    你好,一般来说,spring feign不是一直被诟病性能差么?用dubbo会不会更好一些

    作者回复: 你好,如果说绝对性能,可能feign的确没有dubbo高,但是这个只有在通讯层是瓶颈时才有意义,大部分web应用的瓶颈大都在数据访问层,而不在通讯层。国外Netflix最高峰要承载全美1/3的流量,但是它的微服务通讯层是采用feign的,也没有性能问题一说。另外feign可以灵活装配,使用也简单,社区活跃支持好,这些都是它的亮点,dubbo使用门槛要高一点。当然,这两者没有绝对好坏,都用大规模成功应用场景,没有谁更好一说。

     1
     5
  • 永旭
    2019-07-19
    老师, 你好.
    实际项目中DTO中包含日期格式字段,导致传输格式不对, 或 时区问题. 在这次项目中用了 Instant 类型的日期, 之前没用过. 此项目是怎么规避这些问题呢 ?

    作者回复: 你好,用Instant比较简单,它是一个确定的UTC时间点(自1970零点过去的时间,精确到纳秒)。这个时间可以统一用于业务计算,存储和数据交换。具体展示的时候,可以转换成有时区的和带格式的时间。(An Instant is a moment on the timeline in UTC, a count of nanoseconds since the epoch of the first moment of 1970 UTC. Since most of your business logic, data storage, and data exchange should be in UTC, this is a handy class to be used often.)

    stackflow上有个贴,讲java时间类的差异和用法,配图,可以参考:
    https://stackoverflow.com/questions/32437550/whats-the-difference-between-instant-and-localdatetime

    
     4
  • WL
    2019-07-20
    请问一下老师两个问题
    1. 强类型的RPC接口是怎么通过契约自动生成服务器端和客户端的, 是采用创建动态代理对象的方式吗?
    2. Dubbo是不是就属于强类型的RPC端口.

    作者回复: 1. 通过契约生成客户端的做法有很多,可以生成接口+DTO,然后采用动态代理拼装出客户端,我记得以前的jax-ws就是这样生成的;也可以直接生成客户端实现代码+DTO方式,swagger生成的客户端很多采用这种方式。具体可以尝试下grpc的代码生成(https://grpc.io/),或者swagger代码生成(https://editor.swagger.io/),看看它们生成的客户端/服务端长啥样。
    2. Dubbo是强类型RPC风格框架,但是它没有契约支持,也没有代码生成,它通过代码库分享实现强类型客户端+服务器端,而且它仅限于Java语言。

    
     1
  • 老王的老李头
    2019-07-17
    dto会被复用的话,再往上提一层?

    作者回复: dto一般就是控制器层输入输出用,你指哪里需要复用的场景?

    
     1
  • 吾有良策,要起风了
    2020-02-03
    读资料,不如分享资料链接。

    作者回复: 你的具体问题是?

    
    
  • 旭东
    2020-02-01
    的确,陈皓老师建议使用httpcode

    作者回复: 都可以,只是设计风格(design style)而已,实际使用中保持一致性即可。

    
    
  • wind
    2019-11-15
    不禁点个赞。干货满满

    作者回复: 谢谢支持!加油!

    
    
  • 庄建斌
    2019-10-16
    忘记说,用的网关是用的SpringCloudZuul

    作者回复: 这个和网关关系不大,是启用SpringSecurity后端点需要认证造成。

    
    
  • 庄建斌
    2019-10-16
    请问老师。我根据您的项目源码,在采用feign进行服务间调用的时候,如果没有SpringSecurity对Resource进行保护的时候,能够正常使用feignClient进行访问。但一但开启SpringSecurityOauth2.0对Resource进行保护之后,FeignClient进行服务调用,总是会报FeignException,为401。我在网上找解决办法,一直没有找到,请问您有什么好的解决办法么?一方面对资源进行保护,还能实现服务间的通信?

    作者回复: 你好,你启用SpringSecurity以后,一些REST API端点的访问会提示未授权,也就是401错误。建议不要用SpringSecurity,如果确实要用,建议在SpringSecurity的安全配置中,将相关REST API排除(permitAll,不要认证即可访问),关于如何配置可以看SpringSecurity文档。

    注意,SpringSecurity是单块应用时代的产物,严格讲SpringSecurity安全框架并不适合微服务场景,我们的Staffjoy是微服务应用,有自己的安全处理机制和框架,一般不建议不要混用,除非你非常清除各自的工作原理。

    
    
  • Geek_548191
    2019-09-30
    先看了20讲再过来的,波波老师讲课循序渐进,条理清晰,干货很多,感谢!准备先学完这个课程,有需要再去学160讲。感谢!

    作者回复: 谢谢支持!加油!

    
    
  • james
    2019-08-20
    为什么 xx-svc 中的 controller 不继承 xx-api 中的 client 接口呢? 这样就做到一致性了啊

    作者回复: 嗯,这是一种优化,controller和client都实现一个接口,代码层强接口契约方式。

     1
    
  • james
    2019-08-20
    老师, 调用 fiegn 的一个方法需要先判断有无http错误, 然后判断是否出异常, 然后才是正常业务逻辑, 这部分应该是可以封装一下, 改为一行代码的吧

    作者回复: 你很细心,接口调用确实有冗余代码,可以进一步封装。一种方法是通过feign截获机制,预先把http异常和response失败场景统一封装处理掉,这样业务代码直接取值即可。

    
    
  • zero
    2019-07-23
    老师,请教个问题。
    前面的章节中有讲到全局异常处理,而本节在controller中还是出现了try catch语句。这块为啥不用全局异常处理呢?

    作者回复: Staffjoy项目的Controller层很少有try catch,Service层应该还是有不少try catch然后再往外抛的情况。这个和全局异常处理不矛盾,可以在Service等下层对异常进行预处理(因为异常处理的一个原则是就近处理),然后再往上层抛,最终由统一异常捕获和处理。

    
    
  • 箭飞天
    2019-07-19
    老师 你好
    接口返回数据为什么不考虑泛型?BaseResponse<T>, 这样各种派生的Response就不存在了

    作者回复: 你好,经过和学员交流,强类型接口也可以基于BaseResponse<T>方式实现,这样确实可以减少派生Response数量,后面我会开发一个新项目,采用这种方式实现,供大家参考。当然,目前的做法也是OK的,虽然派生的Response多一些,但是只要规范,也挺好,而且比较整齐直观。

    
    
  • 箭飞天
    2019-07-19
    老师 你好
    接口返回数据为什么不考虑泛型?BaseResponse<T>, 这样各种派生的Response就不存在了

    作者回复: 你好,经过和学员交流,强类型接口也可以基于BaseResponse<T>方式实现,这样确实可以减少派生Response数量,后面我会开发一个新项目,采用这种方式实现,供大家参考。当然,目前的做法也是OK的,虽然派生的Response多一些,但是只要规范,也挺好,而且比较整齐直观。

    
    
  • John
    2019-07-18
    看到feigh想到了代碼生成器swagger的code generator 波波能不能以後講一講常用的code generator比如yeoman mustache handlerbars jhipster等等 因為我們很大部分前端和後端的code的pattern都是一致的 所以善用code generator可以節省很多開發時間 大家同意麼

    作者回复: 你好,本课程主要关于微服务开发和云原生架构(也包括SpringBoot框架和K8s容器云的应用)。这里提到的代码生成,主要是基于服务契约IDL或者Swagger生成服务接口,这种做法开发服务比较规范,也可以提升研发效率。你讲的代码生成更偏应用脚手架的生成,这个属于另外一个应用开发领域,用好这些应用开发脚手架生成器,的确可以提升开发效率,业界也非常流行。

    
    
我们在线,来聊聊吧