Eureka 注册中心的简单使用
介绍
Eureka 使用涉及三个部分,分别是注册中心,服务提供者,服务消费者
优点
Eureka保证AP
Eureka优先保证可用性,Eureka各个节点是平等的,某几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。
Demo
注册中心
添加依赖
<!--Spring Cloud的eureka-server起步依赖(包含springBoot起步依赖)-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
配置yaml配置文件
spring:
application:
name: eureka-server # 应用名称
server:
port: 9100 #端口
eureka:
instance:
hostname: localhost #设置该服务注册中心的hostname
client:
register-with-eureka: false #禁止注册中心自己向自己注册,默认true
fetch-registry: false #注册中心无需拉取服务地址列表,因为服务注册中心本身的职责就是维护服务实例,默认true
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka #指定服务注册中心的地址
启动类加上 @EnableEurekaServer 注解
访问 http://localhost:9100 即可进入注册中心
服务提供者
添加依赖
<!--SpringCloud集成eureka客户端的起步依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置信息
spring:
application:
name: springcloud-eureka-client-provider # 注册到注册中心的微服务名称(也是调用名称)
server:
port: 8081 #设置端口
servlet:
context-path: / #配置项目上下文根
eureka:
client:
service-url:
defaultZone: http://localhost:9100/eureka #配置eureka 注册中心地址
对外提供服务接口
@RestController
public class TestController {
@RequestMapping("/test")
public Object test() {
return "使用了eureka注册中心的服务提供者";
}
}
启动类加上 @EnableEurekaClient 注解
服务消费者
引入依赖
<!--SpringCloud集成eureka客户端的起步依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置yaml信息
spring:
application:
name: springcloud-eureka-client-consumer #注册到注册中心的微服务名称(也是调用名称)
server:
port: 8080
servlet:
context-path: /
eureka:
client:
service-url:
defaultZone: http://localhost:9100/eureka #指定eureka 注册中心地址
服务消费者需要一个工具类来调用服务提供者提供的服务
@Configuration
public class RestTemplateConfig {
//@LoadBalanced 开启Ribbon的负载均衡从注册中心中获取服务
//服务的发现由eureka客户端实现,而服务的真正调用由ribbon实现,所以我们需要在调用服务提供者时使用ribbon来调用
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
调用服务
@RestController //Spring Cloud是基于rest的访问
public class TestController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/test")
public Object test(){
//访问远程的SpringCloud的服务
//参数1 要调用的服务的地址
//参数2 指定返回的数据类型
//.getBody()获取响应的主体内容(服务端返回的具体JSON数据)
//根据服务提供者地址访问
//return restTemplate.getForEntity("http://localhost:8081/test",String.class).getBody();
//根据服务名访问(可实现负载均衡)
return restTemplate.getForEntity("http://springcloud-eureka-client-provider/test",String.class).getBody()+"----带有注册中心的服务消费者";
}
}
入口类上添加一个 @EnableEurekaClient 注解