zoukankan      html  css  js  c++  java
  • springcloud-知识点总结(一):Eureka

    1.Spring Cloud简介

      Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

    2.基本的服务者与消费者及调用关系

     1 import org.springframework.context.annotation.Bean;
     2 import org.springframework.context.annotation.Configuration;
     3 import org.springframework.web.client.RestTemplate;
     4  
     5 /**
     6  * SpringCloud相关配置
     7  * @author Administrator
     8  *
     9  */
    10 @Configuration
    11 public class SpringCloudConfig {
    12  
    13     /**
    14      * 调用服务模版
    15      * @return
    16      */
    17     @Bean
    18     public RestTemplate getRestTemplate(){
    19         return new RestTemplate();
    20     }
    21 }
    View Code

     主要是定义一个bean RestTemplate对象; springcloud消费者,服务提供者之间的交互是http rest方式,比dubbo rpc方式更加灵活方便点;

    StudentConsumerController类:

     1 /**
     2  * 
     3  * @author Administrator
     4  *
     5  */
     6 @RestController
     7 @RequestMapping("/student")
     8 public class StudentConsumerController {
     9  
    10      @Resource
    11      private RestTemplate restTemplate;
    12       
    13      /**
    14       * 添加或者修改学生信息
    15       * @param student
    16       * @return
    17       */
    18      @PostMapping(value="/save")
    19      private boolean save(Student student){
    20          return restTemplate.postForObject("http://localhost:1001/student/save", student, Boolean.class);
    21      }
    22       
    23      /**
    24      * 查询学生信息
    25      * @return
    26      */
    27     @SuppressWarnings("unchecked")
    28     @GetMapping(value="/list")
    29     public List<Student> list(){
    30         return restTemplate.getForObject("http://localhost:1001/student/list", List.class);
    31     }
    32      
    33     /**
    34      * 根据id查询学生信息
    35      * @return
    36      */
    37     @GetMapping(value="/get/{id}")
    38     public Student get(@PathVariable("id") Integer id){
    39         return restTemplate.getForObject("http://localhost:1001/student/get/"+id, Student.class);
    40     }
    41      
    42     /**
    43      * 根据id删除学生信息
    44      * @return
    45      */
    46     @GetMapping(value="/delete/{id}")
    47     public boolean delete(@PathVariable("id") Integer id){
    48         try{
    49             restTemplate.getForObject("http://localhost:1001/student/delete/"+id, Boolean.class);
    50             return true;
    51         }catch(Exception e){
    52             return false;
    53         }
    54     }
    55 }
    View Code

    再搞一个启动类StudentConsumerApplication_80:

    1 @SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
    2 public class StudentConsumerApplication_80 {
    3  
    4     public static void main(String[] args) {
    5         SpringApplication.run(StudentConsumerApplication_80.class,args);
    6     }
    7 }
    View Code

    这里的话 加了特殊配置 排除了 数据源注入(@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})),

    不加的话 会报错,老版本没有这个问题;

    3.服务注册与发现组件Eureka

    服务注册与发现组件Eureka

    Eureka github 地址: https://github.com/Netflix/eureka

    Eureka简介:

    Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

    Eureka包含两个组件:Eureka Server和Eureka Client。

    Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

    Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就别一个内置的、使用轮询(round-robin)负载算法的负载均衡器。

    在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。

    Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。

    综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性

    类似zookeeper,Eureka也是一个服务注册和发现组件,是SpringCloud的一个优秀子项目,不过比较坑的是,Eureka2版本已经停止更新了。但是Eureka1版本还是很稳定,功能足够用,所以还是有必要学习下。

    但是这里有几个常用的服务注册与发现组件比对;

    QQ鎴�浘20180806224522.jpg

    服务注册与发现原理。

    QQ鎴�浘20180806221135.jpg

    4.搭建Eureka服务注册中心

    搭建Eureka服务注册中心

    前面说过eureka是c/s模式的  server服务端就是服务注册中心,其他的都是client客户端,服务端用来管理所有服务,客户端通过注册中心,来调用具体的服务;

    我们先来搭建下服务端,也就是服务注册中心;

    新建 module   microservice-eureka-server-2001

    application.yml配置:

     1 server:
     2   port: 2001
     3   context-path: /
     4   
     5 eureka: 
     6   instance:
     7     hostname: localhost #eureka注册中心实例名称
     8   client: 
     9     register-with-eureka: false     #false 由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己。
    10     fetch-registry: false     #false 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false
    11     service-url: 
    12        defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       #设置与Eureka注册中心交互的地址,查询服务和注册服务用到
    View Code

    启动类:

    1 @SpringBootApplication
    2 @EnableEurekaServer
    3 public class EurekaApplication_2001 {
    4  
    5     public static void main(String[] args) {
    6         SpringApplication.run(EurekaApplication_2001.class, args);
    7     }
    8 }
    View Code

    主要是要加入下@EnableEurekaServer

    5.Eureka注册中心高可用集群配置

    Eureka高可用集群配置

    当注册中心扛不住高并发的时候,这时候 要用集群来扛;

    我们再新建两个module  microservice-eureka-server-2002  microservice-eureka-server-2003

    第一步:

    修改三个项目(eureka)的application.yml文件,主要是修改 hostname和defaultZone,

    2001修改(其他2002、2003修改方式一样,这里只列举2001):

    server:

      port: 2001

      context-path: /

    eureka: 

      instance:

        # 单机 hostname: localhost #eureka注册中心实例名称

        hostname: eureka2001.wfd.com # 集群

      client: 

        register-with-eureka: false     #false 由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己。

        fetch-registry: false     #false 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false

        service-url: 

          defaultZone: http://eureka2002.wfd.com:2002/eureka/,http://eureka2003.wfd.com:2003/eureka/ # 集群

          #单机defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       #设置与Eureka注册中心交互的地址,查询服务和注册服务用到

    第二步:

    修改服务提供者项目的application.yml,主要修改eureka.client.service-url.defaultZone

    eureka:

      instance:

        hostname: localhost  #eureka客户端主机实例名称

        appname: microservice-student  #客户端服务名

        instance-id: microservice-student:1001 #客户端实例名称

        prefer-ip-address: true #显示IP

      client: 

        service-url: 

          # 单机 defaultZone: http://localhost:2001/eureka   #把服务注册到eureka注册中心

          defaultZone: http://eureka2001.wfd.com:2001/eureka/,http://eureka2002.wfd.com:2002/eureka/,http://eureka2003.wfd.com:2003/eureka/ # 集群

     访问。。。。

    注:这里本质是三个服务注册中心都有我们服务提供者的信息,等后面讲到服务发现和服务调用,我们通过一些策略(默认轮询),会去找对应的服务注册中心;通过集群,能减轻每个服务注册中心的压力;

  • 相关阅读:
    mvc+dwz准备工作
    C# action,delegate,func的用法和区别
    mvc+dwz第二天
    mvc+dwz第一天
    H5文件上传2
    H5文件上传1
    vs2010 nuget 基础连接已经关闭:发送时发生错误
    redis分布式锁
    C# 并发队列ConcurrentQueue
    正则表达式入门
  • 原文地址:https://www.cnblogs.com/newAndHui/p/10561140.html
Copyright © 2011-2022 走看看