Spring Cloud注册中心 Eureka 入门

qshy
发布于 2022-4-25 22:36
浏览
0收藏

作者 | springboot葵花宝典
来源 | 今日头条

1.Spring Cloud Netflix注册中心Eureka入门介绍

Eureka是Sping Cloud Netflix的核心组件,在SpringCloud构架中的作用是实现服务的注册和发现,今天主要介绍Eureka注册中心、客户端搭建。

2.Eureka简介

Eureka Client和Eureka Server是Eureka组件中的两个重要角色,其构架图如下:Spring Cloud注册中心 Eureka 入门-鸿蒙开发者社区

从图中我们发现:

  • Erueka-Server:用于发现和注册应用服务
  • Application-Service:服务的提供者,嵌套Eureka-Client,向Eureka-Server注册自身服务
  • Application-Client:服务的消费者,嵌套Eureka-Client,从Eureka-Server获取服务列表
  • Make Remote Call:表示远程调用

3.注册中心简介

注册中心是微服务构架的通信录,记录服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用。注册中心一般有三种角色,他们之间相互交互,图如下:

  • Service Provider:服务提供者(或Servr)。启动时将自己的IP等信息注册到注册中心
  • Service Consumer:服务消费者(或Client)。从注册中心获取提供者的信息
  • Registy:注册中心

4.代码实现

我们介绍如何搭建一个Eureka注册中心,具体步骤如下:

1.使用spring-cloud-netflix-eureka-server依赖,搭建Eureka注册中心eureka-registry。

2.搭建一个服务提供者 eureka-provider,注册到注册中心

3.搭建一个消费者eureka-consumer,从注册中心获取eureka-provider的服务列表,现在示例,进行Http远程调用。

4.1搭建注册中心eureka-registry

创建eureka-registry项目,作为注册中心

4.1.1使用IDEA创建SpringCloud

创建SpringCloud就是创建SpingBoot项目,在创建Eureka-registry项目时,需要选择组件如图:Spring Cloud注册中心 Eureka 入门-鸿蒙开发者社区

4.1.2 引入依赖

Eureak-registry项目主要依赖了Eureka Server相关依赖,pom.xml文件如下:

 <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2020.0.1</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <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>

通过spring-cloud-starter-netflix-eureka-server 包,引入Eureka Server依赖,实现将Eureka作为注册中心。

4.1.3 application.yml配置文件

创建appliaction.yml,用于添加Eureka相关配置

server:
  port: 8800
spring:
  application:
    name: erueka-registry
eureka:
  client:
    register-with-eureka: false # 不注册到 Eureka-Server,默认为 true
    fetch-registry: false #不从 Eureka-Server 获取注册表,默认为 true
  • server.port:设置项目启动端口
  • eureka.client:eureka配置项 Eureka Server启动时会启动一个Eureka Client客户端,用于Eureka-Server集群之间的相互请求,因为我们现在搭建的是单节点Eureka-Server,所以register-with-eureka 和 fetch-registry 配置项为 false,不需要相互之间进行注册。

4.1.4 EurekaRegistryApplication

在EurekaRegistryApplication类上添加@EnableEurekaServer(声明其为Eureka-Server服务),将其配置为Eureka注册中心启动类:

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

4.1.5 测试

通过启动EurekaRegistryApplication类启动注册中心,使用浏览器访问 http://127.0.0.1:8800,可以看到Eureka-Server运维界面,如图:

Spring Cloud注册中心 Eureka 入门-鸿蒙开发者社区

 

Spring Cloud注册中心 Eureka 入门-鸿蒙开发者社区Spring Cloud注册中心 Eureka 入门-鸿蒙开发者社区4.2 搭建Provider(服务提供者)

创建eureka-provider项目作为服务提供者

4.2.1 eureka-provider项目依赖

Spring Cloud注册中心 Eureka 入门-鸿蒙开发者社区

 

Spring Cloud注册中心 Eureka 入门-鸿蒙开发者社区

eureka-provider项目在pom.xml文件中主要引入Eureka Client依赖

<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2020.0.1</spring-cloud.version>
    </properties>
    <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <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>

通过 spring-cloud-starter-netflix-eureka-client 包,引入 Eureka Client 相关依赖,将 Eureka 作为注册中心的客户端,并实现对其的自动配置。

4.2.2 eureka-provider文件配置

在eureka-provider项目的application.yml文件中添加Eureka相关配置:

server:
  port: 8810
spring:
  application:
    name: eureka-provider
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8800/eureka/
  • 1.eureka.client.register-with-eureka 为 true,表示将其注册到Eureka-Server注册中心
  • eureka.client.fetch-registry 为 true,表示可以从Eureka-Server注册中心拉去注册表,实际在本项目中此处可以设置为false,因为这里只充当服务提供者。
  • 3.eureka.client.service-url 配置项,表示Eureka-Server的地址。Eureka具有多Zone的概念,一般不用,因此我们配置defaultZone默认区域为Eureka-Server地址:http://127.0.0.1:8800/eureka/(4.1搭建注册中心的Eureka-Server地址)

4.2.3 服务类添加配置和创建接口以及简单测试

在EurekaProviderApplication启动类上添加注解@EnableDiscoveryClient

1.创建ProviderController类用于提供服务

@RestController
public class ProviderController {
    private Logger LOGGER = LoggerFactory.getLogger(this.getClass());
    @GetMapping("hello")
    public String sayhello(String consumer){
        LOGGER.info("操作成功");
        return "provider  hello:" + consumer;
    }
}

2.运行EurekaProviderApplication后,重新打开Eureka运维界面,结果如下:

4.3 搭建Consumer(服务消费者)

创建eureka-consumer项目作为服务消费者

4.3.1 eureka-consumer项目依赖

eureka-consumer项目在pom.xml文件中主要引入Eureka Client依赖

<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2020.0.1</spring-cloud.version>
    </properties>
    <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <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>

4.3.2 eureka-consumer文件配置

在eureka-consumer项目的application.yml文件中添加Eureka相关配置大致和eureka-provider项目配置相同

server:
  port: 8820
spring:
  application:
    name: eureka-consumer
eureka:
  client:
    fetch-registry: true
    register-with-eureka: true
    service-url:
      defaultZone: http://localhost:8800/eureka/
   

4.3.3添加配置以及添加消费类

  • 在EurekaConsumerApplication添加@EnableDiscoveryClient配置
  • 2.创建Config包,用于添加配置类
  • 3.创建ConsumerRestTemplateConfiguration配置类
@Configuration
public class ConsumerRestTemplateConfiguration {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

添加控制器

@RestController
public class ConsumerControlle {
    @Autowired
    private DiscoveryClient discoveryClient;
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private LoadBalancerClient loadBalancerClient;
    @GetMapping("/hello")
    public String hello(String name) {
        // <1> 获得服务 `eureka-provider` 的一个实例
        ServiceInstance instance;
        if (true) {
            // 获取服务 `demo-provider` 对应的实例列表
            List<ServiceInstance> clientInstances = discoveryClient.getInstances("eureka-provider");
            // 选择第一个
            instance = clientInstances.size() > 0 ? clientInstances.get(0) : null;
        } else {
            instance = loadBalancerClient.choose("eureka-provider");
        }
        // <2> 发起调用
        if (instance == null) {
            throw new IllegalStateException("获取不到实例");
        }
        String targetUrl = instance.getUri() + "/hello?consumer=" + name;
        String response = restTemplate.getForObject(targetUrl, String.class);
        // 返回结果
        return "consumer:" + response;
    }
}

注:

1.RestTemplateConfiguration 配置类,创建 RestTemplate Bean。RestTemplate 是 Spring 提供的 HTTP 调用模板工具类,可以方便我们稍后调用服务提供者的 HTTP API。

4.3.4 测试

运行eureka-consumer后,打开Eureka运维界面,结果如图所示:Spring Cloud注册中心 Eureka 入门-鸿蒙开发者社区

访问服务消费者http://127.0.0.1:8820/hello?name=consumer1,返回结果为:"consumer:provider hello:consumer1"。表示远程调用服务提供者成功

总结

今天给Eureka注册中心,主要讲解了Eureka注册中心、Eureka Client(消费者和服务者创建)的搭建过程。

收藏
回复
举报
回复
    相关推荐