springcloud费话之Eureka基础

目录:html

springcloud费话之Eureka基础java

springcloud费话之Eureka集群web

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

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

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

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

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

 

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

 

做为一个微服务分布式的架构,标准造成的太多又太快,不少东西不用去关心了,确实方便了一些,然而,并不是全部公司都有相似的项目服务器

或者说并不是全部人都有相关的项目经验

 

多说无用,累

 

springcloud是什么?本身去找吧

 

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

 

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

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

 

然而,当下来讲,云服务和虚拟机比较广泛,又能够用docker进行容器化,细分割,服务微小化,解耦和独立运做性更强,同时还要兼顾集群的

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

 

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

健康情况,这些咱们没必要在乎,同时新的Eureka客户端会请求Eureka服务器,告诉对方本身来了,自动添加进集群,因而集群中就多了一员。

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

 

 

2、Eureka的原理和做用

 

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

 

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

 

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

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

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

 

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

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

随机数来计算得出。若是请求全部,能够理解为一种分布式了,好比10个客户端,每一个去进行一个任务队列的十分之一,再将结果

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

 

3、Eureka的上手

 

一、版本

 

首先找到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

 

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

 

 

 

以上!

相关文章
相关标签/搜索