eureka手动注册服务_istio服务注册与发现

eureka手动注册服务_istio服务注册与发现一、Eureka简介Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。1.Eureka包含两个组件:EurekaSer…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

目录

一、服务发现简介

二、Eureka简介

三、Eureka一些特性及配置过程时需要注意的问题

四、EurekaServer和EurekaClient的作用分析 

五、Eureka开发实战


一、服务发现简介

        1.服务提供者、服务消费者、服务发现组件三者之间的关系大致如下:

  • 各个微服务在启动时时,将自己的网络地址等信息注册到服务发现组件上(eureka,zookeeper,Consul,spring cloud alibaba的nacos),服务发现组件会存储这些信息。
  • 服务消费者会从服务发现组件查询服务提供者的网络地址,然后将服务地址列表缓存到本地,然后根据服务名负载均衡调用服务提供者的接口。
  • 各个微服务与服务发现组件使用一定的机制来维持心跳,服务发现组件若发现有服务没有提供心跳,那么服务发现组件会将该服务剔除。
  • 微服务网络地址发生变更(例如实例增减或者IP端口发生变化等),会重新注册到服务发现组件上,使用这种方式,可以避免因网络变化导致服务之间的通讯停止,服务消费者也无须人工的修改网络地址。

二、Eureka简介

        Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

        1.Eureka包含两个组件:Eureka Server和Eureka Client。

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询负载算法的负载均衡器。

        2.在应用启动后,Eureka Client会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。

        3.Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。

三、Eureka一些特性及配置过程时需要注意的问题

        1.Eureka能够保证AP,即当Eureka中的某个节点挂掉后,剩余的节点继续仍然可以提供服务的发现与注册服务。而Eureka的客户端在向某个Eureka或者发现了当前的Eureka不可用时,会自动切换到其他的节点,也就是说Eureka的节点是平等的,只要有一台Eureka服务器在,就能保证服务的可以继续被使用。

        2.Eureka的自我保护机制,我们在注册服务时,如发生断网的情况,Eureka不能接收到当前服务的任何心跳请求,Eureka会在默认的90s后,将该服务进行强制剔除,这样就能保证到网络故障时,虽然失去了部分节点,但不会像zookeeper那样会使整个注册服务瘫痪。当网络稳定时,新的实例会同步到其他节点中。

        3.相关配置问题

服务端的配置如下,不注册自身:

security:
  basic:
    enabled: true
  user:
    name: user
    password: password123
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://user:password123@localhost:8761/eureka

如果我们需要使用ip地址来配置的话,先添加一行:

   eureka.instance.prefer.IpAddress=true;

如果我们想要关闭保护机制,则设置以下代码:
eureka.server.enable-self-preservation=false
设置eureka剔除服务的时间间隔:
eureka.server.eviction-interval-timer-in-ms=3000

需要注意的是要在应用类的头上添加@EnableEurekaServer来启用Eureka服务器。

接下来:访问Eureka,Url为:http://localhost:8761/

eureka手动注册服务_istio服务注册与发现

可以发现eureka注册中心就启动了!!!

在这里解释一下register-with-eureka=fasle和fetch-registry的用法,如果不指定该属性,服务端会将自身作为一个服务注册到注册中心去,因此我们需要在服务端启动前,指定这两个属性值为false。

假如我们把以下代码给注释掉,指定一个应用名,重新启动eureka-server端:

security:
  basic:
    enabled: true
  user:
    name: user
    password: password123

server:
  port: 8888

eureka:
  instance:
    hostname: 192.168.43.246
    prefer-ip-address: true
    instance-id: ${eureka.instance.hostname}:${server.port}
  client:
#    register-with-eureka: false
#    fetch-registry: false
    service-url:
      defaultZone: http://user:password123@${eureka.instance.hostname}:${server.port}/eureka
spring:
  application:
    name: eureka-server

发现eureka-server也注册到eureka上去了!

eureka手动注册服务_istio服务注册与发现

注:

    如果使用ip地址来注册时,一定要添加以下两行代码:

    第一种方式: ,使用参数占位符来引用已经配置好的信息:

       eureka.instance.prefer-ip-adderss=true

        eureka.instance.instance-id=${eureka.instance.hostname}:${server.port}

     第二种方式: 使用springcloud来自动获取ip地址: 

     eureka.instance.hostname=${spring.cloud.client.ip-address}
     eureka.instance.instance-id=${eureka.instance.hostname}:${server.port}

eureka客户端的配置添加上这两行代码,可以发现,添加以上两行代码的服务是以ip地址形式来注册的,没有添加的则以默认的方式来进行注册,即使用的主机名的方式来注册:

eureka手动注册服务_istio服务注册与发现

附上使用ip地址注册服务的完整配置:

eureka服务端:

security:
  basic:
    enabled: true
  user:
    name: user
    password: password123

server:
  port: 8888
eureka:
  instance:
    hostname: 192.168.43.246
#    使用ip地址的方式进行注册
#    prefer-ip-address: true
#    instance-id: ${eureka.instance.hostname}:${server.port}
  client:
#    不注册自身
#    register-with-eureka: false
#    fetch-registry: false
    service-url:
      defaultZone: http://user:password123@${eureka.instance.hostname}:${server.port}/eureka
spring:
  application:
    name: eureka-server

eureka客户端:

security:
  basic:
    enabled: true
  user:
    name: user
    password: password123

server:
  port: 9999
spring:
  application:
    name: eurekaClient
eureka:
  instance:
    hostname: 192.168.43.246
    prefer-ip-address: true
    instance-id: ${eureka.instance.hostname}:${server.port}
  client:
   service-url:
      defaultZone: http://user:password123@${eureka.instance.hostname}:8888/eureka

此处的server-url的端口号要为服务端的端口号。注: 是 deafaultZone, 不是default-zone

 附:使用指定的ip去注册

eureka手动注册服务_istio服务注册与发现

客户端配置如下,如果你在pom文件中添加了如下依赖,客户端可以不用在启动类上面添加@EnableEurekaClient注解。只需要在applicantion.properties文件中添加配置即可:

 eureka客户端和eureka服务端:

 <!-- eureka-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.2.3.RELEASE</version>
        </dependency>

        <!--eureka-client-->

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

eureka手动注册服务_istio服务注册与发现

eureka手动注册服务_istio服务注册与发现

四、EurekaServer和EurekaClient的作用分析 

        1.  EurekaServer提供服务发现的能力,当有服务来注册时,EurekaServer会将这些服务的信息存储到起来。

        2.  EurekaClient是一个java客户端,可以与服务发现组件来交互。

        3.  续约。微服务启动后,会默认底向EurekaServer发送心跳,默认时间为30s,这样的作用就是续约自己的租约。

        4.  剔除。如果Eureka在一定时间内没有收到客户端的心跳,那么EurekaServer会剔除掉没有发生心跳客户端,默认时间为90s。  

        5. 缓存。EurekaClient会缓存服务器的信息,这种方式的好处是当EurekaServer宕机时,,服务消费者依然可以访问服务。

        6. eureka 服务器默认是将自身注册到服务器里。可以使用如下代码不讲自身注册进去:

eureka:
  client:
#    不注册自身
#    register-with-eureka: false

        7. 如果设置多个eureka时,需要设置 eureka.client.fetchRegistry=true,表示多个服务器之间的数据同步。单个节点直接设置成false即可。

五、Eureka开发实战

        1. 在Spring Cloud Edgware以及更高的版本中,只需要添加相关依赖,即可自动注册服务到EurekaServer中,在实际的项目中,我们可以直接实现服务消费者连接服务提供者,这样我们可以不用将服务注册到eureka上,以便于调试。

        2.  如果不想将服务注册到EurekaServer上,只需要设置spring.cloud.service-registry.auto-registration.enabled=false,或使用注解@EnableDiscoveryClient(auto-Registry=false)。

        微服务之间的调用采用feign来进行远程调用,我们可以不通过eureka直接调用服务提供方, 为了便于调试,可以这样做: 

1)  在resources目录下新建application-local.yml文件中添加调用各服务的url, 该参数为Feign接口上配置的url。

@FeignClient(
 
        name = “${hcf.application.accounting.name:fec-accounting}”,
 
        url = “${hcf.application.payment.url:}”,
 
        contextId = “AccountingClient”
 
)

  如果是远程服务的提供者,那么配置网关+地址。

  如果是本地的服务提供者,就是本地的ip地址+端口号。

eureka手动注册服务_istio服务注册与发现

2) 启动需要指定profiles文件为local

eureka手动注册服务_istio服务注册与发现

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/171862.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • try catch finally 用法[通俗易懂]

    try catch finally 用法[通俗易懂]在讲之前我们先看一段程序:publicclassTest{publicstaticvoidmain(String[]args){System.out.println("returnvalueofgetValue():"+getValue());} publicstaticintgetValue(){…

  • java异常处理(较详细)「建议收藏」

    java异常处理(较详细)「建议收藏」java异常处理(较详细)在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的。比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等等。异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)Java程序在执行过程中所发生的异常…

  • Nginx 报错 504 Gateway Time-out 的解决方法

    Nginx 报错 504 Gateway Time-out 的解决方法

  • JAVA合法标识符

    JAVA合法标识符Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.标识符是用来给类、对象、方法、变量、接口和自定义数据类型命名的。标识符组成Java标识符由数字,字母和下划线(_),美元符号($)组成。此处的字母并不局限于26个英文字母,而且可以包含中文字符、日文字符等。Java语言支持Unicode6.2.0字符集,因此Java的标识符可以使用Unicode6.

  • shopee和lazada受欢迎程度_马六甲东南亚电商erp

    shopee和lazada受欢迎程度_马六甲东南亚电商erp电商运营,各平台有各平台的特征,各地区有各地区的不同,没有什么一招鲜的方法可以通杀全平台,所以运营这个系列,我们一定要从分析不同站点的特征和操盘方式来开头。这一篇文章一定要有一个前提条件:旨在给刚入行和准备转战本土店的中小卖家一个简单的指南。可以在起步阶段有所参考。站点本身没有好坏之分,任何一个市场,都会有人做得风生水起。闲话少叙,我们先单提出来一个,台湾站。shopee和lazada站点全解析台湾站台湾站是Shopee的市场,Lazada没有。从跨境转向本土的同学,肯定是对该站点最熟悉了。因为中国台湾站是

  • DM8168 GPIO驱动与測试程序

    DM8168 GPIO驱动与測试程序

    2021年11月29日

发表回复

您的电子邮箱地址不会被公开。

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