• Eureka


    服务远程调用

    通过RestTemple实现远程调用

    实现前:

    查询的用户为空

    image-20220812161235337

    实现后:

    image-20220812160954222

    定义一个Bean

    //创建RestTempl
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    修改查询订单的方法

    @Service
    public class OrderService {
    
        @Autowired
        private OrderMapper orderMapper;
        @Autowired
        private RestTemplate restTemplate;
    
        public Order queryOrderById(Long orderId) {
            // 1.查询订单
            Order order = orderMapper.findById(orderId);
            //2.利用RestTemplate发起http请求,查询用户
            String url="http://localhost:8081/user/"+ order.getUserId();
            User user = restTemplate.getForObject(url, User.class);
            //3.封装User到Order
            order.setUser(user);
            // 4.返回
            return order;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    提供者与消费者:

    服务提供者:一次业务中,被其他微服务调用的服务

    服务消费者:一次业务中,调用其他微服务的服务

    一个服务既可以是提供者也可以是消费者

    Eureka注册中心

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

    • EurekaServer:服务端,注册中心

      记录服务信息

      心跳监控

    • EurekaClient:客户端:

    ​ provider:服务提供者

    记录服务信息

    心跳监控

    ​ consumer:服务消费者

    根据服务名称从EurekaServer拉取服务列表

    基于服务列表做负载均衡,选中一个微服务后发起远程调用

    搭建注册中心

    1.创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖

            <dependency>
               <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4

    2.编写启动类

    @EnableEurekaServer 
    @SpringBootApplication
    public class EurekaApplication  {
        public static void main(String[] args) {
            SpringApplication.run(EurekaApplication.class,args);
            }
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.配置文件

    server:
       port:  10086  #服务端口
    spring:
      application:
        name: eurekaserver  #eureka的服务名称
    
    
    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:10086/eureka/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    打开Eureka

    image-20220815093051455

    搭建完成

    image-20220812171244553

    服务注册

    1.在user-service项目中引入依赖

        
           org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
    
    • 1
    • 2
    • 3
    • 4

    2.配置eureka地址

    spring:
      application:
        name: usereureka  #eureka的服务名称
        
        
    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:10086/eureka/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.在order-service中做同样的操作

    回到注册中心查看:注册成功

    image-20220815095254694

    服务发现

    在order-service完成服务拉取

    1.修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口

    String url="http://userserver/user/"+ order.getUserId();
    
    • 1

    2.在order-service项目中的启动类OrderApplication中的RestTemplate添加负载均衡注解:

    @LoadBalanced

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    可以复制一个userappllication

    测试负载均衡(默认是轮询)

    image-20220815100224233

    Ribbon负载均衡

    改变负载均衡的规则

    1.代码方式(所有的服务)

    @Bean
        public IRule randmoRule(){
            return new RandomRule();//设置为随机
    }
    
    • 1
    • 2
    • 3
    • 4

    2.配置文件方式(只针对某个服务)

    在orderservice的配置文件中

    userservice: #服务名
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则
    
    
    • 1
    • 2
    • 3
    • 4

    Ribbon-饥饿加载

    Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间很长。而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面的配置开启饥饿加载

    userservice:
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则
    #设置饥饿加载
    ribbon:
      eager-load:
        enabled: true
        clients:
          - userservice
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    Stable Diffusion 提示词入门指南
    Linux UWB Stack实现——MCPS通道访问
    远程监控电脑软件怎么选?
    web前端期末大作业 在线电影网页设计与制作 HTML+CSS+JavaScript仿叮当电影网页制作
    Qt基础 QScatterSeries
    python基于PHP+MySQL的连锁商店仓库管理系统
    《分析模式》漫谈11-Catalog不是手册
    C#.NET ORM FreeSql 读取使用 US7ASCII 的 Oracle 数据库中文显示乱码问题
    leetcode:6248. 统计中位数为 K 的子数组【问题转化 + 排序二分】
    请问如何在proteus里画出电压器两边的箭头?
  • 原文地址:https://blog.csdn.net/qq_57907966/article/details/126342467