04. 微服务 - 示例搭建 - LoadBalancer(一)

前言

  1. 基于Eureka示例搭建时的代码
  2. hosts增加域名dingsu-300
  3. 两种设备服务提供者(软交换-sip、300)各两个节点,用于测试负载路由情况

负载均衡概念

依据各项指标(可使用硬件资源、节点数、请求速率、业务场景等)进行权重考量,将负载(访问请求、工作任务等)分摊到多个服务节点上,从而提升系统整体的稳定性、可靠性。

LoadBalancer介绍

  1. 本次样例搭建使用的是Spring Cloud的 J 版本,H版本(某个小版本😄)之前默认引用的是Netflix Ribbon,在2020年之后不再维护,因此Spring Cloud官方推出并推荐使用Spring Cloud LoadBalancer
  2. Nacos默认引用Ribbon,后期搭建Nacos时,会替换为LoadBalancer
  3. LoadBalancer是一个客户端负载均衡器(调用方负责),而nginx则是服务端负载均衡器(服务提供方负责)
  4. 提供RoundRobin(轮询)和Random(随机)两种服务choose算法,当然也可以继承ReactorLoadBalancer< ServiceInstance>类,或者实现ReactorServiceInstanceLoadBalancer接口自定义算法

项目结构

项目结构

  • dingsu-300/-slave:设备300服务(2台)服务节点
  • dingsu-device:设备管理服务
  • dingsu-eureka:服务注册中心(-cluster是上篇文章遗老,忽略)
  • dingsu-sip/-slave:软交换服务/设备(2台)服务节点
  • dingsu-common: 通用数据结构

配置及代码

  • 基于dingsu-sip模块示例,其他模块复制以下,修改配置即可
  • hosts文件
127.0.0.1		confucius-eureka-server
127.0.0.1		dingsu-sip
127.0.0.1		dingsu-devices
127.0.0.1		dingsu-300
  • application.yml
  • 注意上一篇中提到的,defaultZone、application.name、hostname一致性的问题
spring:
  application:
    name: dingsu-sip

server:
  port: 4512
  desc: 软交换系统服务-4512

logging:
  config: classpath:logback.xml
eureka:
  instance:
    hostname: dingsu-sip
  client:
    service-url:
      defaultZone: http://confucius-eureka-server:4499/eureka
  • pom.xml
  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.hd</groupId>
            <artifactId>dingsu-common</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.oshi</groupId>
            <artifactId>oshi-core</artifactId>
        </dependency>
  • controller
  • 两种设备方便起见,这个接口路径是一致的
package com.hd.sip.modules.server.controller;

import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.github.xiaoymin.knife4j.annotations.DynamicParameter;
import com.github.xiaoymin.knife4j.annotations.DynamicResponseParameters;
import com.hd.common.core.domain.R;
import com.hd.sip.modules.server.service.ServerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 丁宿
 */
@Api(tags = "服务器状态")
@ApiSupport(order = 10,author = "丁宿")
@RestController
@RequestMapping("/server")
public class ServerController {
   

	private final ServerService serverService;

    public ServerController(ServerService serverService) {
   
        this.serverService = serverService;
    }

    @ApiOperation(value = "当前状态")
	@ApiOperationSupport(order = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丁宿

新手,让我看看1分钱长啥样

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值