文章目录
一. ServiceComb和Spring Cloud Zuul 集成思路
在学习Spring Cloud Zuul的时候在官网发现了下面的描述
Zuul starter不包括 discovery client, 所以为了实现基于service ID的路由转发,你必须同时在类路径下提供一个discovery client ( 可以使用 Eureka )
这点很重要,意味我们可以自定义服务发现客户端替代Eureka
关于服务发现的概念:https://www.jianshu.com/p/5eac16e9804a
DiscoveryClientRouteLocator 过滤器从一个DiscoveryClient(例如Eureka)和属性文件中加载了路由定义信息。
serviceId对应的路由信息从DiscoveryClient中获取。
从以上信息可知,Zuul会从DiscoveryClient中获取路由信息。而服务发现就在DiscoveryClient中实现。
在之前的实现的zuulserver项目中,pom文件中有如下依赖
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>spring-boot-starter-discovery</artifactId>
<version>1.1.0</version>
</dependency>
以上就是一个自定义discovery client。可以完全代替Eureka。这个discovery client是专门与ServiceComb的服务与发现注册中心ServiceCenter进行交互的。
服务发现原理
服务发现有三个角色,服务提供者、服务消费者和服务中介。服务中介是联系服务提供者和服务消费者的桥梁。服务提供者将自己提供的服务地址注册到服务中介,服务消费者从服务中介那里查找自己想要的服务的地址,然后享受这个服务。服务中介提供多个服务,每个服务对应多个服务提供者。
再来一张Eureka的图对比一下
二. 源码分析
下面看下servicecomb discovery client的目录结构,很明显这是一个自定义的SpringBoot的starter项目。源码从github上下载:https://github.com/apache/servicecomb-java-chassis