相关推荐recommended
springcloud Eureka服务注册与发现
作者:mmseoamin日期:2024-02-05

文章目录

  • 代码地址
  • Eureka基础知识
      • 什么是服务治理
      • 什么是服务注册与发现
      • 单机版eurekaServer
        • IDEA生成eurekaServer端服务注册中心类似物业公司
        • EurekaClient端cloud-provider-payment8001
        • 修改EurekaClient端cloud-consumer-order80
        • 集群Eureka构建步骤
          • 新建cloud-eureka-server7002
            • 测试
            • 将之前写的微服务加入Eureka集群
              • 测试
              • 新建cloud-provider-payment8002 (提供集群服务者)
              • actuator微服务信息完善
              • 服务发现Discovery
                  • 测试
                  • Eureka自我保护(这章没有修改下载代码)
                    • 怎么禁止自我保护?
                      • 注册中心eureakeServer端7001
                      • 修改生产者客户端eureakeClient端8001

                        代码地址

                        代码上传到: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的架构,请对比springcloud Eureka服务注册与发现,请添加图片描述,第1张

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

                        单机版eurekaServer

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

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

                          springcloud Eureka服务注册与发现,在这里插入图片描述,第2张

                        具体看代码

                        EurekaClient端cloud-provider-payment8001

                        修改之前的cloud-provider-payment8001

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

                        2.在主类添加注解

                        3.在yml修改配置

                        具体看代码

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

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第3张

                        修改EurekaClient端cloud-consumer-order80

                        1.pom

                        2.主启动类 ,加注解

                        3.写yml

                        具体请看代码

                        4.启动测试

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第4张

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第5张

                        集群Eureka构建步骤

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第6张

                        新建cloud-eureka-server7002

                        1.改POM

                        2.修改映射配置

                        C:\Windows\System32\drivers\etc

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第7张

                        添加:

                        127.0.0.1  eureka7001.com
                        127.0.0.1  eureka7002.com
                        

                        3.写YML

                        7001 改

                        7002 改

                        具体看代码

                        测试

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第8张

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第9张

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

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

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

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第10张

                        测试

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

                        测试网址:

                        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

                        主要还是看代码哪里变化了

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

                        修改80 controller

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第11张

                        public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";
                        

                        添加

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第12张

                        测试:

                        http://localhost/consumer/payment/get/1
                        http://eureka7001.com:7001/eureka
                        

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第13张

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第14张

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第15张

                        actuator微服务信息完善

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第16张

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

                        修改8001的yml 和8002的yml

                        添加

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

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第17张

                        服务发现Discovery

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

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

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

                        @Resource
                        private DiscoveryClient discoveryClient;
                        @GetMapping(value = "/payment/discovery")
                            public Object discovery()
                            {
                                List services = discoveryClient.getServices();
                                for (String element : services) {
                                    System.out.println(element);
                                }
                                List 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

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第18张

                        测试

                        http://localhost:8001/payment/discovery

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第19张

                        springcloud Eureka服务注册与发现,在这里插入图片描述,第20张

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

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

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

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

                        怎么禁止自我保护?

                        注册中心eureakeServer端7001

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

                        eureka.server.enable-self-preservation=true
                        

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

                        修改生产者客户端eureakeClient端8001

                        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