zoukankan      html  css  js  c++  java
  • Eureka注册中心

    服务远程调用问题

        public Order queryById(Long id){
            Order order = orderMapper.findById(id);
            String url = "http://localhost:8081/user/"+order.getUserId();
            User user = restTemplate.getForObject(url, User.class);
            order.setUser(user);
            return order;
        }
    • 出现硬编码
    • 如果有多个服务提供者,消费者如何选择
    • 消费者如何得知服务提供者的状态

    服务提供者:一次业务处理过程中,被其它微服务调用的服务(提供接口给其它微服务)

    服务消费者:一次业务处理过程中,调用其它微服务的服务(调用其它微服务提供的接口)

    Eureka注册中心

    Eureka工作流程

    1、每一个微服务(服务的提供者和消费者)启动时,就必须向eureka-server中注册自身服务信息

    2、当服务消费者需要服务提供者时,会去eureka-server中拉起服务提供者(服务提供者状态都是良好的)的信息

    3、服务消费者可以通过负载均衡获取一个服务提供者的信息,远程调用即可

     微服务会定期向eureka-server发送心跳,如果不发送,eureka-server就会移除其服务信息

    Eureka作用

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

    搭建Eureka

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

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

    搭建EurekaServer

    创建项目,添加eureka服务端依赖

        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
        </dependencies>
    View Code

    编写启动类,开启EurekaServer(@EnableEurekaServer)

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

    添加application.yml文件

    server:
      port: 10081
      
    #eureka服务注册
    spring:
      application:
        name: eurekaserver #eureka服务名
    eureka:
      client:
        service-url:  #eureka地址信息
          defaultZone: http://localhost:10081/eureka

    eureka也是个微服务,并把自己也注册到eureka,可以实现eureka集群

    defaultZone可以有多个eureka地址信息,中间以逗号隔开

    注意:端口号为10080时,会失败,不知到为什么

    微服务注册

    在微服务项目中添加eureka客户端依赖

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>

    配置注册信息(微服务名、eureka地址)

    server:
      port: 8081
    spring:
      datasource:
        url: jdbc:mysql://192.168.223.129:3306/cloud-user?useSSL=false
        username: root
        password: root
        driver-class-name: com.mysql.cj.jdbc.Driver
      application:
        name: userservice
    mybatis:
      type-aliases-package: com.marw.pojo
      configuration:
        map-underscore-to-camel-case: true
    
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:10081/eureka/
    View Code

    将user-service多次启动,模拟多实例部署,为了避免端口冲突,需要修改端口号

     

     

    -DServer.port=8083

     

    服务发现

    修改访问的url路径,用注册到eureka的服务名替换ip和端口

    String url = "http://userservice/user/"+order.getUserId();

    在实例化RestTemplate方法上添加负载均衡注解(@LoadBalanced)

        @Bean
        @LoadBalanced
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }

    测试效果:

    分别访问 http://localhost:8082/order/101 、http://localhost:8082/order/102

  • 相关阅读:
    python的struct模块
    Linux程序设计学习笔记(独乐乐版)
    理解AndroidX
    Android中的样式和主题
    Android中Fragment的使用
    Android 中Dialog的使用
    直接在apk中添加资源的研究
    Android签名生成和互转
    简单扒一下Volley源码,扩展Volley生命周期
    获取android所有联系人信息
  • 原文地址:https://www.cnblogs.com/WarBlog/p/15393521.html
Copyright © 2011-2022 走看看