小工具知识网

当前位置: 首页 > 行业知识 > 【SpringCloud负载均衡】【源码+图解】【一】LoadBalancer的HelloWorld体验

行业知识

【SpringCloud负载均衡】【源码+图解】【一】LoadBalancer的HelloWorld体验

2026-10-20 00:14:31 来源:互联网转载

目录

  • 1. HelloWorld
    • 1.1 Server
      • 1.1.1 依赖
      • 1.1.2 EurekaServer
      • 1.2 Product微服务
        • 1.2.1 依赖
        • 1.2.2 配置文件
        • 1.2.3 Controller
        • 1.3 User微服务
          • 1.3.1 依赖
          • 1.3.2 配置文件
          • 1.3.3 RestTemplate
          • 1.3.4 Controller

            1. HelloWorld

            如���使用Eureka作为服务发现,则默认情况下加入spring-cloud-starter-netflix-eureka-client依赖后会自动加入LoadBalance的功能,因此本文主要是分析默认情况下SpringCloud使用的负载均衡。下面以HelloWorld进入LoadBalance的世界

            ()

            1.1 Server

            1.1.1 依赖

                        org.springframework.boot        spring-boot-starter-web                org.springframework.cloud        spring-cloud-starter-netflix-eureka-server        

            1.1.2 EurekaServer

            @SpringBootApplication// 为了简便我们使用EurekaServer@EnableEurekaServerpublic class EurekaServeApplication {public static void main(String[] args) {SpringApplication.run(EurekaServeApplication.class, args);}}

            启动server

            1.2 Product微服务

            1.2.1 依赖

                        org.springframework.boot        spring-boot-starter-web                org.springframework.cloud        spring-cloud-starter-netflix-eureka-client        

            1.2.2 配置文件

            spring:  application:    name: productserver:  port: ${port}  eureka:  client:    service-url:      defaultZone: http://localhost:3333/eureka/

            这里product我们要起两个实例,以端口不同作为区别:5001、5002。

            ()

            application-peer1.yml

            port: 5001

            如果是Eclipse,在启动时添加-Dspring.profiles.active=peer1参数

            application-peer2.yml

            port: 5002

            1.2.3 Controller

            @RestController@RequestMapping("/prod")public class ProductController {    @GetMapping    public int getProduct(HttpServletRequest request) {        // 直接返回端口号以示区别        return request.getLocalPort();    }    }

            1.3 User微服务

            1.3.1 依赖

                        org.springframework.boot        spring-boot-starter-web                org.springframework.cloud        spring-cloud-starter-netflix-eureka-client        

            1.3.2 配置文件

            spring:  application:    name: userserver:  port: 2222  eureka:  client:    service-url:      defaultZone: http://localhost:3333/eureka/

            1.3.3 RestTemplate

            @SpringBootApplicationpublic class EurekaClientApplication {public static void main(String[] args) {SpringApplication.run(EurekaClientApplication.class, args);}@LoadBalanced // 负载均衡@Beanpublic RestTemplate restTemplate() {    return new RestTemplate();}}

            1.3.4 Controller

            @RestController@RequestMapping("/user")public class UserController {    @Autowired    RestTemplate restTemplate;    @GetMapping    public void getProduct() {        // 调用Product微服务获取值        String result = restTemplate.getForObject("http://product/prod", String.class);        System.out.println(result);    }}

            所有服务都启动后,在浏览器输入http://localhost:2222/user,按下回车键。为了看到负载均衡的效果,我们连续按下10次回车,再看下输出结果

            5001500250015002500150025001500250015002

            从结果我们看到默认情况下是轮询这调用Product微服务,那么它是如何实现的呢?答案是通过intercept被@LoadBalanced的restTemplate的请求。

            未完待续

上一篇:如何查看服务器远程登录?

下一篇:揭秘外太空特效手机制作秘籍!神奇技巧大揭秘!