这篇可能相对来说会比较乱。
zuul、feign、eureka每个都是一个模块
1. Eureka Server
添加Spring Cloud Eureka Server Starter
就行了。
不懂的上这个:http://cloud.spring.io/spring-cloud-static/Finchley.M7/single/spring-cloud.html#spring-cloud-eureka-server
搜索关键字:eureka.server
,获取到相应配置,有配置的注释,不懂英文的谷歌翻译或有道
2. Zuul
这是一个网关,在这里我主要把网关当做一个认证和授权的地方。
通过tomcat的Filter达到多身份登录、注册、登出等功能的使用。
通过结合Spring Session
,使用Spring Data Redis
做分布式Session保存,从而达到网关认证,透传Cookie=SESSION
来做应用间session传递。
session中保存有用户信息,角色相关id,透传Cookie
的时候,将zuul中的敏感头配置去掉zuul.sensitiveHeaders
,默认情况下HTTP-header
中的Cookie
/Set-Cookies
/Authorization
都不能传递,而要达到透传session的目的,只能将Cookie
放开。
3. Feign
网关本身不做业务服务,只做接口调用,而在认证期间,网关使用的是Feign来做数据验证透传。
Feign 中的 Decoder与Encoder能将相应的数据封装成具体的对象格式,由开发人员自定义完成,或者是默认使用RestTemplate,而Template中的HttpMessageConverter有点坑,只能做单向的转换(如Jackson中只能做参数单驼峰到Snake Case格式等,或者有具体字段,包装体等,都最好做自定义处理)。
Feign中所有参数都为声明式配置,如请求体需要加@RequestBody,请求头需加@RequestHeader。
其他配置就像平时写Controller一样就行,该用@RequestMapping就@RequestMapping,该用@GetMapping就@GetMapping。
4. 其他
Eureka Server
的替换方案有Consul
,而Consul是一个独立组件,是为第三方开发,类似Zookeeper(Zookeeper也可以做替换方案),Consul声称可以做n多别的服务发现组件做不了的东西(参考:http://blog.csdn.net/dengyisheng/article/details/71215234),但用起来还是觉得eureka会好些,至少界面就好看不少,功能多不少,至少界面不会丑不知所云的感觉。现代社会审美很重要。
Feign的Client也是用github的包,所以如果想用Netflix原生的注解功能,也可以使用,但之前用Feign Client好像只有单例,多个会直接覆盖,没细究,没Cloud集成好用就是。
Zuul可以自定义不少过滤器,实现ZuulFilter,在调用其他模块时会触发,有Order有pre(调用前)有route(调用时)有post(调用后),具体看业务场景。网关还有Gravitee,模块分得特别细,用的人不太多,可能是没有中文说明文档,没怎么推广,还有Kong,基于Nginx使用lua做了不少集成插件开发,Nginx本身社区就很发达,不行的话还可以求助社区(比如OpenResty又是一个例子)。