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 注解

posted @ 2023-11-22 23:30  Acegzx  阅读(55)  评论(0)    收藏  举报  来源