一、Spring Cloud简介

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。

https://www.springcloud.cc/spring-cloud-dalston.html

Spring Cloud需要基于Spring Boot项目来构建,而Spring Boot是在spring上封装了大量的注解和自动配置,增加了许多优秀的中间件的一个优秀的框架,如果不了解Spring Boot的使用,建议先去了解Spring Boot。

二、注册中心的介绍

在介绍注册中心之前先说一下单应用的架构。在单应用架构中,我们把所有的业务功能都放在了同一个项目中,如果有其中一个接口需要改动,那么就需要重新部署整个项目。当请求量大的时候,往往会在服务的前端增加一个负载均衡的组件,比如Nginx。这样,请求会先到达Nginx,再由Nginx把请求按照一定的策略分发给不同的节点(这里的一个节点就是一个tomcat服务),然后再处理返回结果。

在Spring Cloud这样的分布式架构中,我们会把服务进行拆分。比如说一个电商系统,我们可以粗略地把系统拆分为商品详情服务、订单服务、会员服务等等。这样,每个系统会有自己的数据库,只做自己的事。这时假如说一个用户想看一下订单详情,按道理说他需要请求订单系统的相关接口,但是订单详情应该显示这个订单的商品简略信息,比如商品名、商品缩略图等,但商品相关的信息应该是放在商品服务中的,这时候就需要一个地方,让商品服务把自己提供的服务放进去,让订单服务去调用,这个地方就是注册中心。

可以有多个服务提供者把自己提供的服务注册到注册中心,当服务消费者需要调用服务时,不用首先知道服务在哪里,而是直接去找注册中心就行了,从注册中心那里拿到所有可用的服务,然后自己再通过一定的策略来决定调用哪一个。另外,一个服务节点,既可以是服务提供者,也可以是服务消费者。

Spring Cloud支持的注册中心可以有多种,比如Eureka、Zookeeper、Consul等等。在这里我们使用Eureka作为我们的注册中心。

三、准备工作

我们使用IDEA作为开发工具,因为Spring Cloud是需要多个微服务协同工作的,在IDEA中,我们需要一个主项目(相当于Eclipse的一个Workspace),然后在主项目中每一个module(相当于Eclipse中的一个project)都是其中的一个服务。

3.1、创建一个Empty Project

然后填写好名称,完成后会弹出提供你创建module的对话框,先关闭。

3.2 创建Eureka模块作为服务注册中心

选择File->New->Module...,然后选择Spring Initializr。

然后填写好module的名称,接下来再选择相关的依赖——选择Spring Cloud Discovery下的Eureka Server依赖,Spring Boot的版本我们选择2.1.10,最后根据导向完成创建工作。创建好的module的pom文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<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 https://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.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example.springcloud</groupId>
<artifactId>eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR4</spring-cloud.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <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> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

如果你使用的是没有Spring Initializr的IDEA Community版本,你也可以先创建一个maven的module,再到https://start.spring.io/选择Eureka,然后点击Explore-Ctrl + Space按钮,把相关的依赖复制到pom文件中。

3.3、配置eureka的参数

在application.properties文件中(如果习惯使用yml可以自行做调整)添加以下的配置

server.port=8761
spring.application.name=eureka eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

事实上,eureka会把自身作为一个服务注册到自身当中,而eureka.client.register-with-eurekaeureka.client.fetch-registry这两个属性的值设置为false表明不需要把自己注册进去。

3.4、开启服务注册功能

在启动的主类上加上@EnableEurekaServer开启eureka服务功能

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication { public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
} }

到此注册中心微服务就完成了,可以启动了。

3.5、服务注册中心后台

启动成功后,在浏览器访问http://localhost:8761/,就可以看到Eureka的管理后台了,在这里我们可以看到向注册中心所注册的服务,目前我们还没有任何的服务注册,所以显示No instances available。

四、注册中心集群

我们的服务都需要注册到注册中心,如果只有一个节点,万一注册中心宕机了,整个系统就瘫痪了,注册中心作为服务的中枢,我们不能只用一个节点。如果有使用ZooKeeper的经验的人一定知道集群这个概念,这就是为了系统的高可用性而把数据切割成几个部分放到不同的节点中,就算有其中一个甚至几个节点出了问题,整个系统还是不受影响的。这里也介绍一下Eureka集群。

4.1、修改hosts文件

为了可以在windows上搭建集群,首先需要修改hosts文件,在hosts文件添加以下内容

127.0.0.1  eureka-1
127.0.0.1 eureka-2
127.0.0.1 eureka-3

4.2、修改配置文件

然后在resources目录下创建application-eureka1.properties、application-eureka2.properties、application-eureka3.properties

其中application-eureka1.properties的配置如下:

server.port=8761
spring.application.name=eureka eureka.instance.hostname=eureka-1
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.serviceUrl.defaultZone=http://eureka-2:8762/eureka/,http://eureka-3:8763/eureka/

节点1的端口是8761,主机名是eureka-1,那么defaultZone的值就配置另外两个节点的地址,地址用逗号分开;然后节点2的端口是8762,然后配置节点1和3的地址,以此类推。值得说明的是register-with-eureka和fetch-registry的值需要设置为true或者不配置(默认是true),因为搭建集群的时候需要把自己作为一个服务注册到注册中心,这样另外两个eureka服务才能发现它。

4.3、启动服务

点击启动配置下拉菜单,选择创建三个Spring Boot的启动配置,填写好名称、启动类和所用的配置文件:

填写好配置的名称(EurekaApplication-1)、选择启动类作为Main class,Active profile其实就是使用的配置文件,只需要写application-后面的那一段就行了。

然后如法炮制添加节点2和3。

到此集群方式的Eureka注册中心就完成了,如果上一步的单节点的应用还在运行的话先停止,不然会引起端口冲突。依次启动这三个节点,当启动第一个或者前两个时会报异常,这是因为我们的eureka集群是三个节点的,当第一个节点8761启动后,会去找8762和8763,但是此时另外两个节点还没启动,所以出现异常信息,这是正常的,当三个都启动成功后在浏览器访问http://eureka-1:8761/,也可以访问http://eureka-2:8762/http://eureka-3:8763/,此时在eureka后台可以看到另外两个节点

图片下方Application这一项是根据配置文件中spring.application.name属性的值来显示的,就是应用的名称,因为我们把三个节点的名称都写成了一样,这里就会合并在一起显示,然后在Status中以各自的端口号区分,然后应用名不相同,就会分别显示。(但是同样的服务的服务名要写成一致)

另外我们需要注意一下后台下面的General Info的信息,如果其它两个节点可用,就会显示在available-replicas中,否则就会显示在unavailable-replicas中,这一点可以帮助我们检查注册中心的节点的健康状况。

五、总结

到此,eureka注册中心的使用就介绍完毕,下一篇介绍服务注册。

源码已经上传到github:https://github.com/spareyaya/spring-cloud-demo/tree/master/chapter1

Spring Cloud系列(一):服务注册中心的更多相关文章

  1. Spring Cloud 系列之 Consul 注册中心(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Consul 注册中心(一) 本篇文章讲解 Consul 集群环境的搭建. Consul 集群 上图是一个简单的 Co ...

  2. Spring Cloud 系列之 Consul 注册中心(一)

    Netflix Eureka 2.X https://github.com/Netflix/eureka/wiki 官方宣告停止开发,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka ...

  3. Spring Cloud 系列之 ZooKeeper 注册中心

    什么是注册中心 服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来存储服务信息,譬如提供者 url 串.路由信息等.服务注册中心是微服务架构中最基础的设施之一. 注册中心可以说 ...

  4. Spring Cloud Alibaba | Nacos服务注册与发现

    目录 Spring Cloud Alibaba | Nacos服务注册与发现 1. 服务提供者 1.1 pom.xml项目依赖 1.2 配置文件application.yml 1.3 启动类Produ ...

  5. Spring Cloud 系列之 Consul 配置中心

    前面我们已经学习过 Spring Cloud Config 了: Spring Cloud 系列之 Config 配置中心(一) Spring Cloud 系列之 Config 配置中心(二) Spr ...

  6. Spring Cloud 系列之 Apollo 配置中心(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Apollo 配置中心(一) 本篇文章讲解 Apollo 部门管理.用户管理.配置管理.集群管理. 点击链接观看:Ap ...

  7. Spring Cloud 系列之 Apollo 配置中心(四)

    本篇文章为系列文章,未读前几集的同学请猛戳这里: Spring Cloud 系列之 Apollo 配置中心(一) Spring Cloud 系列之 Apollo 配置中心(二) Spring Clou ...

  8. spring cloud实战 1-高可用注册中心

    创建父maven项目 提交代码至GitHub 创建eureka-server-1 项目搭建两种方式: 父pom中继承spring-boot-starter-parent,子pom中直接结成父pom.该 ...

  9. Spring Cloud 系列之 Config 配置中心(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Config 配置中心(一) 本篇文章讲解 Config 如何实现配置中心自动刷新. 配置中心自动刷新 点击链接观看: ...

  10. Spring Cloud 系列之 Config 配置中心(三)

    本篇文章为系列文章,未读前几集的同学请猛戳这里: Spring Cloud 系列之 Config 配置中心(一) Spring Cloud 系列之 Config 配置中心(二) 本篇文章讲解 Conf ...

随机推荐

  1. POJ1325二分匹配或者DINIC(最小路径覆盖)

    题意:        有k个任务,两个机器,第一个机器有n个模式,第二个机器有m个模式,每个任务要么在第一个机器的一个模式下工作,要么在第二个机器的一个模式下工作,机器每切换一个模式需要重启一次,两个 ...

  2. 内网穿透工具FRP的使用

    目录 FRP 使用FRP建立隧道 服务端 客户端

  3. <JVM下篇:性能监控与调优篇>01-概述篇-02-JVM监控及诊断工具-命令行篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  4. InnoDB存储引擎简介

    前言: 存储引擎是数据库的核心,对于 MySQL 来说,存储引擎是以插件的形式运行的.虽然 MySQL 支持种类繁多的存储引擎,但最常用的当属 InnoDB 了,本篇文章将主要介绍 InnoDB 存储 ...

  5. FROM-4-TO-6!!!!!!!!! - OO第二单元总结

    电梯的这三次作业是对并发编程的一次管窥,感觉收获还是蛮多的.在设计上有好的地方也有不足,这里简单回顾总结一下 设计总述 电梯这个问题由于比较贴近真实生活,所以需求还是很好理解的.总的来说,我的数据处理 ...

  6. [DB] 关系型数据库

    名词 数据库(database):保存有组织的数据的容器,是通过DBMS创建的容器 表(table):某种特定类型数据的结构化清单 元组(tuple):行,一条数据库记录,对应一个事物 属性(prop ...

  7. [项目] 淘淘商城 Part.2

    商品列表查询 Easyui 商品添加 商品类目选择 图片上传 富文本编辑器使用 添加的实现 展示首页 略 分页插件 在SqlMapConfig.xml,配置一个plugin 在sql语句执行之前,添加 ...

  8. ruby基础(四)

    ruby基础知识 模块 模块是ruby的特色功能之一.如果说类是事物的实体以及行为,那么模块表现的 就是事物的行为部分,模块和类有以下两点不同: 模块不能拥有实例 模块不能被继承 模块的使用方法 mo ...

  9. docker 日志位置

    日志分两类,一类是 Docker 引擎日志:另一类是 容器日志. Docker 引擎日志 Docker 引擎日志 一般是交给了 Upstart(Ubuntu 14.04) 或者 systemd (Ce ...

  10. 强哥ThinkPHP学习笔记

    TP框架:1.模板引擎2.MVC设计模式3.常用操作类 模板引擎和框架区别1.模板引擎只是框架中用来做php和html分离 MVC设计模式M model 数据模型V view 视图C control ...