| EurekaServer是服务注册中心,提供服务注册,即其他微服务可注册进该服务 |
| EurekaClient通过注册中心进行访问,即将要注册进EurekaServer的微服务 |
| Eureka主要是用于管理所有微服务,实现负载均衡,故障容错,服务注册于发现 |
| |
| 之前是订单模块直接调支付模块,现在将两个模块注册进服务注册中心,订单模块会通过Eureka去调支付模块 |

| 构建EurekaServer端微服务作为服务注册中心: |
| 创建子模块cloud-eureka-server7001,端口为7001,pom中拉取eureka-server的包,编写外部配置yml文件,启动类添加注解 |
| 测试:启动该子模块后,可以访问到eureka的页面 |
| 将订单模块和支付模块作为EurekaClient注册进Eureka服务端: |
| 在这两个子模块中,拉取依赖,编写yml,启动类添加注解 |
| 测试:启动服务注册中心模块和订单、支付模块,浏览器输入:http://localhost:7001/ 访问eureka主页时,可以看到已经注册进来的两个子模块 |
| 作为eureka的服务端和客户端,拉取的依赖、yml配置、启动类的注解都是相对应的 |
| |
| 只有一个eureka服务端子模块是单机eureka,当有多个eureka服务端子模块相互关联时,是集群eureka |
| |
| 搭建eureka集群: |
| 参考7001服务注册中心子模块新建一个cloud-eureka-server7002注册中心子模块 |
| pom中拉取依赖 |
| 修改本机hosts文件,自定义两个网址,指向127.0.0.1 |
| 两个服务注册中心子模块的yml配置:设置模块名称,同时指向对方 |
| 启动类的注解 |
| |

| 测试:浏览器输入:http://eureka7002.com:7002 由于hosts配置,eureka7002.com指向的是127.0.0.1 ,访问的端口是7002,也就是访问的7002子模块的eureka页面,在该页面中可以看到关联的7001子模块, |
| 同样输入http://eureka7001.com:7001访问7001的eureka页面,关联了7002子模块 |

| 单模块加入两台eureka服务器(eureka集群): |
| 在订单模块的yml中配置: |
| defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka |
| 将支付模块加入两台eureka服务器(eureka集群): |
| 在支付模块的yml中配置: |
| defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka |

| 微服务提供者的集群: |
| 当我们的80订单子模块去调用支付子模块时,支付子模块作为微服务的提供者应该有多个,可供80消费者调用,所以需搭建消费者集群 |

| 新建cloud-provider-payment8002,和8001模块一样,只需修改yml中的端口,模块名称一致;提供者对外曝露的是一个名称 |
| |

| 如何判断80订单模块是调用的8001还是8002:在8001和8002的controller中注入各自的端口号,调用时返回端口号即可 |
| 实现负载均衡:使用80调用支付模块时, |
| 打开eureka页面可以发现,80模块进入eureka,通过名称Application去找支付模块;需将80模块控制层中,要找的支付模块的url修改为对应的名称 |
| 同时在80模块的restTemplate配置类中添加注解:@LoadBalanced |
| 测试如下:轮巡机制,访问不同的支付模块 |

| 修改eureka页面中注册了的主机名称Status: |
| 修改订单或字符模块的yml: |
| eureka: |
| instance: |
| instance-id: payment8001 |
| 在eureka页面,鼠标放到主机名称上时,显示IP |
| 修改订单或字符模块的yml: |
| eureka: |
| instance: |
| prefer-ip-address: true |
| |
| 案例:获取8001模块注册到eureka中的信息 |
| 在8001模块的控制类添加如下:注入DiscoveryClient,通过它获取服务信息 |
| @Resource |
| private DiscoveryClient discoveryClient; |
| @GetMapping("discovery") |
| public Object discovery() { |
| List<String> services = discoveryClient.getServices(); |
| services.forEach(service->{ |
| System.out.println("----service"+service); |
| }); |
| List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE"); |
| for (ServiceInstance instance : instances) { |
| System.out.println(instance.getServiceId()+"\t" + instance.getHost()+"\t"+ instance.getPort()+"\t"+instance.getUri());; |
| } |
| return this.discoveryClient; |
| } |
| 在8001启动类上添加注解@EnableDiscoveryClient |
| 启动eurekaServer、8001,浏览器中访问该接口:http: |
| 返回服务信息: |

| 在eureka页面默认有一段红色文本,eureka默认开启保护机制,表示注册了eureka的某个微服务出现了故障,不会立即清楚,依然会对服务信息保存 |
| 如果禁用自我保护机制,eureka页面的红色文本会显示关闭,同时服务出现故障时会自动清除 |
| 关闭方法: |
| 在eurekaServer端7001模块配置yml |
| eureka: |
| server: |
| enable-self-preservation: false |
| eviction-interval-timer-in-ms: 2000 |
| 在eurekaClient端8001模块配置yml |
| eureka: |
| instance: |
| lease-renewal-interval-in-seconds: 1 |
| lease-expiration-duration-in-seconds: 2 |
| 测试:启动这两个模块,eureka页面中8001能显示,之后在idea中停用8001,eureka页面刷新后8001服务就被清除了 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~