一、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. hdu5015 矩阵快速幂233(好题)

    题意:       给你一个(n+1)*(m+1)的矩阵mat,然后给你mat[0][1] = 233 ,mat[0][2] = 2333,mat[0][3] = 23333...,然后输入mat[1 ...

  2. UVA11520填充正方形

    题意:      给你一个n*n的矩阵,让你往里面添加大写字母,矩阵有的字母已经给填好了,然后要求是每个格子都不能与他相邻的格子的大写字母相同,如果有多个答案,输出从上到下,从左到右所连接的成的那个n ...

  3. Portswigger web security academy:OS command injection

    Portswigger web security academy:OS command injection 目录 Portswigger web security academy:OS command ...

  4. PHP中文转拼音扩展

    Pinyin 基于 CC-CEDICT 词典的中文转拼音工具,更准确的支持多音字的汉字转拼音解决方案. 安装 使用 Composer 安装: $ composer require "over ...

  5. KMP算法以及优化(代码分析以及求解next数组和nextval数组)

    KMP算法以及优化(代码分析以及求解next数组和nextval数组) 来了,数据结构及算法的内容来了,这才是我们的专攻,前面写的都是开胃小菜,本篇文章,侧重考研408方向,所以保证了你只要看懂了,题 ...

  6. select 语句的基础语法

    授权语法sql 一.用户的创建与使用 在管理员登录后可创建用户 --创建qfplan用户-create user qfplan identified by qfplan; --用户基本权限授权gran ...

  7. Linux命令nohup实现命令后台运行并输出到或记录到日志文件

    Linux命令nohup实现命令后台运行并输出到或记录到日志文件 导读 我们在调试程序的时候,免不了要去抓一些 log ,然后进行分析.如果 log 量不是很大的话,那很简单,只需简单的复制粘贴就好. ...

  8. 理解RESTful架构——Restful API设计指南

    理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...

  9. TrueCrypt与CryptSetup双系统全盘加密(图文)

    http://blog.topsec.com.cn/truecrypt%E4%B8%8Ecryptsetup%E5%8F%8C%E7%B3%BB%E7%BB%9F%E5%85%A8%E7%9B%98% ...

  10. 如何解决在WordPress安装Redis插件时需要输入FTP问题?

    用LAMP或者LNMP搭建Worepress的时候,安装主题或者插件时候,往往提示需要输入FTP服务端信息的问题,其实这是一个坑,可以完全避免的 我们只需在wp-config.php文件最后添加以下代 ...