当前位置:   article > 正文

Eureka_eureka集群fetchregistry要打开吗

eureka集群fetchregistry要打开吗

Eureka入门案例:

在这里插入图片描述

案例Gitee地址:https://gitee.com/tianyinetwork/hei-ma-learn.git

搭建总流程:

1.搭建 Provider 和 Consumer 服务。

2.使用 RestTemplate 完成远程调用。

3.搭建 Eureka Server 服务。

4.改造 Provider 和 Consumer 称为 Eureka Client。

5.Consumer 服务 通过从 Eureka Server 中抓取 Provider 地址 完成 远程调用

RestTemplate :
  • Spring提供的一种简单便捷的模板类,用于在 java 代码里访问 restful 服务。
  • 其功能与 HttpClient 类似,但是 RestTemplate 实现更优雅,使用更方便。

总结:

  1. Eureka的使用:

    • 添加pom依赖,服务端就加server的,客户端就加client的

    • 编辑application.yml配置文件(注意间隔,文档不能保证格式一定正确哈!注意点,一般没问题)

      • 服务器端:

        eureka:
          instance:
            hostname: localhost   #主机名
          client:
            service-url:
        #      defaultZone: http://localhost:8761/eureka   # eureka服务端地址,将来客户端使用该地址和Eureka进行通信
              defaultZone: http://${eureka.instance.hostname}:${server.port}}/eureka   # eureka服务端地址,将来客户端使用该地址和Eureka进行通信
        #     注意:这个不是访问地址哈,这个是用在eureka-Client上的通信地址,让eureka-Client通过这个地址连接到eureka-server
            register-with-eureka: false   #是否将自己的路径注册到Eureka上。Eureka-Server是不需要的,Eureka的客户端需要
            fetch-registry: false         #是否需要从Eureka中抓取路径,Eureka-Server不需要的,Eureka-client才需要
          server:
            enable-self-preservation: false #关闭自我保护机制
            eviction-interval-timer-in-ms: 3000 #检查服务的时间间隔
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
      • 客户端:

        eureka:
          instance:
            hostname: localhost   #主机名
          client:
            service-url:
              defaultZone: http://localhost:8761/eureka   #eureka的地址,通过这个地址可以和Eureka-Server端取得通信
            register-with-eureka: true  #默认就是true   ,意思将自己的路径注册到Eureka上
            fetch-registry: true        #默认就是true   , 意思是需要从Eureka上拉取路径
        spring:
          application:
            name: eureka-consumer   #设置当前应用的名称。将来会在eureka中Application显示。将来需要使用该名称来获取路径
            #这里省略了两个属性哦
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
    • 启动类:

      • 服务器端:添加注解:@EnableEurekaServer
      • 客户端:添加注解:@EnableDiscoveryClient
    • 这样就完成了!

  2. RestTemplate的使用

    • 需要在Spring容器中注入一个Bean对象

      @Configuration
      public class RestTemplateConfig {
          @Bean
          public RestTemplate restTemplate(){
              return new RestTemplate();
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    • 在类中注入

      @Autowired
      private RestTemplate restTemplate;
      
      • 1
      • 2
    • 使用最简单的方法getForObject(String,Class)方法来发起RestFul风格的请求并接收返回对象

      String url="http://"+host+":"+port+"/goods/findOne/"+id;
      Goods goods = restTemplate.getForObject(url, Goods.class);
      //第一个参数是请求地址,第二个参数是接收的返回值类型
      
      • 1
      • 2
      • 3
  3. 通过Eureka获取服务地址

    • 在类中注入DiscoveryClient对象

      @Autowired
      private DiscoveryClient discoveryClient;
      
      • 1
      • 2
    • 通过DiscoveryClient类的getInstances(“服务名称”)获取服务集合

      List<ServiceInstance> instances = discoveryClient.getInstances("EUREKA-PROVIDE");
      //为什么是集合?
      //因为,我们在实际使用中都是做了高可用处理的,一个服务可能会有多个实例,所以要用集合
      
      • 1
      • 2
      • 3
    • 需要判断下是否有数据

      if(instances==null||instances.size()==0){
          //集合没有数据
          return null;
      }
      //为什么要判断null和长度呢?
      //我们虽然通过方法获取了服务的服务对象的集合,但是,服务是有可能宕机的呀,所以这里要判断一下服务是否有数据
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 获取集合中的服务对象

      ServiceInstance serviceInstance = instances.get(0);
      //因为我们这个案例只有一个服务对象,所以就获取集合的第一个喽!
      
      • 1
      • 2
    • 通过服务对象获取IP地址和端口号信息

      tring host = serviceInstance.getHost();
      System.out.println("IP地址是:"+host);
      int port = serviceInstance.getPort();
      System.out.println("服务的端口号是:"+port);
      
      • 1
      • 2
      • 3
      • 4
    • 得到了这些信息后,直接使用就行!例如:字符串拼接啥的

      String url="http://"+host+":"+port+"/goods/findOne/"+id;
      Goods goods = restTemplate.getForObject(url, Goods.class);
      
      • 1
      • 2
  4. Eureka的客户端常用配置:

    eureka:
      instance:
        hostname: localhost # 主机名
        prefer-ip-address: true # 将当前实例的ip注册到eureka server 中。默认是false 注册主机名
        ip-address: 127.0.0.1 # 设置当前实例的ip
        instance-id: ${eureka.instance.ip-address}:${spring.application.name}:${server.port} # 设置web控制台显示的 实例id
        lease-renewal-interval-in-seconds: 3 # 每隔3 秒发一次心跳包
        lease-expiration-duration-in-seconds: 9 # 如果9秒没有发心跳包,服务器呀,你把我干掉吧~
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka # eureka服务端地址,将来客户端使用该地址和eureka进行通信
    spring:
      application:
        name: eureka-provider # 设置当前应用的名称。将来会在eureka中Application显示。将来需要使用该名称来获取路径
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  5. Eureka高可用

    • 需要配置系统host文件哦!

    • pom配置文件:

      • eureka-server1:

        server:
          port: 8761
        eureka:
          instance:
            hostname: eureka-server1   #主机名
          client:
            service-url:
        #      defaultZone: http://localhost:8761/eureka   # eureka服务端地址,将来客户端使用该地址和Eureka进行通信
              defaultZone: http://eureka2:8762/eureka   # eureka服务端地址,将来客户端使用该地址和Eureka进行通信
        #     注意:这个不是访问地址哈,这个是用在eureka-Client上的通信地址,让eureka-Client通过这个地址连接到eureka-server
            register-with-eureka: true   #是否将自己的路径注册到Eureka上。Eureka-Server是不需要的,Eureka的客户端需要
            fetch-registry: true         #是否需要从Eureka中抓取路径,Eureka-Server不需要的,Eureka-client才需要
          server:
            enable-self-preservation: false #关闭自我保护机制
            eviction-interval-timer-in-ms: 3000 #检查服务的时间间隔
        spring:
          application:
            name: eureka-server1
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
      • eureka-server2:

        server:
          port: 8762
        eureka:
          instance:
            hostname: eureka-server2   #主机名
          client:
            service-url:
        #      defaultZone: http://localhost:8761/eureka   # eureka服务端地址,将来客户端使用该地址和Eureka进行通信
              defaultZone: http://eureka1:8761/eureka   # eureka服务端地址,将来客户端使用该地址和Eureka进行通信
        #     注意:这个不是访问地址哈,这个是用在eureka-Client上的通信地址,让eureka-Client通过这个地址连接到eureka-server
            register-with-eureka: true   #是否将自己的路径注册到Eureka上。Eureka-Server是不需要的,Eureka的客户端需要
            fetch-registry: true         #是否需要从Eureka中抓取路径,Eureka-Server不需要的,Eureka-client才需要
          server:
            enable-self-preservation: false #关闭自我保护机制
            eviction-interval-timer-in-ms: 3000 #检查服务的时间间隔
        spring:
          application:
            name: eureka-server2
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18

附录1:pom.xml:(乱序哦!有点是不能放到一起的,找自己需要的)

<!--SpringBoot的父依赖-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.0.RELEASE</version>
    <relativePath/>
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <!--JDK 版本-->
    <java.version>1.8</java.version>
    <!--spring cloud 版本-->
    <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
</properties>

<!--引入Spring Cloud 依赖-->
<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>

<dependencies>
    <!-- SpringMVC 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- eureka-server -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    
    <!-- eureka-client -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
    <!-- lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.20</version>
    </dependency>
</dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

附录2:Eureka的全部配置:
Eureka的全部配置

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/1000107
推荐阅读
相关标签
  

闽ICP备14008679号