Eureka - 简单示例

Eureka2.0已经闭源了,但也是注册中心的热门组件,我们了解他的使用以及原理。

服务端

首先是parent的pom配置,这里使用的是Hoxton.SR9版本。


    Hoxton.SR9


    org.springframework.boot
    spring-boot-starter-parent
    2.3.5.RELEASE
     


    
        
            org.springframework.cloud
            spring-cloud-dependencies
            ${spring.cloud-version}
            pom
            import
        
    

然后是服务端的pom配置


    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-server
    

服务端代码,除了@SpringBootApplication注解,还需要@EnableEurekaServer注解。

@SpringBootApplication
@EnableEurekaServer
public class EurekaServer8888Application {
    public static void main(String[] args){
        SpringApplication.run(EurekaServer8888Application.class, args);
    }
}

yml文件配置:

server:
  port: 8888
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/
    # 单个注册中心服务的时候不注册自己
 register-with-eureka: false
 # 单个注册中心服务的时候不拉取数据
 fetch-registry: false
spring:
  application:
    name: eureka-server

上面配置完后,运行EurekaServer8888Application的main方法,访问http://127.0.0.1:8888,出现以下界面,Eureka服务端配置完成。
Eureka - 简单示例_第1张图片

客户端

pom的配置:


        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
    

提供方

yml配置:

server:
  port: 7000
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/
spring:
  application:
    name: eureka-provider

提供方Application代码:

@SpringBootApplication
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

Controller代码:

@RestController
public class ProviderController {
    @RequestMapping("/getInfo")
    public String getInfo(String name) {
        return "provider-" + name;
    }
}

启动ProviderApplication后,查看服务端的地址,可以看到已经注册到注册中心了。
Eureka - 简单示例_第2张图片

消费方

yml配置

server:
  port: 7500
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/
spring:
  application:
    name: eureka-consumer

消费方Application代码,注意这边有一个@LoadBalanced注解的RestTemplate。

@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

Controller代码,我们这边访问的地址是eureka-provider,并没有访问到具体的ip和端口。

@RestController
public class ConsumerController {
    @Autowired
    RestTemplate restTemplate;

    @RequestMapping("/getInfo")
    public String getInfo(String name) {
        ResponseEntity forEntity = restTemplate.getForEntity("http://eureka-provider/getInfo?name=" + name, String.class);
        return forEntity.getBody();
    }
}

启动ConsumerApplication后,查看服务端的地址,可以看到已经注册到注册中心了。
image.png

服务端高可用

在生成过程中,为了高可用,我们会搭建多个Euraka Server,这里演示两个,再加一个9999端口的Server。
首先是8888的yml修改,注释掉register-with-eureka和fetch-registry,这样使用默认值true,另外defaultZone的地址为另外一个Server的地址。

server:
  port: 8888
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9999/eureka/
    # 单个注册中心服务的时候不注册自己
    #register-with-eureka: false
    # 单个注册中心服务的时候不拉取数据
    #fetch-registry: false
spring:
  application:
    name: eureka-server

9999的配置如下,跟上面差不多:

server:
  port: 9999
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/
spring:
  application:
    name: eureka-server

Consumer和Provider的yml的defaultZone都修改为:

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/,http://localhost:9999/eureka/

四个Application启动后,不管访问的是8888端口还是9999端口,都可以看到以下信息:
Eureka - 简单示例_第3张图片
Eureka的简单示例就到这边,后面我们看看他的源码是怎么实现这些功能的。

你可能感兴趣的:(java,eureka,注册中心)