走进Spring Cloud之二 eureka注册中心(Greenwich版本)

  • eureka
  • 构建SpringCloud 工程
  • eureka 注册中心
    • eureka-server moudle
    • pom.xml
    • application.yml
    • EurekaServerApplication.java
  • eureka集群使用
    • profiles
    • /hosts
    • 编译运行

eureka

Eureka 是一个基于 REST 的服务,主要在 AWS 云中使用, 定位服务来进行中间层服务器的负载均衡和故障转移。

Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现。Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server,并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。Spring Cloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。

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

最简单的微服务架构图:

  • Eureka Server(注册中心):提供服务注册和发现
  • Service Provider(服务提供方):将自身服务注册到Eureka中心,从而使服务消费方能够找到
  • Service Consumer(服务消费方):从Eureka注册中心获取注册服务列表,从而能够消费服务

构建SpringCloud 工程

Spring Cloud依赖于Spring Boot,并且2者之间的版本有严重的匹配要求,这次给大家推荐一个官方Spring构建工程(传送门)网址,我们可以利用它轻松构建我们的Spring Boot工程。

例如我们这里选择Spring Cloud的相关依赖,并构建

最终网页会构建我们的Spring Boot工程并且下载到本地,我们只需要使用Idea倒入工程即可

这了我们为了给大家演示完整的SpringCloud,我们把我们当前的工程构建为SpringBoot聚合工程,我这里的聚合工程取名为scexample.

本文形成时,工程结构如下:

可以看到我的scexample聚合工程里面有很多子模块对应我们微服务的各种服务系统。这里我们后面再深入。
为了将scexample变为聚合工程,我们将刚刚自动生成的代码pom.xml稍作改动,将打包类型改为pom

 <packaging>pom</packaging>

完整案例如下:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.pubutech</groupId><artifactId>scexample</artifactId><version>0.0.1-SNAPSHOT</version><modules><module>eureka-server</module><module>service-producer</module><module>service-consumer</module><module>service-zuul</module><module>service-cosumer-ribbon</module></modules><packaging>pom</packaging><name>scexample</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.0.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-boot.version>2.1.0.RELEASE</spring-boot.version><spring-cloud.version>Greenwich.M1</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-bus</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-stream</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-stream-binder-rabbit</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-stream-test-support</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><profiles><profile><id>dev</id><properties><profiles.active>dev</profiles.active><env>dev</env></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>test</id><properties><profiles.active>test</profiles.active><env>test</env></properties></profile><profile><id>prod</id><properties><profiles.active>prod</profiles.active><env>prod</env></properties></profile></profiles><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>

以上依赖项请按需修改,我这里为了演示更多的内容,一开始就导入很多依赖,完全不必要。(子模块目前还没有创建,我已经创建了所以会有,可以对应删掉)。

eureka 注册中心

eureka-server moudle

接下来,我们构建eureka-server注册中心
当前聚合工程下选择 new->moudle

接下来 next

然后填写arifactId为eureka-server

然后一路next到finish.

pom.xml

然后修改eureka-server的pom.xml如下:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>scexample</artifactId><groupId>com.pubutech</groupId><version>0.0.1-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>eureka-server</artifactId><packaging>jar</packaging><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-devtools</artifactId><version>${spring-boot.version}</version><optional>true</optional></dependency><!-- JAVA 8 JAXB Start按需添加--><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.0</version></dependency><dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-impl</artifactId><version>2.3.0</version></dependency><dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-core</artifactId><version>2.3.0</version></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency><!-- JAVA 8 JAXB End--></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><!-- eureka集群使用 Start--><profiles><profile><id>peer1</id><properties><profiles.active>peer1</profiles.active><env>peer1</env></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>peer2</id><properties><profiles.active>peer2</profiles.active><env>peer2</env></properties></profile><profile><id>peer3</id><properties><profiles.active>peer3</profiles.active><env>peer3</env></properties></profile></profiles><!-- eureka集群使用 end--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

application.yml

resource目录下新建application.yml
配置信息如下

server:port: 8761eureka:instance:hostname: localhostclient:#表示是否将自己注册到Eureka Server,默认为true。register-with-eureka: false#表示是否从Eureka Server获取注册信息,默认为true。fetch-registry: falseservice-url:#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/spring:application:name: eureka-server

EurekaServerApplication.java

新建自定SpringApplication的Application文件

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

那么最简单的eureka-server注册中心已经完成。
启动SpringBoot Application
访问 localhost:8761

eureka集群使用

在一个分布式系统中,服务注册中心是最重要的基础部分,理应随时处于可以提供服务的状态。如果是单点部署,如果注册中心出现故障,将会出现毁灭性的灾难。为了维持其可用性,使用集群是很好的解决方案。Eureka通过互相注册的方式来实现高可用的部署,所以我们只需要将Eureke Server配置其他可用的serviceUrl就能实现高可用部署。

新建集群配置profiles:application-peer1.yml/application-peer2.yml/application-peer3.yml

application-peer1.yml

server:port: 8761eureka:instance:hostname: peer1client:service-url:#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/spring:application:name: eureka-server-peer1

application-peer2.yml

server:port: 8762eureka:instance:hostname: peer2client:service-url:#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/spring:application:name: eureka-server-peer2

application-peer3.yml

server:port: 8763eureka:instance:hostname: peer3client:service-url:#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/spring:application:name: eureka-server-peer3

profiles

上面添加的pom.xml

 <!-- eureka集群使用 Start--><profiles><profile><id>peer1</id><properties><profiles.active>peer1</profiles.active><env>peer1</env></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>peer2</id><properties><profiles.active>peer2</profiles.active><env>peer2</env></properties></profile><profile><id>peer3</id><properties><profiles.active>peer3</profiles.active><env>peer3</env></properties></profile></profiles><!-- eureka集群使用 end-->

/hosts

本次测试,配置/etc/hosts

127.0.0.1       localhost,peer1,peer2,peer3

编译运行

#打包
mvn clean package
mvn install

运行

java -jar eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1java -jar eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2java -jar eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer3

再次访问 localhost:8761

GitHub源代码

走进Spring Cloud之二 eureka注册中心(Greenwich版本)相关推荐

  1. SpringCloud之一eureka注册中心(Greenwich版本)

    创建服务注册中心 采用Eureka作为服务注册与发现的组件 创建一个maven主工程 首先创建一个主Maven工程,在其pom文件引入依赖,spring Boot版本为2.1.3.RELEASE,Sp ...

  2. Spring Cloud入门-Config分布式配置中心(Hoxton版本)

    文章目录 Spring Cloud入门系列汇总 摘要 Spring Cloud Config 简介 在Git仓库中准备配置信息 配置仓库目录结构 master分支下的配置信息 dev分支下的配置信息 ...

  3. spring cloud 2.3.x 注册中心eureka 配置

    添加Eureka依赖配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...

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

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

  5. Spring Cloud入门-Nacos实现注册和配置中心(Hoxton版本)

    文章目录 Spring Cloud入门系列汇总 摘要 Nacos简介 使用Nacos作为注册中心 安装并运行Nacos 创建应用注册到Nacos 负载均衡功能 使用Nacos作为配置中心 创建naco ...

  6. spring cloud、gradle、父子项目、微服务框架搭建---搭建父子级多模块项目,并注册到Eureka注册中心(二)

    总目录 https://preparedata.blog.csdn.net/article/details/120062997 一.新建一个父级gradl模块 1.在桌面或新建文件里面,右键,打开ID ...

  7. Spring Cloud(二): 注册中心Eureka的使用

    Eureka 按照官方介绍: Eureka is a REST (Representational State Transfer) based service that is primarily us ...

  8. spring cloud搭建_Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!

    Spring Cloud 的注册中心可以由 Eureka.Consul.Zookeeper.ETCD 等来实现,这里推荐使用 Spring Cloud Eureka 来实现注册中心,它基于 Netfl ...

  9. spring cloud、gradle、父子项目、微服务框架搭建---搭建Eureka注册中心(一)

    总目录 https://preparedata.blog.csdn.net/article/details/120062997 一.新建一个父级gradl模块 1.在桌面或新建文件里面,右键,打开ID ...

最新文章

  1. 内江将被打造成四川物联网西部副中心
  2. Android PDU
  3. 刚转Java?那准备转回.NET5吧!
  4. Mysql(对数据库的操作)
  5. 基于AJAX的自动完成
  6. java商城购物车商品sku变化_在Woocommerce 3中的购物车和结帐页面上显示SKU
  7. 软件项目经理的心得和经验总结
  8. python 查找文件夹下的文件名_python查找模式后面的文件夹中的所有文件名
  9. OpenCV之感兴趣区域ROI
  10. 从mediaserver入手快速理解binder机制(最简单理解binder)
  11. 微服务实现不同登陆_PaaS与IaaS在微服务架构实现方面的6大不同
  12. 【区块链】区块链学习要点记录
  13. java程序编译命令_使用 java 命令编译运行 java 程序
  14. 广数928te_广数928te钻孔程序怎么编?
  15. 这5个开源和免费静态代码分析工具,你一个都没有用过吗?不会吧
  16. 关于TikTok环境伪装度检测,whoer和上网大师app的对比
  17. 真正拖垮打工人的,是沉没成本
  18. STM32 控制蜂鸣器播放音乐的原理和实例
  19. Hibernate的搭建
  20. pvar模型(Pvar模型去除时间效应和固定效应)

热门文章

  1. 相机模型和双目立体匹配完成一个基于KITTI立体相机采集图片的立体图像匹配程序,生成视差图像和3D点云图像
  2. 使用Redis进行经纬度距离
  3. 网络编程五种IO模型的形象比喻(老陈收信)
  4. 编写五子棋的完整python代码_PyQt写的五子棋
  5. 录播系统的服务器有哪些,录播系统
  6. 关于笔记本电脑外接扩展第二显示器显示有问题,显示模糊等,分辨率调节无果的解决方案,HDMI转VGA显示问题解决
  7. 网站用户行为分析项目之会话切割(一)
  8. java趣味程序 五猴分桃_趣味数学及编程拓展epub
  9. 5周年,时过境迁,千变万化
  10. 机器学习算法----聚类 (K-Means、LVQ、GMM、DBSCAN、AGNES) (学习笔记)