ToB企服应用市场:ToB评测及商务社交产业平台

标题: 服务注册/发现-Eureka-微服务核心组件【分布式微服务条记02】 [打印本页]

作者: 小秦哥    时间: 2024-7-17 11:41
标题: 服务注册/发现-Eureka-微服务核心组件【分布式微服务条记02】
服务注册/发现-Eureka-微服务核心组件【分布式微服务条记02】

服务注册/发现-Eureka

目前主流的服务注册&发现的组件是Nacos, 但是Eureka 作为一个老牌经典的服务注册&发现技能照旧有必要学习一下, 缘故原由:
引出Eureka

在不使用 服务注册/发现-Eureka 时,通常我们的项目架构是:
服务消费方 ------利用restTemplate  (直接调用) ---->服务提供方

如下:
  1. @RestController
  2. @RequestMapping("/member/consumer")
  3. @Slf4j
  4. public class MemberConsumerController {
  5.     //定义MEMBER_SERVICE_PROVIDER_URL 基础url地址
  6.     public static final String MEMBER_SERVICE_PROVIDER_URL = "http://localhost:10001";
  7.     @Autowired
  8.     private RestTemplate restTemplate;
  9.     //接口
  10.     /***
  11.      *  添加member;
  12.      *  member :通过restTemplate 发出的请求携带的数据;
  13.      *  Result.class :返回对象的类型;
  14.      */
  15.     @PostMapping("/save")
  16.     public Result<Member> save(Member member) {
  17.         return restTemplate.postForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/save", member, Result.class);
  18.     }
  19.     //根据id 调用服务接口 返回member
  20.     @GetMapping("/get/{id}")
  21.     public Result<Member> getMemberById(@PathVariable("id") Long id) {
  22.         return restTemplate.getForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/get/" + id, Result.class);
  23.     }
  24. }
复制代码
但这样简朴的项目结构有肯定的缺陷:
引入Eureka后项目

使用 服务注册/发现-Eureka 后,通常我们的项目架构是:

分析:
服务治理

服务注册和服务发现

Eureka-Server 【非集群】代码实现

Eureka自我保护模式

Eureka-Server 【集群】代码实现

为什么需要集群?
代码实现:
Eureka-Client-提供方 【集群 】代码实现

修改 eureka-client 的 application.yml即可
  1. server:
  2.   port: 10001
  3. spring:
  4.   application:
  5.     name: member-service-provider #配置应用的名称
  6.   datasource:
  7.     type: com.alibaba.druid.pool.DruidDataSource
  8.     url: jdbc:mysql://localhost:3306/e_commerce_center_db?useSSL=true&useUnicode=true&characterEncoding=UTF-8
  9.     username: root
  10.     password: zy
  11. #配置mybatis
  12. mybatis:
  13.   mapper-locations: classpath:mapper/*.xml #指定mapper。xml文件
  14.   type-aliases-package: com.zy88.springcloud.entity #实体类 别名引用
  15. #配置eureka-client
  16. eureka:
  17.   client:
  18.     # 将自己注册到eureka-server
  19.     register-with-eureka: true
  20.     # 表示从 Euraka-Server 抓取注册信息,如果不是集群,可以不配置。
  21.     # 如果是集群,设置成true才能配合Ribbon使用负载均衡
  22.     fetch-registry: true
  23.       #表示将自己注册到哪个eureka-server
  24.     service-url:
  25.       # 注册到集群,多个eureka,使用逗号间隔
  26.       defaultZone: http://eureka9001.com:9001/eureka,http://eureka9002.com:9002/eureka
复制代码

Eureka-Client-消费方【集群 】代码实现


DiscoveryClient-获取Eureka Server 服务注册信息

获取到Eureka Server 服务注册信息,可以使用 DiscoveryClient
  1. @EnableDiscoveryClient //启用服务发现
  2. @RestController
  3. @RequestMapping("/member/consumer")
  4. @Slf4j
  5. public class MemberConsumerController {
  6.    
  7.     public static final String MEMBER_SERVICE_PROVIDER_URL = "http://MEMBER-SERVICE-PROVIDER";
  8.     @Autowired
  9.     private RestTemplate restTemplate;
  10.     //装配 DiscoveryClient
  11.     @Autowired
  12.     private DiscoveryClient discoveryClient;
  13.     @GetMapping("/discovery")
  14.     public Object discovery(){
  15.         List<String> services = discoveryClient.getServices();
  16.         //遍历服务
  17.         for (String service : services) {
  18.             log.info("服务名= {}",service);
  19.             //获取服务名对应的实例
  20.             List<ServiceInstance> instances = discoveryClient.getInstances(service);
  21.             for (ServiceInstance instance : instances) {
  22.                 log.info("id= {},host= {},port= {},uri= {}",
  23.                         instance.getServiceId(),instance.getHost(),instance.getPort(),instance.getUri());
  24.             }
  25.         }
  26.         return discoveryClient;
  27.     }
  28.    
  29.     @PostMapping("/save")
  30.     public Result<Member> save(Member member) {
  31.         return restTemplate.postForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/save", member, Result.class);
  32.     }
  33.     @GetMapping("/get/{id}")
  34.     public Result<Member> getMemberById(@PathVariable("id") Long id) {
  35.         return restTemplate.getForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/get/" + id, Result.class);
  36.     }
  37. }
复制代码
访问 http://localhost/member/consumer/discovery  获取Eureka Server 服务注册信息:


本文学习内容来自韩顺平老师的课程
仅供个人参考学习

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4