一.NetFlix Eureka
Spring cloud Eureka通过NetFliex Eureka来实现服务注册于发现,它包含服务端组件也包含客户端组件。
Eureka服务端
Eureka客户端
服务注册:在服务治理框架中,通常会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号,版本号,通信协议等一些附加信息告诉注册中心。
注册中心按服务名分类组织服务清单。
服务发现:由于在服务治理框架下运作服务间的调用不再通过指定具体的实例地址来实现,而是通过向服务名发起请求调用实现。所以服务调用方在调用服务提供接口
并不知道具体的服务实例的位置,因此需要想注册中心咨询,获取所有服务的实例清单.
二、创建服务注册中心
在这里,我们需要用的的组件上Spring Cloud Netflix的Eureka ,eureka是一个服务注册和发现模块。
pom.xml文件
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2.1 启动一个服务注册中心,只需要一个注解@EnableEurekaServer,这个注解需要在springboot工程的启动application类上加:
@EnableEurekaServer
@SpringBootApplication
public class EurekaserverApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaserverApplication.class, args);
}
}
在默认情况下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为
创建服务提供者
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
接着改造/hello请求处理接口,通过注入DiscoveryClient对象,在日志中打印服务的相关内容。
在主类上加@EnableDiscoveryClient注解,激活Eureka中的DiscoveryClient实现
配置文件
服务一定要有Web依赖
高可用注册中心
在为服务架构这样的分布式环境中,我们需要充分考虑发生故障的情况,所以在生产环境中必须对各个组件进行高可用部署,
对于为微服务如此,对于服务注册中心也一样。
在Eyreka的服务治理设计中,所有节点既是服务提供方,也是服务消费方,服务注册中心也不不例外。Eureka Server的高可用就是将自己作为服务向其它服务注册中心注册自己。
启动两个注册中心
服务发现与消费
服务发现的任务由Eureka的客户端完成,而服务的消费任务由Ribbon完成。Ribbon是一个基于HTTP和TCP的客户端负载均衡器,
它可以在客户端中配置ribbonServerList服务端列表去轮询访问以达到负载均衡的作用。当Ribbon与Eureka联合使用时,Ribbon的
服务实例清单RibbonServerList会被DiscoberyEnableNIWSServerLIst重写,扩展成Eureka注册中心获取服务端列表。