SpringCloud服务注册与发现之Eureka

EurekaServer:服务注册功能的服务器,是服务的注册中心,系统中的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接,系统的维护人员可以通过Eureka Server来监控系统中各个微服务是否正常运行,

Eureka Server注册中心需要引入Eureka Server的jar

在注册中心中添加依赖

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

Eureka Server注册中心yml配置

eureka:
  instance:
    hostname: localhost  #eureka服务端的实例名字
  client:
    #false表示不向注册中心注册自己
    register-with-eureka: false
    #false表示自己端就是注册中心,我的职责就是维护实例,不需要去检索实例
    fetch-registry: false
    service-url:
      #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

启动配置中心服务后访问localhost:7001会有如下界面在这里插入图片描述
但此时并没有服务注册在Eureka上面,下面将一个微服务添加到Eureka的中策中心上

将一个服务添加到Eureka注册中心上

① 在微服务的pom上引入Eureka Client的jar包依赖

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

②在微服务的yml文件上填写EurekaClient的相关配置

eureka:
  client:
    register-with-eureka: true  #表示是否将自己注册进EurekaServer  默认是true
    fetch-registry: true        #是否从EurekaServer抓取已有的注册信息,默认true.单节点无所谓,集群必须设置true才能配合ribbon使用负载均衡
    service-url:
      defaultZone: http://localhost:7001/eureka   #表示注册在这个地址的注册中心上

③别忘了在微服务的启动类上添加@EnableEurekaClient注解哈
启动服务注册中心和刚才配好的微服务,访问注册中心地址:localhost:7001,就会发现页上发现了刚刚配置好的服务名字了在这里插入图片描述
以上就是单机版的Eureka注册与发现的配置

配置Eureka集群

EurekaServer的集群配置实际上就是将多个Eureka相互注册
和上面的单机版配置差不多,只是需要注意注意Eureka的服务端名字不能重复
在新建一个EurekaServer,yml文件的配置如下:

server:
  port: 7002

eureka:
  instance:
    hostname: eureka7002.com  #eureka服务端的实例名字
  client:
    #false表示不向注册中心注册自己
    register-with-eureka: false
    #false表示自己端就是注册中心,我的职责就是维护实例,不需要去检索实例
    fetch-registry: false
    service-url:
      #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
      #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      defaultZone: http://eureka7001.com:7001/eureka/

在这里插入图片描述
向Eureka Server集群中添加微服务,只需将需要添加的服务yml配置文件中的注册地址增加EurekaServer的地址即可:

      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #将服务注册到eureka集群

这样这个服务就会注册到EurekaServer的集群中了
在这里插入图片描述
至此,服务注册中心集群已经有多个了,一般实际中不可能两三个EurekaServer全都挂吧,已经满足使用要求了,上面我们将服务提供注册到集群,但是也要设想一下,万一服务提供者挂了怎么办?所以有必要将服务提供者也设计成集群的模式.

将服务提供者设置成集群(多个)

只需将服务提供者再复制一份即可,但要注意改端口号
多个服务提供者注册到EurekaServer集群中,为消费者提供服务,对外暴露的是相同的服务名称,消费者根据服务者提供的服务名称进行访问.至于访问的是哪个具体服务,需要有负载均衡机制来决定(默认的负载均衡是轮询机制).所以需要在消费者端添加负载均衡注解;并且消费者访问的也不在是具体的服务地址和端口号了,而应该改成具体的服务名称;
在这里插入图片描述
在这里插入图片描述
此时,在访问的话,会是轮询的方式访问服务提供者
有时为了方便管理,我们可能需要定义主机名字.以及让访问路径显示ip地址
在这里插入图片描述
可以通过配置yml文件中添加如下内容

eureka:
 instance:
    instance-id: payemnt8002  #自定义的主机名
    prefer-ip-address: true  #访问路径可以显示ip地址

上面的操作还需要在pom中添加

 <!--spring-boot-starter-web和spring-boot-starter-actuato这两个几乎永远在一起,图形化界面用的-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

服务发现Discovery

服务发现:对于注册进Eureka里面的微服务,可以通过服务发现来获得该服务的信息
①在启动类上添加@DiscoveryClient
②通过DiscoveryClient 获得相关信息,例如:

@Resource
private DiscoveryClient discoveryClient;
public Object discover(){
        List<String> services = discoveryClient.getServices();//得到服务清单列表
        for (String element:services
             ) {
            log.info("**********element"+element);
        }
        List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
        for(ServiceInstance instance:instances){
            log.info(instance.getInstanceId()+"\t"+instance.getUri()+"\t"+instance.getPort());
        }
        return this.discoveryClient;
    }

Eureka的自我保护机制

保护模式主要用于一组客户端和EurekaServer之间存在网络分区场景下的保护.一旦进入保护模式,EurekaServer将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务.
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值