配置微服务负载均衡的两种方式

这篇具有很好参考价值的文章主要介绍了配置微服务负载均衡的两种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明:在微服务开发中,每个服务是通过服务名称来区分的,当两个微服务名称相同时,注册中心会视为这两个服务是相同的。配置对应的负载均衡策略,当其他服务发送请求过来的时,可以对这两个微服务进行规则访问。

搭建环境

创建两个服务,订单服务(端口8081)、用户服务(开启两个,一个端口8082、一个8084),查询订单时,订单服务会发请求给用户服务,查询该订单对应的用户信息。注册中心使用的是eureka(端口8083),服务间通信使用RestTemplate。

配置微服务负载均衡的两种方式,微服务,负载均衡,架构

(手动注入RestTemplate对象到IOC容器中,需要增加@LoadBalanced注解,不然程序会无法启动)

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class AddBean {

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

(查询订单信息,需要使用RestTemplate向用户服务查询用户信息)

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private RestTemplate restTemplate;


    @Override
    public Order getOrder(Long id) {

        Order order = orderMapper.getOrder(id);

        // 使用restTemplate的getForEntity()方法向用户模块发送请求
        ResponseEntity<User> entity = restTemplate.getForEntity("http://USERSERVICE/user?id=" + order.getUserId(), User.class);

        // 响应结果是一个response实例,先判断响应状态码是不是成功
        if (entity.getStatusCode().is2xxSuccessful()) {

            // 取出响应数据使用
            User user = entity.getBody();
            order.setUser(user);
        }

        return order;
    }

(在用户服务的Controller类中,打印请求的端口号,用来识别是哪个服务在处理请求)

    @Autowired
    private HttpServletRequest request;

    @GetMapping
    public String getUser(Long id){
        System.out.println("端口号:" + request.getLocalPort());
        return JSONUtil.toJsonStr(userService.getUser(id));
    }

四个程序全部启动,默认情况,负载均衡策略是轮询,即两个用户服务是被轮流访问的;

配置微服务负载均衡的两种方式,微服务,负载均衡,架构

方式一:配置文件设置

在订单服务的配置文件中,增加下面这行配置,可配置对应的负载均衡策略,com.netflix.loadbalancer.RandomRule 为随机访问;

# 给userservice配置负载均衡规则(随机访问),配置在欲访问该服务的一端,而不是服务端
userservice.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

配置微服务负载均衡的两种方式,微服务,负载均衡,架构

另外,还有其他访问策略,可在(DefaultClientConfigImpl)类中查找

配置微服务负载均衡的两种方式,微服务,负载均衡,架构

方式二:添加IRule

在配置类中,手动添加IRule(负载均衡策略)对象

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RoundRobinRule;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class AddBean {

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

    /**
     * 设置负载均衡策略(随机访问)
     * @return
     */
    @Bean
    public IRule randomRule() {
        return new RandomRule();
    }
}

可以在IRule接口中,找到如下实现类,都是对应的负载均衡策略;

配置微服务负载均衡的两种方式,微服务,负载均衡,架构

把方式一添加的配置注释掉,重启订单服务,可以看到用户服务被随机访问

配置微服务负载均衡的两种方式,微服务,负载均衡,架构

总结

在Eureka、@LoadBalanced的情况下,相同微服务的负载均衡是轮询,可通过以上两种方式配置服务的负载均衡策略,不同的是,方式一可以针对某一服务设置负载均衡测试,而方式二是全局设置。文章来源地址https://www.toymoban.com/news/detail-553010.html

到了这里,关于配置微服务负载均衡的两种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nginx负载均衡的几种配置方式介绍

    目录 一.负载均衡含义简介 二.nginx负载均衡配置方式 准备三台设备: 2.190均衡服务器,2.191web服务器1,2.160web服务器2,三台设备均安装nginx,两台web服务器均有网页内容 upstream内参数 1.一般轮询负载均衡 (1)含义 (2)配置 (3)测试 2.加权轮询负载均衡 (1)含义 (2)配置

    2024年02月13日
    浏览(41)
  • 深入浅出 -- 系统架构之负载均衡Nginx跨域配置

       跨域问题在之前的单体架构开发中,其实是比较少见的问题,除非是需要接入第三方 SDK 时,才需要处理此问题。但随着现在前后端分离、分布式架构的流行,跨域问题也成为了每个Java开发必须要懂得解决的一个问题。 跨域问题产生的原因    产生跨域问题的主要原因就

    2024年04月10日
    浏览(58)
  • 企业架构LB-服务器的负载均衡之LVS实现

    学习目标和内容 1、能够了解LVS的基本工作方式 2、能够安装配置LVS实现负载均衡 3、能够了解LVS-NAT的配置方式 4、能够了解LVS-DR的配置方式 #一、LVS介绍和安装 == LVS ==(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内

    2024年02月21日
    浏览(41)
  • pycharm 连接远程服务器的两种方式 ssh Remote

    按服务器信息填写 在mapping栏下设置本地和远程仓库 (如果已经进入某个项目,可以选择Close Project退出至该页面) 按需配置服务器 右下角点击现在的环境名,点击Add New Interpreter -- Add Local Interpreter;选择已有的Conda环境。

    2024年02月07日
    浏览(62)
  • 深入浅出 -- 系统架构之负载均衡Nginx大文件传输配置

       在某些业务场景中需要传输一些大文件,但大文件传输时往往都会会出现一些 Bug ,比如文件超出限制、文件传输过程中请求超时等,那么此时就可以在 Nginx 稍微做一些配置,先来了解一些关于大文件传输时可能会用的配置项: 配置项 释义 client_max_body_size 设置请求体允

    2024年04月12日
    浏览(75)
  • Deepin/UOS Linux 配置普通用户 sudo 权限 的两种方式

    Deepin/UOS Linux 配置普通用户 sudo 权限 的两种方式 root 用户下 配置 普通用户 sudo 权限 echo \\\"zhangsan ALL=(ALL:ALL) NOPASSWD: ALL\\\" /etc/sudoers root 用户下 配置 普通用户 到 sudo 组下 vim /etc/sudoers 修改下面这一行 改为 然后修改 /etc/group 改为 也是阔以的 我们下期见,拜拜!

    2024年02月16日
    浏览(46)
  • tcp服务器设置accpet为非阻塞的两种处理方式

    监听socket必须绑定一个端口,以便其他客户端可以连接到这个端口,并与该服务端进行通信。监听socket不绑定端口就无法接收连接请求。 每个连接都必须有一个唯一的Socket地址,即IP地址和端口号。TCP协议使用端口号来区分不同的应用程序和连接。 一个 socket 只能与一个 so

    2024年02月07日
    浏览(32)
  • Jenkins怎么配置Publish over SSH,配置SSH Servers连接的两种方式

    jenkins必须已经安装好了publish over ssh的插件 1.打开Manager Jenkins的System配置 2.找到Publish over SSH配置项,点击add SSH Server增加一个ssh连接配置  3.填写ssh基本配置  4.点击高级,配置密码  5.点击 Test  Configuration测试连接,Success成功

    2024年02月03日
    浏览(56)
  • axios和vite在本地开发环境配置代理的两种方式,五分钟学会

    如果你使用vue或者react开发,就得使用axios吧,然后为了解决跨域问题,就得使用vite配置吧,那怎么协调配置它们两个才能正常工作呢? 正常的流程:配置axios的baseURL,然后配置vite的proxy 配置axios的baseURL: 然后再配置vite的proxy:在vite.config.js中配置 如果你想将路径重写也是

    2024年02月04日
    浏览(38)
  • 基于SpringCloud的微服务架构学习笔记(2)注册中心Eureka和负载均衡Ribbon

    1.7.1 远程调用的问题 地址信息获取 : 服务消费者 如何获取 服务提供者 的 地址信息 (不能每次都写死): URL:http://localhost:8081/user/\\\"+order.getUserId() 多选一 :如果有多个服务提供者,消费者如何进行选择 监测健康状态 :消费者如何获知提供者的健康状态 1.7.2 eureka原理 地址

    2024年02月13日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包