• SpringCloud学习心得之Eureka注册中心的基本使用


    SpringCloud学习心得——Eureka注册中心

    示范代码链接

    定义

    SpringCloud EurekaSpringCloud Netflix微服务套件的一部分,基于 REST 的服务,并且提供了基于 Java 的客户端组件,主要负责实现微服务架构中的服务治理功能。

    与Zookeeper区别与联系

    1. CAP 定理:即 C 为数据一致性;A 为服务可用性;P 为服务对网络分区故障的容错性。这三个特性在任何分布式系统中都不能同时满足,最多同时满足两个。
    2. Eureka 是基于 AP 原则构建的,而 ZooKeeper 是基于 CP 原则构建的。
      1. Zookeeper 有一个 Leader,而且在这个 Leader 无法使用的时候通过 Paxos(ZAB)算法选举出一个新的 Leader。这个 Leader 的任务就是保证写数据的时候只向这个 Leader 写入,Leader 会同步信息到其他节点。通过这个操作就可以保证数据的一致性。
      2. 去 Eureka 中去拉取服务列表,查看你调用的服务在不在其中,在的话就拿到服务地址、端口等信息,然后调用。

    搭建Eureka中心

    创建maven项目

    添加启动类

    <!-- Spring Boot -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
        <relativePath />
    </parent>
    <dependencies>
        <!-- eureka -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
    <!-- Spring Cloud -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    添加配置文件

    spring:
      application:
        name: myEureka-Server
    
    server:
      port: 8761
    
    eureka:
      client:
        # 因为自己是主机,所以不向自己注册
        register-with-eureka: false
        # 自己就是注册中心,所以不用去检索服务
        fetch-registry: false

    运行,并访问,http://localhost:8761

    创建服务提供者

    创建项目注册到Eureka

    新建maven项目,引入依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <depenpency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
    
    <!-- Spring Cloud -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    创建启动类,注意,此处在启动类上的注解是@EnableDiscoveryClient

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

    添加测试接口

    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @GetMapping("/hello")
        public String sayHello(){
            return "hello";
        }
    }

    增加配置文件

    server:
      port: 8081
    
    spring:
      application:
        name: myEureka-Service
    
    eureka:
      client:
        #这次要注册到eureka上
        register-with-eureka: true
        serviceUrl:
          defaulZone: "http://localhost:8761/eureka/"
      instance:
        #采用ip注册的方式
        prefer-ip-address: true
        #id的格式
        instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}

    启动成功,去eureka看一下,发现了8762的服务

    创建消费者

    创建maven项目,eureka-consumer,添加相同依赖与启动类,但要更改配置文件

    spring.application.name=eureka-client-article-service
    server.port=8082

    使用RestTemplate获取Rest服务端调用接口

    @Configuration
    public class BeanConfiguration {
        @Bean
        public RestTemplate getRestTemplate() {
            return new RestTemplate();
        }
    }

    创建接口

    @RestController
    public class ArticleController {
        @Autowired
        private RestTemplate restTemplate;
        @GetMapping("/article /callHello")
        public String callHello() {
            return restTemplate.getForObject("http://localhost:8081/user/hello", String.class);
        }
    }

    调用可以看到成功
    我们的目的是通过服务调用,而不要关心端口
    改造 RestTemplate的配置,添加一个 @LoadBalanced 注解,这个注解会自动构造LoadBalancerClient 接口的实现类并注册到 Spring容器中

    @Configuration
    public class RestTemplateConfig {
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    }

    接下来就是改造调用代码,我们不再直接写固定地址,而是写成服务的名称,这个名称就是我们注册到 Eureka 中的名称,是属性文件中的 spring.application.name

    @GetMapping("/callHello")
    public String callHello() {
        return restTemplate.getForObject("http://myEureka-Service/user/hello", String.class);
    }

    调用成功,舒服了

    <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

  • 相关阅读:
    jdk8数组和List相互转换
    elementUI修改单选框样式
    StringBuffer和StringBuilder的区别
    npm install --save 与 npm install --save-dev 的区别
    视频上传到阿里云oss把视频的第一帧作为封面图的方式
    mysql建订单表还范了个order错误
    java面试JVM轰炸问题
    注意Java和JavaScript去掉字符串最后一个字符常用写法的区别
    虚拟机NAT模式连接外网
    Hadoop集群初步搭建:
  • 原文地址:https://www.cnblogs.com/pipicai96/p/11719211.html
Copyright © 2020-2023  润新知