- Consul 和 Eureka 都是用来解决服务发现(就是类似DNS服务)。
Eureka 在应用主类中通过加上@EnableDiscoveryClient
,该注解能激活Eureka中的DiscoveryClient。(微服务中说加上@EnableEurekaClient
也可以);
Consul 是在应用启动类Application
加上@EnableDiscoveryClient
; - Feign是通过到 Consul Server 或 EurekaServer 查找相关服务。Feign是用于微服务之间的调用
ref : 微服务
- Zuul也是通过到 Consul Server 或 EurekaServer 查找相关服务。Zuul是用于外部的Request 提供网关。
Zuul 例子 ref : Spring Cloud微服务(3)之网关Zuul
有个问题:Zuul 和 Feign 要找到其他微服务,得通过 Consul 或 Eureka,那 Consul 或 Eureka 的地址是动态的话怎么办?
- 如果是通过docker部署微服务,那么就需要在
docker-compose.yml
中的 links
设置微服务与 Consul Server
或 EurekaServer
的关系,这样就会在主调微服务的容器的/etc/hosts
文件里创建相应记录。比如customer-service,那么应该在docker-compose.yml
:
customer-service:
links:
- consul-service:consul-service
- 详情看下面。
- docker之间的依赖
ref : Docker之Compose服务编排
docker-compose.yml参数:
links:用于链接另一容器服务
示例:
links:
- db
- db:mysql
- redis
- 使用了别名将自动会在容器的
/etc/hosts
文件里创建相应记录:
172.17.2.186 db
172.17.2.186 mysql
172.17.2.187 redis
- 所以我们在容器里就可以直接使用别名作为服务的主机名。
depends_on
用于指定服务依赖,一般是mysql、redis等。
指定了依赖,将会优先于服务创建并启动依赖。
links也可以指定依赖。