作者回复: 嗯,原来我认为如果Response用组合方式,由于Java范型的类型擦除问题,Feign会有反序列化问题,后来有学员提出新版的Feign可以正常反序列化组合方式的Response。 后续会开发一个新项目,接口采用组合方式,作为本课程补充,会把项目地址贴在本课程下方评论区。
作者回复: 你好,如果说绝对性能,可能feign的确没有dubbo高,但是这个只有在通讯层是瓶颈时才有意义,大部分web应用的瓶颈大都在数据访问层,而不在通讯层。国外Netflix最高峰要承载全美1/3的流量,但是它的微服务通讯层是采用feign的,也没有性能问题一说。另外feign可以灵活装配,使用也简单,社区活跃支持好,这些都是它的亮点,dubbo使用门槛要高一点。当然,这两者没有绝对好坏,都用大规模成功应用场景,没有谁更好一说。
作者回复: 你好,用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
作者回复: 谢谢支持!加油!
作者回复: 嗯,可以考虑进一步包装简化,通过引入超类或者AOP等方式。
作者回复: 你好,你启用SpringSecurity以后,一些REST API端点的访问会提示未授权,也就是401错误。建议不要用SpringSecurity,如果确实要用,建议在SpringSecurity的安全配置中,将相关REST API排除(permitAll,不要认证即可访问),关于如何配置可以看SpringSecurity文档。 注意,SpringSecurity是单块应用时代的产物,严格讲SpringSecurity安全框架并不适合微服务场景,我们的Staffjoy是微服务应用,有自己的安全处理机制和框架,一般不建议不要混用,除非你非常清除各自的工作原理。
作者回复: 1. 通过契约生成客户端的做法有很多,可以生成接口+DTO,然后采用动态代理拼装出客户端,我记得以前的jax-ws就是这样生成的;也可以直接生成客户端实现代码+DTO方式,swagger生成的客户端很多采用这种方式。具体可以尝试下grpc的代码生成(https://grpc.io/),或者swagger代码生成(https://editor.swagger.io/),看看它们生成的客户端/服务端长啥样。 2. Dubbo是强类型RPC风格框架,但是它没有契约支持,也没有代码生成,它通过代码库分享实现强类型客户端+服务器端,而且它仅限于Java语言。
作者回复: 我在项目中采用的是payload中稍带错误码的方式,你说的不通过payload稍带,也可以通过http response code等来表达错误信息(然后客户端捕获异常)。 两种实现方式都可以,各有利弊。
作者回复: feign可以不用ribbon负载的,参考这里: https://stackoverflow.com/questions/27620338/spring-cloud-how-to-use-feign-without-ribbon
作者回复: 谢谢支持!加油!