springcloud Eureka服务注册与发现

文章目录

代码地址

代码上传到 :https://github.com/13thm/study_springcloud/tree/main/days3

Eureka基础知识

什么是服务治理

Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理

什么是服务注册与发现

Eureka采用了CS的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。

在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息 比如 服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者|服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用RPC远程调用框架核心设计思想:在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何rpc远程框架中,都会有一个注册中心(存放服务地址相关信息(接口地址))

下左图是Eureka系统架构,右图是Dubbo的架构,请对比

Eureka包含两个组件:Eureka Server和Eureka Client

单机版eurekaServer

IDEA生成eurekaServer端服务注册中心类似物业公司

  1. 建Module cloud-eureka-server7001
  2. 改POM
  3. 写YML
  4. 主启动
  5. 测试 http://localhost:7001/

具体看代码

EurekaClient端cloud-provider-payment8001

修改之前的cloud-provider-payment8001

1.修改pom文件,添加配置

2.在主类添加注解

3.在yml修改配置

具体看代码

4.测试 http://localhost:7001/

修改EurekaClient端cloud-consumer-order80

1.pom

2.主启动类 ,加注解

3.写yml
具体请看代码

4.启动测试

集群Eureka构建步骤

新建cloud-eureka-server7002

1.改POM

2.修改映射配置

C:\Windows\System32\drivers\etc

添加:

java 复制代码
127.0.0.1  eureka7001.com
127.0.0.1  eureka7002.com

3.写YML

7001 改

7002 改
具体看代码

测试


将之前写的微服务加入Eureka集群

将支付服务8001微服务发布到上面2台Eureka集群配置中 --改YML

将订单服务80微服务发布到上面2台Eureka集群配置中--改YML

测试

先要启动EurekaServer,7001/7002服务,再要启动服务提供者provider,8001,再要启动消费者,80

测试网址:

java 复制代码
http://eureka7002.com:7002/
http://eureka7001.com:7001/
http://localhost/consumer/payment/get/1

新建cloud-provider-payment8002 (提供集群服务者)

1.新建cloud-provider-payment8002(跟8001 几乎一致)

2.改POM

3.写YML

4.主启动

5.业务类(粘贴过来)

6.修改8001/8002的Controller
主要还是看代码哪里变化了

java 复制代码
添加:
@Value("${server.port}")
    private String serverPort;
修改了返回值:添加了服务端口
return new CommonResult(200,"插入成功,返回结果"+result+"\t 服务端口:"+serverPort,payment);

 return new CommonResult(200,"查询成功"+"\t 服务端口:"+serverPort,payment);

修改80 controller

java 复制代码
public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";

添加

测试:

java 复制代码
http://localhost/consumer/payment/get/1
http://eureka7001.com:7001/eureka



actuator微服务信息完善

鼠标放上去没有显示ip地址

修改8001的yml 和8002的yml

添加

java 复制代码
 instance:
    instance-id: payment8001
    prefer-ip-address: true     #访问路径可以显示IP地址
java 复制代码
 instance:
    instance-id: payment8002
    prefer-ip-address: true     #访问路径可以显示IP地址

服务发现Discovery

对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息

修改cloud-provider-payment8001的Controller 和 修改cloud-provider-payment8002的Controller

添加以下代码:(具体看下载代码)

java 复制代码
@Resource
private DiscoveryClient discoveryClient;
@GetMapping(value = "/payment/discovery")
    public Object discovery()
    {
        List<String> services = discoveryClient.getServices();
        for (String element : services) {
            System.out.println(element);
        }

        List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
        for (ServiceInstance element : instances) {
            System.out.println(element.getServiceId() + "\t" + element.getHost() + "\t" + element.getPort() + "\t"
                    + element.getUri());
        }
        return this.discoveryClient;
    }

在8001 和8002主启动类添加注解@EnableDiscoveryClient

测试

http://localhost:8001/payment/discovery

Eureka自我保护(这章没有修改下载代码)

保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,

Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。

一句话:某时刻某一个微服务不可用了,Eureka不会立刻清理,依旧会对该微服务的信息进行保存

怎么禁止自我保护?

注册中心eureakeServer端7001

出厂默认,自我保护机制是开启的:

java 复制代码
eureka.server.enable-self-preservation=true

要把他关闭,使用eureka.server.enable-self-preservation = false 可以禁用自我保护模式(注册中心eureakeServer端7001 的yml 里面改)

修改生产者客户端eureakeClient端8001

yml 复制代码
server:
  port: 8001

###服务名称(服务注册到eureka名称)
spring:
    application:
        name: cloud-provider-payment

eureka:
  client: #服务提供者provider注册进eureka服务列表内
    service-url:
      register-with-eureka: true
      fetch-registry: true
      # cluster version
      #defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
      # singleton version
      defaultZone: http://eureka7001.com:7001/eureka
#心跳检测与续约时间
#开发时设置小些,保证服务关闭后注册中心能即使剔除服务
  instance:
  #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
    lease-renewal-interval-in-seconds: 1
  #Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
    lease-expiration-duration-in-seconds: 2
相关推荐
SL_staff2 小时前
金融风控规则引擎的深度实践:JVS-Rules 四大原生能力解析
spring cloud·产品·全栈
萧瑟余晖3 小时前
Spring Cloud配置中心与动态刷新详解
spring cloud·面试
Doker 多克5 小时前
Spring Integration AMQP 和 Spring AMQP详解
java·后端·spring
code_slave(码畜)7 小时前
微服务架构落地:分库分表实战(下) —— 分布式主键、跨分片查询与分页聚合防坑
数据库·spring boot·分布式·spring cloud·微服务·架构·分库分表
雷一言说8 小时前
Spring AI 2.0 Agent Skills 接入
spring
萧瑟余晖9 小时前
Spring Cloud综合实战与架构选型详解
spring·spring cloud·架构
萧瑟余晖10 小时前
Spring Cloud Alibaba生态整合详解
spring·spring cloud·面试
一级新生11 小时前
Dify 日常使用手册(小白版)
人工智能·docker·云原生·eureka·dify·ai工具
专业程序开发源1 天前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
小溪学编程1 天前
将 Bean 放入 Spring 容器中的方式有哪些?
java·后端·spring