• SpringBoot3.1.5对应新版本SpringCloud开发(1)-Eureka注册中心


    服务的提供者和消费者

    服务之间可以通过Spring提供的RestTemplate来进行http请求去请求另一个Springboot的项目,这就叫做服务间的远程调用。
    当一个服务通过远程调用去调用另一个服务时,被调用的服务就叫做服务的提供者,调用服务的服务就叫做服务的消费者。
    一个服务可以既是服务的提供者也是服务的消费者。

    1、服务调用关系

    • 服务提供者:暴露接口给其它微服务调用
    • 服务消费者:调用其它微服务提供的接口
    • 提供者和消费者的角色其实是相对的

    Eureka注册中心

    • 远程调用的问题

    • eureka原理

    • 搭建eurekaServer

    • 服务注册

    • 服务发现

    eureka的作用

    • 消费者该如何获取服务提供者的具体信息
      1. 服务提供者启动时向eureka注册自己的信息
      2. eureka保存这些信息
      3. 消费者根据服务名称向eureka拉取提供者信息
    • 如果有多个服务提供者,消费者该如何选择
      1. 服务消费者利用负载均衡算法,从服务列表中挑选一个
    • 消费者如何感知服务提供者健康状态
      1. 服务提供者会每隔30s向EurekaServer发送心跳请求,报告健康状态
      2. eureka会更新记录服务列表信息,心跳不正常会被剔除
      3. 消费者就可以拉取到最新的信息

    在eureka架构中,微服务角色有两类:

    • EurekaServer:服务端、注册中心
      1. 记录服务信息
      2. 心跳监控
    • EurekaClient:客户端
      1. provider:服务提供者
        1. 注册自己的信息到EurekaServer中
        2. 每隔30S向EurekaServer发送心跳
      2. consumer:服务消费者
        1. 根据服务名称从EurekaServer拉取服务列表
        2. 基于服务列表做负载均衡,选中一个微服务后发起远程调用

    EurekaServer服务注册

    • 创建eureka服务端

    父工程引入对应版本的springcloud依赖

    springboot 3.1.5对应

    <dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-dependenciesartifactId>
    <version>2022.0.4version>
    <type>pomtype>
    <scope>importscope>
    dependency>

    引入eureka服务端依赖

    <dependencies>
    <dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
    dependency>
    dependencies>

    启动eureka服务,在启动类上添加@EnableEurekaServer注解

    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaServerApplication {
    public static void main(String[] args) {
    SpringApplication.run(EurekaServerApplication.class, args);
    }
    }

    配置文件中配置服务名称-地址-服务端口

    spring:
    application:
    name: eureka-server #微服务名称
    server:
    port: 10086 #服务端口
    eureka:
    client:
    service-url: #eureka地址信息 eureka自己也是一个微服务,也会被注册到eureka中 为了做eureka集群
    defaultZone: http://127.0.0.1:10086/eureka

    eureka服务端自己也会被注册到eureka服务中

    然后就可以访问http://127.0.0.1:10086进入eureka注册中心了

    • 服务注册

    确保父工程成功引入cloud依赖后引入eureka服务端依赖

    <dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
    dependency>

    在配置文件中配置eureka服务名称和地址即可

    server:
    port: 8081
    spring:
    application:
    name: cloud-user
    eureka:
    client:
    service-url:
    defaultZone: http://127.0.0.1:10086/eureka
    • 服务发现

    引入依赖

    <dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
    dependency>

    配置地址

    eureka:
    client:
    service-url:
    defaultZone: http://127.0.0.1:10086/eureka

    给RestTemplate添加上@LoadBalanced注解,实现同一服务多个地址的负载均衡调用

    //RestTemplate spring提供的远程调用模块 允许发送http请求
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
    return new RestTemplate();
    }

    使用RestTemplate不通过具体的ip地址而是通过服务名称远程调用实现查询

    @Autowired
    RestTemplate restTemplate;
    @GetMapping("/order/all/{id}")
    public ordersUser getAllById(@PathVariable("id") Integer id){
    String str1 = "http://cloud-order/order/"+id;
    orders od = restTemplate.getForObject(str1, orders.class);
    String str = "http://cloud-user/user/"+od.getOrderuserid();
    user forObject = restTemplate.getForObject(str, user.class);
    ordersUser ordersUser = new ordersUser();
    ordersUser.setOrderid(od.getOrderid());
    ordersUser.setUser(forObject);
    ordersUser.setOrdername(od.getOrdername());
    ordersUser.setOrderaddress(od.getOrderaddress());
    ordersUser.setOrderprice(od.getOrderprice());
    ordersUser.setOrdernumber(od.getOrdernumber());
    return ordersUser;
    }
  • 相关阅读:
    【建议收藏】50 道硬核的 Python 面试题!
    RabbitMQ消息的可靠性
    Cisco简单配置(八)—动态中继协议DTP
    C++的命名空间namespace详解及特殊情况分析
    浅谈数字孪生产业应用与标准----工业软件讲坛第七次讲座
    Docker安装部署RabbitMq
    图片服务器(2)
    R语言【geometry】——convhulln():计算包含一组点的最小穹顶
    切记:Python迭代器只可以读取一次,忽略会有意想不到的麻烦。
    LeetCode [中等] 49. 字母异位词分组
  • 原文地址:https://www.cnblogs.com/nhgtx/p/18171301