Eureka 作为注册中心,其本质是存储了每个客户端的注册信息,Ribbon在转发的时候会获取注册中心的服务列表,然后根据对应的路由规则来选择一个服务给Feign来进行调用。
如果我们不是Spring Cloud技术选型,也想用Eureka可以吗?完全可以
如果不是Spring Cloud技术栈个人推荐用zk之类的会方便些,当然用Eureka也是可以的
这样的话就涉及到如何注册信息,获取注册的信息等等操作了
其实Eureka也考虑到了这点,提供了很多REST接口来给我们调用
文档地址:https://github.com/Netflix/eureka/wiki/Eureka-REST-operations
我们举一个比较有用的案列来说明下
在架构变成微服务之后,具体的微服务是没有依赖的,可以独立部署,端口也可以随机分配,反正会注册到注册中心里面,调用方也无需关心提供方的ip和port, 这些都可以从注册中心拿到
但是有一个问题是API网关的部署能这样吗,API网关大部分会用Nginx做负载,那么Nginx就必须知道API网关有哪几个节点,这样网关服务就不能随便启动了,需要固定好
当然网关是不会经常变动,也不会经常发布的,这样其实也没什么大问题,唯一不好的就是不能自动扩容了
其实利用Eureka提供的API我们可以获取到某个服务的实例信息,也就是说我们可以根据Eureka中的数据来动态配置Nginx的upstream
这样就可以做到网关的自动部署和扩容了,网上也有很多的方案,结合Lua脚本来做,或者自己写Sheel脚本也都可以
下面我们说明下怎么获取Eureka中注册的信息
具体的接口信息请查看我上面贴的官方文档
可以直接GET请求:http://localhost:8761/eureka/apps/fsh-house
fsh-house是你的应用名称也就是spring.application.name
默认是返回xml格式的数据,如果你想返回json数据的格式,在请求头中添加下面2个即可:
Content-Type:application/json
Accept:application/json
如果Eureka开启了认证,记得添加认证信息,用户名和密码必须是Base64编码过的
Authorization:Basic 用户名:密码
其余的接口就不做过多讲解了,大家自己去试试