- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Spring Cloud引入Eureka组件,完善服务治理由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
。
netflix eureka 是一款由 netflix 开源的基于 rest 服务的注册中心,用于提供服务发现功能。spring cloud eureka 是 spring cloud netflix 微服务套件的一部分,基于 netflix eureka 进行了二次封装,主要负责完成微服务架构中的服务治理功能.
spring cloud eureka 是一个基于 rest 的服务,并提供了基于 java 的客户端组件,能够非常方便的将服务注册到 spring cloud eureka 中进行统一管理.
。
1.创建一个名为 eureka-server 的 spring cloud 的项目(略) 。
2.引入 eureka-server 依赖(maven) 。
1
2
3
4
|
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-netflix-eureka-server</artifactid>
</dependency>
|
3.开启 eurekaserver 在启动类上添加 @enableeurekaserver注解,开启 eurekaserver 的自动装配功能.
4.修改服务端口为8761 。
5.修改 register-with-eureka 配置 添加一个eureka.client.register-with-eureka=false的配置,作为eurekaserver可以不将自己的实例注册到 eureka server 中,如果是集群部署设置为true(不配置默认值也是true).
6.修改 fetch-registry 配置 添加一个 eureka.client.fetch-registry=false 的配置,表示不从 eureka server 中获取 eureka 的注册表信息,如果是集群部署设置为true(不配置默认值也是true).
7.添加defaultzone配置 添加一条配置eureka.client.service-url.defaultzone=http://localhost:8761/eureka/(如果不加这个的话又自定义了端口,可能会报错connect to localhost:8761 timed out) 。
8.启动 eureka server,访问 http://localhost:8761/,如果顺利的话可以看到如下成功页面 。
至此,一个简单的eureka注册中心就完成了,后面实战中的 eureka client 都会注册到这个注册中心。上面的demo只是一个单机部署,接下里我们看看我们要部署多个eureka节点时怎么做.
。
集群部署一般有两种情况,一是伪集群部署,二是真正的集群部署.
集群部署,我们可以在多台物理机上部署,这样多个实例可以用同一个端口,不会出现伪集群端口冲突的问题,更推荐这种方式,性能更高,稳定性也更好.
伪集群部署一般说的是在同一台物理机器上部署多个节点,这时候端口就必须不一样,否则启动的时候会出现端口冲突; 。
伪集群部署示例:
假设要部署3个节点:master/slave1/slave2 。
1.在application.yml配置定义三个节点的端口:
1
2
3
4
|
port:
master:
8761
slave1:
8762
slave2:
8763
|
2.我们可以分别创建三个配置文件application-master.yml、application-slave1.yml、application-slave2.yml,三个配置文件除了有冲突的地方端口不一样,其他配置完全一样 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# application-master.yml
server:
port: ${port.slave1} # 服务端口
# application-master.yml
server:
port: ${port.slave1} # 服务端口
# application-slave2slave2.yml
server:
port: ${port.slave2} # 服务端口
# 以下配置三个配置文件都一样
eureka:
client:
register-with-eureka:
true
#不将自己的实例注册到 eureka server
fetch-registry:
true
#不从 eureka server 中获取 eureka 的注册表信息
service-url:
defaultzone: http:
//127.0.0.1:${port.master}/eureka/,http://127.0.0.1:${port.slave1}/eureka/,http://127.0.0.1:${port.slave2}/eureka/
instance:
hostname: eureka-server
server:
enable-self-preservation:
true
# 开启自我保护机制,默认也是开启的
|
3.idea 分别以三个不同的profiles启动 。
4.访问 http://localhost:8761/ 或者 http://localhost:8762/ 或者 http://localhost:8761/,出现以下类似页面则代表成功 。
观察上面的页面,发现 eureka server 节点均出现在 unavailable-replicas 下,说明集群搭建还是失败了,那这个问题怎么解决呢?
1.在host添加以下配置 。
1
2
3
|
127.0
.
0.1
eureka-server-master
127.0
.
0.1
eureka-server-slave1
127.0
.
0.1
eureka-server-slave2
|
2.修改三个配置文件的defaultzone信息 。
1
2
3
4
|
eureka:
client:
service-url:
defaultzone: http:
//eureka-server-master:${port.master}/eureka/,http://eureka-server-slave1:${port.slave1}/eureka/,http://eureka-server-slave2:${port.slave2}/eureka/
|
3.配置eureka.instance.hostname信息(尤其是在同一台物理机上配置三个节点时,需要修改为不同的host) 。
1
2
3
4
5
6
7
8
9
10
11
|
eureka:
instance:
hostname: eureka-server-master
eureka:
instance:
hostname: eureka-server-slave1
**eureka:
instance:
hostname: eureka-server-slave2
|
4.重新启动,访问http://localhost:8761/ ,其他两个节点君出现在 available-replicas 选项 。
注意:如果执行完上面还是出现在,请检查是否配置了 prefer-ip-address = true,true #以ip地址注册到服务中心,相互注册使用ip地址,如果是在一台物理机上,ip都是一个,所以建议设置成false,或者不配置再试试.
。
1.创建一个名为eureka-client 的sprintboot的项目(略) 。
2.引入eureka-client依赖(maven) 。
1
2
3
4
|
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-netflix-eureka-client</artifactid>
</dependency>
|
3.引入spring-boot-starter-web依赖,如果没有加上spring-boot-starter-web,服务无法正常启动 。
1
2
3
4
|
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
</dependency>
|
4.开启 eurekaclient 在启动类上加入注解@enableeurekaclient,用于启用eureka发现配置 。
5.配置端口为8081 。
1
2
3
4
|
server.port =
8081
port.master =
8761
port.slave1 =
8762
port.slave2 =
8763
|
6.配置注册中心地址 。
添加配置 eureka.client.serviceurl.defaultzone=http://eureka-server-master:${port.master}/eureka/,http://eureka-server-slave1:${port.slave1}/eureka/,http://eureka-server-slave2:${port.slave2}/eureka/ 。
7.启动服务,刷新 http://localhost:8761/ 页面,如果看到了eureka-client应用则表示注册成功 。
。
自我保护机制是为了避免因网络分区故障而导致服务不可用的问题。具体现象为当网络故障后,所有的服务与 eureka server 之间无法进行正常通信,一定时间后,eureka server 没有收到续约的信息,将会移除没有续约的实例。这个时候正常的服务也会被移除掉,所以需要引入自我保护机制来解决这种问题.
当服务提供者出现网络故障,无法与 eureka server 进行续约,eureka server 会将该实例移除,此时服务消费者从 eureka server 拉取不到对应的信息,实际上服务提供者处于可用的状态,问题就是这样产生的.
开启自我保护机制 。
1
|
eureka.server.enable-self-preservation=
true
# 开启自我保护机制,默认也是开启的
|
当服务提供者出现网络故障,无法与 eureka server 进行续约时,虽然 eureka server 开启了自我保护模式,但没有将该实例移除,服务消费者还是可以正常拉取服务提供者的信息,正常发起调用.
但是自我保护机制也有不好的地方,如果服务提供者真的下线了,由于 eureka server 自我保护还处于打开状态,不会移除任务信息,当服务消费者对服务提供者 b 进行调用时,就会出错.
自我保护模式有利也有弊,但我们建议在生产环境中还是开启该功能,默认配置也是开启的.
完整代码实例:
。
以上就是spring cloud引入eureka组件,完善服务治理的详细内容,更多关于spring cloud引入eureka组件的资料请关注我其它相关文章! 。
最后此篇关于Spring Cloud引入Eureka组件,完善服务治理的文章就讲到这里了,如果你想了解更多关于Spring Cloud引入Eureka组件,完善服务治理的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
在开始之前,我想指出的是,我已经通过Google进行了一次诚实而真实的搜索,涉及范围很广,无法找到。 我需要(对于我正在开发的项目)所有Delphi(从2007年到最新发布的版本,我不再支持任何早于2
我正在使用 RPM 将 Liquibase 数据库迁移添加到我们当前的产品部署中,并正在寻找一些有关如何实现我的预期目标的建议/技巧。 最好,RPM 能够安装在全新且 Shiny 的开发人员环境以及现
我目前正在使用一本书学习 UITableViewCell。为了在滚动时重用单元格,作者要求修改原始代码以包含一个if()。检查特定重用标识符的单元格是否存在的语句。但是,在添加 if() 之后语句,X
在 C++ 中引入 protected 访问说明符背后的基本原理是什么。举个例子会有帮助。 最佳答案 对于这类问题,我推荐 Bjarne Stroustrup 的The Design And Evol
我正在尝试使用模板参数中给定的维度和类型创建一个可重用的矩阵类。结构本身就是: template struct Matrix { T elements[N* M]; }; 当我尝试实现矩阵乘
我有一个简单的查询: $query1="SELECT * FROM wp_users WHERE now() < (last_login + INTERVAL 6 month)"; $resu
在 Ioke doc 中,ISpec 测试包含在文档中,参见 ioke.org/dok/index.html 这如何用 Ruby 的 RSpec 和 RDoc(或 SDoc)来完成?我找不到任何命令行
在客户端/服务器通信中,我看到来自客户端的 TCP ZeroWindow。 在这种情况之后预期的场景是什么(设置和发送什么标志)? 以下是我可能得到的日志。在这种情况下,服务器发送 RST 数据包来终
来自wikipedia关于 Lambda 函数和表达式的文章: users will often wish to define predicate functions near the place w
我有一个由父 POM 和几个子模块组成的 Maven 项目。它在 Intellij 中编译和运行良好(我假设它使用 javac 而不是 Maven)。 当我运行 maven clean install
所以我刚开始使用 d3.js,但我一直收到 JavaScript 错误,我不知道为什么。我刚刚用 svg 创建了三个圆圈,想用 d3 选择它们。这是我的代码:
Objective C 引入了一种称为 ARC 的技术,以将开发人员从内存管理的负担中解放出来。听起来不错,如果g++也有这个功能,我想C++开发者会很高兴的。 ARC allows you to p
在 package.json 添加 "font-awesome": "^4.7.0" 执行 npm install 在 main.js 引入
为什么 WSDL 引入 wsdl:message?和消息部分? 与在操作参数(输入、输出、故障)中直接使用 XSD 相比,他们可以带来什么优势? 它们(带有 wsdl 消息部分的 wsdl 消息)如何
I already read doc here : https://github.com/laravel/framework/pull/25997 我想知道的是使用 withCount()我们只是加载
我已经为此苦苦挣扎了一段时间,但不太明白发生了什么。我有一个包含 Sides(通常是 2 个)的 Card 实体 - 并且 Cards 和 Sides 都有一个 Stage。我正在使用 EF Code
下面的 swiftUI 代码在 iOS13 上运行良好,但是在使用 iOS14 进行测试时,我在尝试显示模式表时遇到了由强制解包选项引起的 fatal error 。据我所知,工作表不应该尝试为 se
出于个人原因,我需要记忆一下 jsp 上的一些事情 :) 我有一个简单的登录页面: Login First name:
据我了解,PYTHONCASEOK 选项允许通过不区分大小写的匹配来导入模块。但是,由于 python 中的几乎所有内容都区分大小写,为什么它必须启用此选项以实现更惰性的写入。 还有什么介绍的理由吗?
全新的早午餐(和 bower )。我通过 bower 安装了 Bootstrap,我有以下早午餐配置文件: exports.config = # See http://brunch.io/#doc
我是一名优秀的程序员,十分优秀!