Eureka - 簡單示例

Eureka2.0已經閉源了,但也是註冊中心的熱門組件,咱們瞭解他的使用以及原理。web

服務端

首先是parent的pom配置,這裏使用的是Hoxton.SR9版本。spring

<properties>
    <spring.cloud-version>Hoxton.SR9</spring.cloud-version>
</properties>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring.cloud-version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

而後是服務端的pom配置segmentfault

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>

服務端代碼,除了@SpringBootApplication註解,還須要@EnableEurekaServer註解。app

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

yml文件配置:ide

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服務端配置完成。
image.pngspring-boot

客戶端

pom的配置:fetch

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

提供方

yml配置:url

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

提供方Application代碼:spa

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

Controller代碼:3d

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

啓動ProviderApplication後,查看服務端的地址,能夠看到已經註冊到註冊中心了。
image.png
此時的狀態是這樣的:
image.png

消費方

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<String> forEntity = restTemplate.getForEntity("http://eureka-provider/getInfo?name=" + name, String.class);
        return forEntity.getBody();
    }
}

啓動ConsumerApplication後,查看服務端的地址,能夠看到已經註冊到註冊中心了。
image.png
此時的狀態是這樣的:
image.png
經過地址調用消費方,能夠看到調用成功:
image.png
由於Consumer在調用Provider以前,會經過服務發現拿到註冊中心的註冊表信息,而後經過經過註冊表信息去找到Provider的IP和端口,再進行調用。
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端口,均可以看到如下信息:
image.png
此時的狀態是這樣的:
image.pngEureka的簡單示例就到這邊,後面咱們看看他的源碼是怎麼實現這些功能的。

相關文章
相關標籤/搜索