三、Eurake 服务注册与发现「建议收藏」

三、Eurake 服务注册与发现「建议收藏」3、Eurake服务注册与发现3.1基于Springboot构建Eurake服务在第二节中《Springboot项目构建》 中的第三步中选择如下组件: 左侧选择 cloudDiscovery 在其子组件中选择 EurakeServer ,我们在这里面还可以看到 EurakeDiscovery 、ZookeeperDiscovery 等组件。其中EurakeDisco

大家好,又见面了,我是你们的朋友全栈君。

3、 Eurake 服务注册与发现

3.1 基于Springboot构建Eurake服务

在第二节中《Springboot项目构建》 中的第三步 中选择如下组件: 三、Eurake 服务注册与发现「建议收藏」左侧选择 cloud Discovery 在其子组件中选择 EurakeServer ,我们在这里面还可以看到 EurakeDiscovery 、ZookeeperDiscovery 等组件。 其中EurakeDiscovery 就是我们后面,将服务提供方的服务注册到EurakeServer 中时需要引入的组件。

项目构建成功后我们会在pom.xml发现如下依赖:

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

说明我们已经成功引入了EurakeServer。 不过我们还需要进行下面配置 虽然我们已经引入了EurakeServer 组件,但我们还需要启用他(后面很多组件也需要类似的方式去启用):

@SpringBootApplication
 @EnableEurekaServer
public class EurekaserverApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaserverApplication.class, args);
    }
}

我们通过@EnableEurekaServer去启用Eurake

resources/application.properties 中添加如下配置:

server.port=8761 
eureka.client.register-with-eureka=false #是否将自己注册到EurrkeServer,默认为true
eureka.client.fetch-registry=false #表示是否从EurekaServer获取注册信息,默认为true,表示需要从其他server同步信息
eureka.client.service-url.defaultZone= http://localhost:8761/eureka/#设置与EurekaServer 交互的地址,查询服务和注册服务都依赖这个地址

至此,我们的Eurake已经配置完成了,是不是很简单。 启动服务,打开http://localhost:8761/ 我们看看见如下页面: 三、Eurake 服务注册与发现「建议收藏」

目前还没有服务注册进来。

Now that we’ve stood up a service registry, let’s stand up a client that both registers itself with the 
registry and uses the Spring Cloud DiscoveryClient abstraction to interrogate the registry for it’s own host and port. The @EnableDiscoveryClient activates the Netflix Eureka DiscoveryClient implementation. There are other implementations for other service registries like Hashicorp’s Consul or Apache Zookeeper.

现在,我们已经注册了一个服务注册中心,让我们再使用注册表注册自己的客户端,并使用Spring Cloud DiscoveryClient抽象来询问注册表本身的主机和端口。@EnableDiscoveryClient 激活Netflix Eureka DiscoveryClient 实现。还有其他服务注册的实现,比如Hashicorp的领事或Apache Zookeeper。

3.2 基于Springboot 构建服务提供方

在第二节中《Springboot项目构建》 中的第三步 中选择如下组件:

三、Eurake 服务注册与发现「建议收藏」左侧选择 cloud Discovery 在其子组件中选择 EurakeDiscovery

项目构建成功后我们会在pom.xml发现如下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

其实与构建EurakeServer 的依赖一样。

启用服务发现:

@SpringBootApplication
@EnableDiscoveryClient
public class AppApplication {

    public static void main(String[] args) {
        SpringApplication.run(AppApplication.class, args);
    }
}

resources/application.properties 中添加如下配置:

server.port=8802 #应用端口号
spring.application.name=app-8801 #服务名称
eureka.client.service-url.defalutZone= http://localhost:8761/eureka/ #EurekaServer服务地址
turbine.combine-host-port=true #同一主机上的服务,以不同端口号区分,默认情况下是以host来区分,后面服务监控时是将到
eureka.instance.prefer-ip-address=true #表示将自己的IP注册到EurekaServer 上,如果不配置或者将其设置为false,则表示将微服务所在系统的hostname注册到EurekaServer上

启动服务,我们再次打开 http://localhost:8761/ 我们发现多了一条服务: 三、Eurake 服务注册与发现「建议收藏」

我们通过不同端口再次启动该服务 我们发现有多了一条服务:

三、Eurake 服务注册与发现「建议收藏」

我们发现这两个服务 属于一个共同的application:APP-8801 ,当服务调用端Client去调用该服务是,只需知道服务名称 APP-8801 ,Eurake会通过Ribbon进行负载均衡 随机请求两个服务中的一个服务,服务在均衡的策略是可以配置的。在《4、Ribbon 客户端负载均衡》我会具体介绍,如何去设计负载均衡的策略。

3.3 EurakeServer 高可用

单点的Eurake server 在生产环境下并不适用,一旦发生宕机,会造成所有服务之间的调用无法适用,在3.1中配置EurakeServer时 有如下两个属性:

 eureka.client.register-with-eureka=false #是否将自己注册到EurrkeServer,默认为true
 eureka.client.fetch-registry=false #表示是否从EurekaServer获取注册信息,默认为true,表示需要从其他server同步信息

我关闭了 eurakaServer 将自己注册的功能,和sever之间的同步功能, 他们是默认开启的。 我们只要将这两个设置为true,就可以实现Eurake的高可用了。

Eureka自我保护性

默认情况下Eureka 在90内没有获取的服务的心跳,将注销该服务。但是有时候是网络分区故障的问题导致Eureka无法收到心跳,服务本身是健壮的,如果删除此服务,这会导致服务不可用。当开启了Eureka自我保护后,Eureka会保护此服务在注册表中的信息,使其不会被删除,等网络恢复后,Eureka节点会自动退出自我保护模式。 Eureka 的自我保护模式默认是允许开启的,如要禁用可在application.properties 中添加如下配置:

eureka.server.enable-self-preservation=false

3.4 EurakeSever 认证

在生产环境下,我们不可能允许什么服务都能注册到Eurake 中,为此需要添加EurakeServer的身份认证。

我们需要在EurakeSever中添加如下依赖: org.springframework.boot spring-boot-starter-security

并在application.properties 中添加如下信息:

#添加basic认证
security.basic.enabled=true
security.user.name=user
security.user.password=password

此时我们已经为EurakeSever 开启了Basic 认证

为此,我们也修改服务端,我们只需要将服务提供端application.properties 中原来的

eureka.client.service-url.defalutZone= http://localhost:8761/eureka/

变为: eureka.client.service-url.defalutZone= http://user:password@localhost:8761/eureka/

3.5 Eureka Server Rest 端点

非java编写的服务可以利用这些Rest端点去操作Eureka。

操作 HTTP action 描述
注册新的应用实例 POST /eureka/v2/apps/appID 接受JSON/XML格式请求,返回204响应码表示成功
发送应用实例心跳 PUT /eureka/v2/apps/appID/instanceID 返回响应码200表示成功,404表示instanceID不存在
查询所有实例 GET /eureka/v2/apps 返回响应码200表示成功,响应内容格式JSON/XML
为所有appID实例做查询(Query for all appID instances) GET /eureka/v2/apps/appID 返回响应码200表示成功,响应内容格式JSON/XML
为特定的appID/instanceID做查询 GET /eureka/v2/apps/appID/instanceID 返回响应码200表示成功,响应内容格式JSON/XML
为特定的instanceID做查询 GET /eureka/v2/instances/instanceID 返回响应码200表示成功,响应内容格式JSON/XML
停止服务实例(Take instance out of service) PUT /eureka/v2/apps/appID/instanceID/status?value=OUT_OF_SERVICE 返回响应码200表示成功,500失败。
将实例恢复到服务(移除覆盖) DELETE /eureka/v2/apps/appID/instanceID/status?value=UP (value=UP是可选的,它被建议用于fallback状态,由于取消了覆盖) 返回响应码200表示成功,500失败。
更新元数据 PUT /eureka/v2/apps/appID/instanceID/metadata?key=value 返回响应码200表示成功,500失败。
查询特定vip address 下的所有实例 GET /eureka/v2/vips/vipAddress 返回响应码200表示成功,响应内容格式:JSON/XML,返回404表示vipAddress不存在
查询特定secure vip address下所有实例 GET /eureka/v2/svips/svipAddress 返回响应码200表示成功,响应内容格式:JSON/XML,返回404表示svipAddress不存在

如我请求查询所有实例http://localhost:8761/eureka/apps 获取到如下结果:

三、Eurake 服务注册与发现「建议收藏」

对于我们使用java编写的应用,基于Springcloud EurekaDiscovery 中已经分装这些功能。下面对源码进行分析一下。 三、Eurake 服务注册与发现「建议收藏」

我们可以发现Springcloud 定义了 DiscoveryClient 接口,来抽象Rest端,其下面有三实现类,我们关注的是基于Eureka实现的EurekaDiscoveryClient。查看此类的实现: 三、Eurake 服务注册与发现「建议收藏」此类中引入了com.netflix.discovery包下的EurakeClient 接口。 三、Eurake 服务注册与发现「建议收藏」实现此接口的类是com.netflix.discovery包下的DiscovClient 类。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132898.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql添加字段的sql语句_mysql增加字段的语句

    mysql添加字段的sql语句_mysql增加字段的语句myesl是一个关系型数据库管理系统,也是目前最流行的管理系统之一,目前网页设计方面对一个系统的使用频率是比较高的,因此想要学会网页设计,那么有关myesl的基础知识以及应用就一定要掌握。而今天我们就来看一看myesl增加字段是如何操作的。mysql增加字段——mysql数据库更新字段语句一、UPDATE:UPDATE的功能是更新表中的数据。这的语法和INSERT的第二种用法相似。必须提供表名以及…

    2025年7月16日
    1
  • 关于zigbee协议栈各层的系统分析

    关于zigbee协议栈各层的系统分析随着传感器网络的大肆应用;随着物联网概念的爆发;随着通信技术的迅速发展,人们提出了在自身附近几米范围内通信的要求,这样就出现了个人区域网络PAN(PersonalAreaNetwork)和无线个人区域网络WPAN(WirelessPersonalAreaNetwork)的概念。WPAN网络为近距离范围内的设备建立无线连接,把几米到几十米范围内的多个设备通过无线方式连接在一起,使他们可以相互通信甚至接入LAN或者Internet。2001年8月成立的zigbee联盟就是一个针对WPAN网络而成立的

    2022年5月27日
    36
  • Git创建远程分支并提交代码到远程分支[通俗易懂]

    Git创建远程分支并提交代码到远程分支[通俗易懂]1、可以通过gitbranch-r命令查看远端库的分支情况如图所示,远程仓库只有一个master分支2、从已有的分支创建新的分支(如从master分支),创建一个dev分支但此时并没有在远程仓库上创建分支如图所示还是只有一个master分支3、建立本地到远端仓库的链接–这样代码才能提交上去使用命令行gitpush–set-…

    2022年6月30日
    22
  • js——职责链模式(责任链模式)[通俗易懂]

    js——职责链模式(责任链模式)[通俗易懂]js——职责链模式(责任链模式)使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这些处理请求的对象形成一个链,并沿着这个链传递请求,直到有一个对象处理它为止。如公交车:乘客就是请求,公交路线就是职责链,每个站点都是一个职责处理对象。乘客上车了,他只有一个目的地,但公交车并不知道是哪,所以公交车要做的就是一站挨着一站的开,等到乘客到了目的地,自然就下车了。放到程序上就是,接收到一个请求,但是有好几个对象都可以处理该请求,但不知道哪个最合适,所以就将这些对象连接起来形成一个职

    2025年6月3日
    0
  • 图书销售管理系统的可行性研究背景搜集和前提分析

    图书销售管理系统的可行性研究背景搜集和前提分析完成小组成员:大佬(20160401084)DEDRAGON(20160401094)1引言1.1编写目的可行性研究的目的是研究图书管理系统的总体需求、实现方案,并分析开发系统的可行性,为决策者提供是否开发该系统的依据和建议。初拟系统实验报告,对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排。明确开发风险及其所带来的经济效益。1.2背景项目名称:图书…

    2022年5月20日
    57
  • 机器学习之朴素贝叶斯分类算法

    机器学习之朴素贝叶斯分类算法一、数学知识相关1.独立事件–前提2.条件概率3.全概率公式4.贝叶斯公式5.朴素贝叶斯公式其中:P(A)叫做A事件的先验概率,即一般情况下,认为A发生的概率。 P(B|A)叫做似然度,是A假设条件成立的情况下发生B的概率。 P(A|B)叫做后验概率,在B发生的情况下发生A的概率,也就是要求的概率。P(B)叫做标准化常量,即在一般情况下,认为B…

    2022年10月15日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号