springBoot集成springCloud(一)注册中心

     在前言中(springBoot集成springCloud前言)我们介绍了一些springCloud一些组件。接下来我们就一个一个介绍。

一:概念

1、什么是服务治理


SpringCloud封装了Netflix公司开发的Eureka模块来实现服务治理

在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

2、什么是服务注册与发现


Eureka采用了CS的设计结构,Eureka Server服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接。这样系统的维护人员就可以通过Eureka Server来监控系统中各个微服务是否正常运行。这点和zookeeper很相似

在服务注册与发现中,有一个注册中心。当服务器启动时候,会把当前自己服务器的信息 比如服务地址 通讯地址等以别名方式注册到注册中心上。另一方(消费者|服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用。RPC远程调用框架核心设计思想:在于注册中心,因为便用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何rpc远程框架中,都会有一个注册中心(存放服务地址相关信息(接口地址)

 

3、Eureka包含两个组件:Eureka Server和Eureka Client
Eureka Server提供服务注册服务

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

EurekaClient通过注册中心进行访问

是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

二:注册中心之Eureka

Eureka由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。

 

上图简要描述了Eureka的基本架构,由3个角色组成:

1、Eureka Server

  • 提供服务注册和发现

2、Service Provider

  • 服务提供方
  • 将自身服务注册到Eureka,从而使服务消费方能够找到

3、Service Consumer

  • 服务消费方
  • 从Eureka获取注册服务列表,从而能够消费服务

1:单机Eureka构建
 

Server模块(三板斧)

首先 :pom.xml文件

需要有springBoot包和springCloud包。

<!-- 统一管理 jar 包版本 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <lombok.version>1.16.18</lombok.version>
        <mysql.version>5.1.47</mysql.version>
        <druid.version>1.1.16</druid.version>
        <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!--spring boot 2.2.2-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.4.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud Hoxton.SR1-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR12</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud 阿里巴巴-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-project-info-reports-plugin</artifactId>
            <version>3.0.0</version>
        </dependency>

        <!-- 下面三个基本是微服务架构的标配 -->


        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
            <scope>runtime</scope>
        </dependency>
        <!-- druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis.spring.boot.version}</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
        </dependency>
        <!--log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>

        <!--eureka-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

   

其次:application.properties

server.port=7001

## eureka 服务器的实例名称
eureka.instance.hostname=localhost

#false代表不向服务注册中心注册自己,因为它本身就是服务中心
eureka.client.register-with-eureka=false
# false 代表自己就是服务注册中心,自己的作用就是维护服务实例,并不需要去检索服务
eureka.client.fetch-registry=false

eureka.client.service-url.defaultZone=http://localhost:${server.port}/eureka/

最后:要在启动类中添加@EnableEurekaServer

可通过:  http://localhost:${server.port}

Client模块(三板斧)

首先:pom.xml要添加springBoot和Cloud

在Server的基础上将server改成client就可以了。

<!--eureka-client-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

其次:配置文件要添加application.properties

server.port=8001
server.servlet.context-path=/cloudClient1
## 在Eureka页面中显示服务
spring.application.name=spring-cloud-producer

# 注册进 Eureka 的服务中心
eureka.client.register-with-eureka=true
# 检索服务中心的其它服务
# 单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
eureka.client.fetch-registry=true
# 设置与 Eureka Server 交互的地址
eureka.client.service-url.defaultZone=http://localhost:7001/eureka/

最后:要在启动类中添加@EnableEurekaClient

我们就可以在Eureka的页面中看到是否注册成功。

 在client客户端可能出现启动不了的情况,错误如下;
Unregistering application UNKNOWN with eureka with status DOWN

    解决方法:pom文件加入 web 架包。

在pom.xml中加入
 

 <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-web</artifactId>  
    </dependency>  

java项目启动不需要容器,但是springCloud项目都是web项目,所以需要容器才能启动。

2:集群Eureka构建

我们在1:单机版本的基础上添加集群

(1):配置映射

找到C:\Windows\System32\drivers\etc路径下的hosts文件,修改映射配置添加进hosts文件,因为浏览器不识别eureka7001.com,不添加会导致后面的服务找不到注册中心的地址。

127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com

(2):Server修改

在单机版本的Server的基础上,再复制一份Server标记端口改为7002

与单机版不同的是,defaultZone指向了其他注册中心的地址

7001配置

server.port=7001

## eureka 服务器的实例名称
eureka.instance.hostname=eureka7001.com

#false代表不向服务注册中心注册自己,因为它本身就是服务中心
eureka.client.register-with-eureka=false
# false 代表自己就是服务注册中心,自己的作用就是维护服务实例,并不需要去检索服务
eureka.client.fetch-registry=false

eureka.client.service-url.defaultZone=http://eureka7002.com:${server.port}/eureka/

7002配置

server.port=7002

## eureka 服务器的实例名称
eureka.instance.hostname=eureka7002.com

#false代表不向服务注册中心注册自己,因为它本身就是服务中心
eureka.client.register-with-eureka=false
# false 代表自己就是服务注册中心,自己的作用就是维护服务实例,并不需要去检索服务
eureka.client.fetch-registry=false
# 设置与 Eureka Server 交互的地址,查询服务 和 注册服务都依赖这个地址
# 集群指向其他eureka
eureka.client.service-url.defaultZone=http://eureka7001.com:${server.port}/eureka/

(3):client修改

client修改就比较简单只需要配置

eureka.client.service-url.defaultZone=http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/

三:注册中心之Zookeeper
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值