博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Eureka服务发现与注册
阅读量:4129 次
发布时间:2019-05-25

本文共 8745 字,大约阅读时间需要 29 分钟。

1.1 什么是Eureka


想去搜一个比较官方的说法结果WIKI上面都是一串不相关的词条,结果还是帮了我.

Service Discovery: Eureka Clients

Service Discovery is one of the key tenets of a microservice based architecture. Trying to hand configure each client or some form of convention can be very difficult to do and can be very brittle. Eureka is the Netflix Service Discovery Server and Client. The server can be configured and deployed to be highly available, with each server replicating state about the registered services to the others.

节选翻译最后一句:可以对服务器进行配置和部署,使其具有高可用性,每个服务器都将对已注册服务的状态复制到其他服务器上。

相当于是一个服务的管理者,关于其它更丰富的描述与介绍其它大牛在其博客中也阐述的很清楚了,本篇重点将放在Eureka Server的发现与服务注册部署的笔记.

2.1 准备微服务


2.1.1 准备一个用户服务使用STS直接创建一个Boot项目: 将下面的几项勾选 这里使用了H2数据库 和Spring JPA作为DAO层

构建项目

创建好的POM.xml如下:
4.0.0
cn.splus
microservice-eureka-user
0.0.1-SNAPSHOT
jar
microservice-eureka-user
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
1.4.7.RELEASE
UTF-8
UTF-8
1.8
Camden.SR7
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-eureka-server
org.springframework.boot
spring-boot-starter-data-jpa
org.springframework.boot
spring-boot-starter-web
com.h2database
h2
runtime
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
准备数据库sql文件 以及准备几条数据,在resource目录下创建 schema.sql和data.sql:

这里写图片描述

表
数据

创建application.yml配置文件:

User配置文件

然后创建POJO对象:

POJO

创建DAO接口:

这里写图片描述

创建Controller:

这里写图片描述

自动生成的入口类(如果自己用maven创建项目需要自己按照这个格式加上@SpringBootApplication):
入口类

这里一定要注意包结构 入口类要与其它类所在包同级(在这里踩了个小坑调了一下午):

包结构

访问localhost:8001/findAll 和 localhost:8001/find/1 出现数据 ,完成

findAll
findOne

2.1.2 创建一个用户服务的消费者服务:使用STS创建一个新项目,勾选上这三项:

这里写图片描述

生成的POM.xml如下:

4.0.0
cn.splus
microservice-eureka-consumer
0.0.1-SNAPSHOT
jar
microservice-eureka-consumer
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
1.4.7.RELEASE
UTF-8
UTF-8
1.8
Camden.SR7
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-eureka-server
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
创建POJO对象

consumerPOJO

创建controller用RestTemplate请求用户服务的API

consumerController

入口类添加本方法,等价于RestTemplate rt = new RestTemplate:

consumerMain

配置文件中只需要配一个端口号:

consumerApplication

访问http://127.0.0.1:8010/user/1 出现数据说明成功:

这里写图片描述

2.2 编写Eureka Server


2.2.1使用STS创建新项目并勾选这两项:

create

生成后的POM.xml文件:
4.0.0
cn.splus
microservice-eureka-user
0.0.1-SNAPSHOT
jar
microservice-eureka-user
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
1.4.7.RELEASE
UTF-8
UTF-8
1.8
Camden.SR7
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-eureka-server
org.springframework.boot
spring-boot-starter-data-jpa
org.springframework.boot
spring-boot-starter-web
com.h2database
h2
runtime
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
添加配置文件application.yml://表示是否将自己注册到Eureka Server上,默认是true,因为这个项目本身就是Eureka Server,所以设置为falseeureka.client.registerWithEureka: false//表示是否从Eureka Server获取注册信息,默认为true,因为现在是一个单点Eureka Server,所以设为falseeureka.client.fetchRegistry: false//设置地址,查询服务和注册服务都要使用eureka.client.serviceUrl.defalutZone: http://localhost:8761/eureka/

application

2.2.2将微服务注册到Eureka Server上将本篇上面准备的两个微服务注册到2.2.1中创建的Eureka Server上因为之前创建项目已经把相关依赖都勾上了,不需要添加额外依赖在两个项目中都做如下操作:a)配置文件中添加一下配置://指定注册到Eureka Server上的应用名称spring.application.name: microservice-eureka-consumer//表示将自己的ip注册到Eureka Server上eureka.instance.ip-address: true

addApplication

b)在入口类加入如下注解:
mainAdd

访问http://localhost:8761看见两个服务 即注册成功:

这里写图片描述

3.1Eureka Server的高可用


Eureka Server可以通过多个实例相互注册的方式实现高可用,它们之间会互相同步信息保持所有节点数据一致.我们可以在上面例子的基础上构建一个双节点的Eureka Server集群3.1.1修改application.yml配置文件为下面的形式:

newApplication

可以看到文件通过"---"分为了三个部分,开头部分配置了公共属性,应用名称;然后下面分别为我们的两个节点配置了名称和端口号,还有互相注册到Server中3.1.2把HOSTS文件加上127.0.0.1 peer1 peer2(Windows在C:\Windows\System32\drivers\etc目录下):

HOSTS

3.1.3右键项目Run As-->Maven Install把项目打包

install

也可以进入项目目录下在地址栏进入cmd 输入命令mvn package 也是同样的效果 打好之后的包会在项目的target目录下:

mvnpackage

出现BUILD SUCCESS表示成功

buildsuccess

3.1.4STS中右键项目-->Run As-->Run Configurations

RUN

3.1.5①右键Java Application New 一个,②选择入口类:

这里写图片描述

3.1.6在Arguments中Program arguments框中输入 --spring.profiles.active=peer1表名要运行的是peer1(peer2同理):

Program arguments

点击运行,把peer1和peer2都用如上方式运行也可以进入项目target文件在地址栏输入cmd进入命令行执行java -jar [打好的包名] --spring.profile.active=peer2 运行 (与上面方法等效)

maven run

3.1.7 将服务注册到Eureka Server集群上 修改配置文件,添加注册地址:

这里写图片描述

3.1.8将我们的consumer 与 user服务启动,并访问http://peer1:8761/,http://peer2:8762/

peer1


peer2

可以看到服务都分别注册到了Eureka Server上  它们之间也互相注册以及自己注册到了自己上.此时我们将peer1关闭

ShutDownPeer1

但是此时可以看到peer2开启了”自我保护模式”(出现了那两行红字),默认情况下如果Eureka Server在90秒没有监测到某个微服务的心跳,就会将其注销,因为它的架构设计是宁愿保留”不健康”的微服务,也不盲目注销”健康”的微服务,所以设计了应对这一网络异常的安全保护措施.所以此时peer1并没有被注销掉.

至此 我们就完成了Eureka Server的HA部署

你可能感兴趣的文章
hdu 3787 hdoj 3787
查看>>
hdu 3790 hdoj 3790
查看>>
hdu 3789 hdoj 3789
查看>>
hdu 3788 hdoj 3788
查看>>
zju 1003 zoj 1003
查看>>
zju 1004 zoj 1004
查看>>
zju 1005 zoj 1005
查看>>
zju 1006 zoj 1006
查看>>
【虚拟机】虚拟化架构与系统部署(Windows系统安装)
查看>>
字节跳动安卓开发实习生面试分享
查看>>
好书分享之——《能力陷进》
查看>>
阅读笔记《c++ primer》
查看>>
阅读笔记《C++标准程序库》
查看>>
基于mirror driver的windows屏幕录像
查看>>
C语言8
查看>>
Qt实现简单延时
查看>>
qml有关矩形说明
查看>>
在qt中使用QSplitter设置初始比例setStretchFactor失效的解决方法
查看>>
repeater的使用
查看>>
qt msvc编译中文乱码解决
查看>>