Spring Cloud系列(一):服务注册中心
一、Spring Cloud简介
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。
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-eureka和eureka.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系列(一):服务注册中心的更多相关文章
- Spring Cloud 系列之 Consul 注册中心(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Consul 注册中心(一) 本篇文章讲解 Consul 集群环境的搭建. Consul 集群 上图是一个简单的 Co ...
- Spring Cloud 系列之 Consul 注册中心(一)
Netflix Eureka 2.X https://github.com/Netflix/eureka/wiki 官方宣告停止开发,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka ...
- Spring Cloud 系列之 ZooKeeper 注册中心
什么是注册中心 服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来存储服务信息,譬如提供者 url 串.路由信息等.服务注册中心是微服务架构中最基础的设施之一. 注册中心可以说 ...
- Spring Cloud Alibaba | Nacos服务注册与发现
目录 Spring Cloud Alibaba | Nacos服务注册与发现 1. 服务提供者 1.1 pom.xml项目依赖 1.2 配置文件application.yml 1.3 启动类Produ ...
- Spring Cloud 系列之 Consul 配置中心
前面我们已经学习过 Spring Cloud Config 了: Spring Cloud 系列之 Config 配置中心(一) Spring Cloud 系列之 Config 配置中心(二) Spr ...
- Spring Cloud 系列之 Apollo 配置中心(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Apollo 配置中心(一) 本篇文章讲解 Apollo 部门管理.用户管理.配置管理.集群管理. 点击链接观看:Ap ...
- Spring Cloud 系列之 Apollo 配置中心(四)
本篇文章为系列文章,未读前几集的同学请猛戳这里: Spring Cloud 系列之 Apollo 配置中心(一) Spring Cloud 系列之 Apollo 配置中心(二) Spring Clou ...
- spring cloud实战 1-高可用注册中心
创建父maven项目 提交代码至GitHub 创建eureka-server-1 项目搭建两种方式: 父pom中继承spring-boot-starter-parent,子pom中直接结成父pom.该 ...
- Spring Cloud 系列之 Config 配置中心(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Config 配置中心(一) 本篇文章讲解 Config 如何实现配置中心自动刷新. 配置中心自动刷新 点击链接观看: ...
- Spring Cloud 系列之 Config 配置中心(三)
本篇文章为系列文章,未读前几集的同学请猛戳这里: Spring Cloud 系列之 Config 配置中心(一) Spring Cloud 系列之 Config 配置中心(二) 本篇文章讲解 Conf ...
随机推荐
- SQL Server 数据库基本使用技巧
use master; #显示数据库 select top 3 * from spt_values; #显示去前3行 select * from test where id2 like '%1010% ...
- C#-DUP
void jianting() { int port = 8888; UdpClient udpclient = new UdpClient(port); IPEndPoint ipendpoint ...
- Intel汇编语言程序设计学习-第三章 汇编语言基础-中
3.2 例子:整数相加减 现在来看一个进行整数加减操作的汇编语言小程序.寄存器用于存放中间数据,我们调用一个库函数在屏幕上显示寄存器的内容.下面是程序的源码: TITLE Add and Subtr ...
- <JVM下篇:性能监控与调优篇>补充:浅堆深堆与内存泄露
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- calc 用法以及原理
CSS3 的 calc() 函数允许我们在属性值中执行数学计算操作.例如,我们可以使用 calc() 指定一个元素宽的固定像素值为多个数值的和. 它是CSS预处理器 .foo { width: 100 ...
- Java常见异常类型
在Java学习过程中,我们会碰到各种各样的异常,现将面试过程中遇到的常见异常做一罗列并举例: 1.NullPointerException: 空指针异常.菜鸟编程经验发现这个异常是经常会发生的,属于运 ...
- ppt技巧--线条
声明:本文所有截图来源于网易云课堂--<和秋叶一起学PPT>,只做个人复习之用,特此声明! 线条的五种用途:
- 关于有符号数和无符号数的转换 - C/C++
转载自:http://www.94cto.com/index/Article/content/id/59973.html 1.引例: 今天在做了一道关于有符号数和无符号数相互转换及其左移/右移的问题, ...
- ALPHA任务拆解
项目 内容 这个作业属于哪个课程 BUAA2020软件工程 这个作业的要求在哪里 作业要求 我们在这个课程的目标是 学会团队合作,共同开发一个完整的项目 这个作业在哪个具体方面帮助我们实现目标 团队任 ...
- VS·卸载进程卡死"正在配置您的系统,这可能需要一些时间"
阅文时长 | 0.34分钟 字数统计 | 596.8字符 主要内容 | 1.引言&背景 2.声明与参考资料 『VS·卸载进程卡死"正在配置您的系统,这可能需要一些时间"』 ...