SpringCloud Eureka 服务注册与服务发现
一、Eureka简介
spring Cloud Netflix技术栈中,Eureka作为服务注册中心对整个微服务架构起着最核心的整合作用。有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务。他的功能类似于dubbo的注册中心(register)。
服务发现:服务发现是微服务基础架构的关键原则之一。试图着手配置每个客户端或某种格式的约定可以说是非常困难的和非常脆弱的。Eureka是Netflix服务发现的一种服务和客户端。这种服务是可以被高可用性配置的和部署,并且在注册的服务当中,每个服务的状态可以互相复制给彼此。
服务注册:当一个客户端注册到Eureka,它提供关于自己的元数据(诸如主机和端口,健康指标URL,首页等)Eureka通过一个服务从各个实例接收心跳信息。如果心跳接收失败超过配置的时间,实例将会正常从注册里面移除。
Eureka服务流程图:
Eureka的流程说明:
1、服务提供者会向Eureka Server做Register(服务注册)、Renew(服务续约)、Cancel(服务下线)等操作。
2、Eureka Server之间会做注册服务的Replicate(复制),从而保证状态一致。
3、服务消费者会向Eureka Server获取Registry(注册服务列表),并Make Remote Call(远程调用)消费服务
二、Eureka服务实现
1.创建一个基础的Spring Boot工程,并在pom.xml中引入需要的依赖,如下:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency>
2.在启动类中加入@EnableEurekaServer注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main( String[] args ) {
SpringApplication.run(EurekaApplication.class, args);
}
}
只需要使用@EnableEurekaServer注解就可以让应用变为Eureka服务器,这是因为spring boot封装了Eureka Server,让你可以嵌入到应用中直接使用。至于真正的EurekaServer是Netflix公司的开源项目,也是可以单独下载使用的。
3.添加Eureka相关配置,application.yml中配置如下(也可用properties文件)
server:
port: 8761
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka
4.启动项目,访问http://127.0.0.1:8761/ 可以看到如下图说明Eureka服务搭建成功。
三、Eureka注册中心加入权限
1.在pom.xml引入安全权限相关依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
2.修改application.yml配置文件,添加security相关配置:
security:
basic:
enabled: true
user:
name: user
password: pass
server:
port: 8761
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://user:pass@localhost:8761/eureka
配置完成后重新启动服务,继续访问http://127.0.0.1:8761/发现需要输入用户名密码才能进入。
四、将微服务注册到Eureka Service
1.创建一个基础的Spring Boot工程,并在pom.xml中引入需要的依赖,如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
2.在main方法所在的Application类中,添加@EnableEurekaClient注解,此注解只针对Eureka可用;也可以使用@EnableDiscoveryClient注解
@SpringBootApplication
@EnableEurekaClient
public class MovieApplication {
public static void main(String[] args) {
SpringApplication.run(MovieApplication.class, args);
}
}
3.修改微服务配置文件,添加Eureka相关配置(这里要注意Eureka注册中心是否加入了权限,我这里是加入了权限)
eureka:
client:
healthcheck:
enabled: true
serviceUrl:
defaultZone: http://user:pass@localhost:8761/eureka
完成以上相关配置后可以启动项目,访问http://127.0.0.1:8761/,发现已经有服务注册到Eureka了。