zoukankan      html  css  js  c++  java
  • springcloud费话之Eureka基础

    目录:

    springcloud费话之Eureka基础

    springcloud费话之Eureka集群

    springcloud费话之Eureka服务访问(restTemplate)

    springcloud费话之Eureka接口调用(feign)

    springcloud费话之断路器(hystrix in feign)

    springcloud费话之配置中心基础(SVN)

    springcloud费话之配置中心客户端(SVN)

    懂分布式的理论和做过分布式(多年前),却感觉在当下的面试对于springcloud要求太多

    作为一个微服务分布式的架构,标准形成的太多又太快,很多东西不用去关心了,确实方便了一些,然而,并非所有公司都有类似的项目

    或者说并非所有人都有相关的项目经验

    多说无用,累

    springcloud是什么?自己去找吧

    一、Eureka是什么?咋用的,什么地位呢?

    在一个分布式架构中,都会涉及到负载均衡和集群,最早出现的时候,我确定有10台机器作为集群,那么就知道这10台机器的ip和端口,于是乎

    会将10台机器的ip和端口都写在需要调用的代码中,轮询使用,形成最早期的负载均衡了。

    然而,当下来说,云服务和虚拟机比较普遍,又可以用docker进行容器化,细分割,服务微小化,解耦和独立运作性更强,同时还要兼顾集群的

    横向扩容,于是,集群中一共有几台服务器,每台服务器的配置如何,就是一个变数,因此需要一个服务的注册和发现的中心了。

    Eureka本意为:发现的惊叹感觉,的意思。当然是用的是springboot为基础,通讯协议是用的依然是http,对于其心跳机制来确定每一台服务器的

    健康状况,这些我们不必在意,同时新的Eureka客户端会请求Eureka服务器,告诉对方自己来了,自动添加进集群,于是集群中就多了一员。

    这种标准的服务发现和注册机制,形成的标准化结构,即为Eureka了。

    二、Eureka的原理和作用

    以下图为盗用,有意见联系我(我会重画一张一样的!!!)

    一个Eureka集群,简单的分为Eureka服务器(Eureka Server)和Eureka客户端(Eureka Client)两个部分。

    其中Eureka服务器通常为2台或者以上,最好进行物理分离,以达到整个集群容灾的效果。提高可用性,降低整体挂掉的可能性。

    Eureka客户端,实际上就是应用,每个应用都写在客户端中,客户端数量为多个,那么每次请求的时候,只要知道客户端的名称,

    即可以从Eureka服务器中或者该客户端的每个地址,选择一个进行调用,即完成了集群的请求。

    那么具体要选择哪一个,为何很多示例代码中都是从该客户端数组List中只取(0)第一个来使用呢?

    那只是示例代码,别太当真。如果该服务是需要集群中的一个服务器来解决,那么选择任意一个,都是可以的,第几个,可以用

    随机数来计算得出。如果请求所有,可以理解为一种分布式了,比如10个客户端,每个去进行一个任务队列的十分之一,再将结果

    整合回来统计,这东西和大数据的并发请求方式实际上就是一个东西了。

    三、Eureka的上手

    1、版本

    首先找到spring的官网,找到Eureka的示例,在https://spring.io/projects中找到springcloud,然后在地步找到quick start,操作如图,

    在下面展开的选项卡中找到Eureka server,如下图

    然后点击 页面最下方的

    得到内容如下图:

    应用此信息修改pom,修改内容包括:parent,dependency,删掉junit,我经过修改后的pom如下:

     只贴了server的pom,其中client的依赖也在其中,注意注释

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.7.RELEASE</version>
            <relativePath /> <!-- lookup parent from repository -->
        </parent>
    
        <groupId>com.lyh</groupId>
        <artifactId>lyh-eureka-server</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>lyh-eureka-server</name>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <java.version>1.8</java.version>
            <!-- SR2会报错,未解决 -->
            <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
        </properties>
    
        <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>
            <!-- web的jar -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- eureka server的jar, 作为client也需要 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
            <!-- eureka client的jar -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
        </dependencies>
    
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
                                     

    2.配置文件

    创建resources并且buildpath,编写application.yml配置文件,如下:

    server的yml

    server:
      port: 9010
      
    eureka:
      instance:
        hostname: localhost
      client:
        registerWithEureka: false
        fetchRegistry: false
        serviceUrl:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
          
    spring:
      application: 
        name: eureka-server

    client的yml

    server:
      port: 9020
    
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:9010/eureka/
      
    spring:
      application:
        name: eureka-client

    3.server和client的启动类

     编写server的启动类,代码如下:

    package com.lyh.lyh_eureka_server;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaServerRun {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaServerRun.class, args);
        }
    
    }

    编写client的启动来,代码如下:

    package com.lyh.lyh_eureka_server;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    
    @SpringBootApplication
    @EnableEurekaClient
    
    public class EurekaClientRun {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaClientRun.class, args);
        }
    
    }

    4.启动并访问

    先启动server,然后启动client,访问server的地址:http://localhost:9010,结果如下图则为正确:

     5.一些问题

    client的name注册入server的时候,会自动转为大写

    红字表示client的心跳维持时间在90秒以上,将会自动删除该注册,是一种server的保护机制

    将server中的yml自我保护机制修改,配置文件修改如下:

    server:
      port: 9010
      
    eureka:
      instance:
        hostname: localhost
      client:
        registerWithEureka: false
        fetchRegistry: false
        serviceUrl:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      server: 
        enable-self-preservation: false
    
    spring:
      application: 
        name: eureka-server

     修改以后,页面提示会发生变化,表示保护机制已经关闭,如下图

     

    以上!

  • 相关阅读:
    地图校正方法心得
    投影的心得点滴
    android 打包 apk keystore
    scp命令详解
    ubuntu11.10真机调试nopermissions
    android adb server is out of date
    ubuntu删除默认jdk
    android 运行 错误 总结
    android file .apk is not a valid zip file adb install
    ubuntu系统目录结构
  • 原文地址:https://www.cnblogs.com/liuyuhangCastle/p/11397227.html
Copyright © 2011-2022 走看看