走进Spring Cloud之二 eureka注册中心(Greenwich版本)
走进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版本)相关推荐
- SpringCloud之一eureka注册中心(Greenwich版本)
创建服务注册中心 采用Eureka作为服务注册与发现的组件 创建一个maven主工程 首先创建一个主Maven工程,在其pom文件引入依赖,spring Boot版本为2.1.3.RELEASE,Sp ...
- Spring Cloud入门-Config分布式配置中心(Hoxton版本)
文章目录 Spring Cloud入门系列汇总 摘要 Spring Cloud Config 简介 在Git仓库中准备配置信息 配置仓库目录结构 master分支下的配置信息 dev分支下的配置信息 ...
- spring cloud 2.3.x 注册中心eureka 配置
添加Eureka依赖配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...
- Spring Cloud 系列之 ZooKeeper 注册中心
什么是注册中心 服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来存储服务信息,譬如提供者 url 串.路由信息等.服务注册中心是微服务架构中最基础的设施之一. 注册中心可以说 ...
- Spring Cloud入门-Nacos实现注册和配置中心(Hoxton版本)
文章目录 Spring Cloud入门系列汇总 摘要 Nacos简介 使用Nacos作为注册中心 安装并运行Nacos 创建应用注册到Nacos 负载均衡功能 使用Nacos作为配置中心 创建naco ...
- spring cloud、gradle、父子项目、微服务框架搭建---搭建父子级多模块项目,并注册到Eureka注册中心(二)
总目录 https://preparedata.blog.csdn.net/article/details/120062997 一.新建一个父级gradl模块 1.在桌面或新建文件里面,右键,打开ID ...
- Spring Cloud(二): 注册中心Eureka的使用
Eureka 按照官方介绍: Eureka is a REST (Representational State Transfer) based service that is primarily us ...
- spring cloud搭建_Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!
Spring Cloud 的注册中心可以由 Eureka.Consul.Zookeeper.ETCD 等来实现,这里推荐使用 Spring Cloud Eureka 来实现注册中心,它基于 Netfl ...
- spring cloud、gradle、父子项目、微服务框架搭建---搭建Eureka注册中心(一)
总目录 https://preparedata.blog.csdn.net/article/details/120062997 一.新建一个父级gradl模块 1.在桌面或新建文件里面,右键,打开ID ...
最新文章
- 内江将被打造成四川物联网西部副中心
- Android PDU
- 刚转Java?那准备转回.NET5吧!
- Mysql(对数据库的操作)
- 基于AJAX的自动完成
- java商城购物车商品sku变化_在Woocommerce 3中的购物车和结帐页面上显示SKU
- 软件项目经理的心得和经验总结
- python 查找文件夹下的文件名_python查找模式后面的文件夹中的所有文件名
- OpenCV之感兴趣区域ROI
- 从mediaserver入手快速理解binder机制(最简单理解binder)
- 微服务实现不同登陆_PaaS与IaaS在微服务架构实现方面的6大不同
- 【区块链】区块链学习要点记录
- java程序编译命令_使用 java 命令编译运行 java 程序
- 广数928te_广数928te钻孔程序怎么编?
- 这5个开源和免费静态代码分析工具,你一个都没有用过吗?不会吧
- 关于TikTok环境伪装度检测,whoer和上网大师app的对比
- 真正拖垮打工人的,是沉没成本
- STM32 控制蜂鸣器播放音乐的原理和实例
- Hibernate的搭建
- pvar模型(Pvar模型去除时间效应和固定效应)
热门文章
- 相机模型和双目立体匹配完成一个基于KITTI立体相机采集图片的立体图像匹配程序,生成视差图像和3D点云图像
- 使用Redis进行经纬度距离
- 网络编程五种IO模型的形象比喻(老陈收信)
- 编写五子棋的完整python代码_PyQt写的五子棋
- 录播系统的服务器有哪些,录播系统
- 关于笔记本电脑外接扩展第二显示器显示有问题,显示模糊等,分辨率调节无果的解决方案,HDMI转VGA显示问题解决
- 网站用户行为分析项目之会话切割(一)
- java趣味程序 五猴分桃_趣味数学及编程拓展epub
- 5周年,时过境迁,千变万化
- 机器学习算法----聚类 (K-Means、LVQ、GMM、DBSCAN、AGNES) (学习笔记)