IDEA 创建 Java 项目 负载均衡 获取 Nacos 服务地址一、创建 SpringCloud 工程创建 SpringCloud 工程 教程二、引入 Nacos 注册中心配置中心引入 Nacos 注册中心配置中心教程三、开发下单功能之创建实体类四、开发下单功能之查询商品信息接口五、开发下单功能之测试负载均衡六、开发下单功能之订单服务调用商品服务七、源码Order.javapackageyang.junbo.bean.order;importlombok.Data;importyang.junbo.bean.product.Product;importjava.math.BigDecimal;importjava.util.List;DatapublicclassOrder{privateLongid;privateBigDecimaltotalAmount;privateLonguserId;privateStringnickName;privateStringaddress;privateListProductproductList;}Product.javapackageyang.junbo.bean.product;importlombok.Data;importjava.math.BigDecimal;/** * ClassName: Product * Package: yang.junbo.product.bean * Description: * * Author 杨钧博 * Create 2026/6/17 8:52 * Version 1.0 */DatapublicclassProduct{privateLongid;privateBigDecimalprice;privateStringproductName;privateintnum;}OrderController.javapackageyang.junbo.order.controller;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importyang.junbo.bean.order.Order;importyang.junbo.order.service.OrderService;/** * ClassName: OrderController * Package: yang.junbo.order.controller * Description: * * Author 杨钧博 * Create 2026/6/17 9:13 * Version 1.0 */RestControllerpublicclassOrderController{AutowiredprivateOrderServiceorderService;/** * 创建订单 * param userId * param productId * return */GetMapping(/create)publicOrdercreate(RequestParam(userId)LonguserId,RequestParam(productId)LongproductId){OrderorderorderService.createOrder(productId,userId);returnorder;}}OrderServiceImpl.javapackageyang.junbo.order.service.impl;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.cloud.client.ServiceInstance;importorg.springframework.cloud.client.discovery.DiscoveryClient;importorg.springframework.cloud.client.loadbalancer.LoadBalancerClient;importorg.springframework.stereotype.Service;importorg.springframework.web.client.RestTemplate;importyang.junbo.bean.order.Order;importyang.junbo.order.service.OrderService;importyang.junbo.bean.product.Product;importjava.math.BigDecimal;importjava.util.Arrays;importjava.util.List;/** * ClassName: OrderSerciveImpl * Package: yang.junbo.order.service.impl * Description: * * Author 杨钧博 * Create 2026/6/17 9:14 * Version 1.0 */Slf4jServicepublicclassOrderSerciveImplimplementsOrderService{AutowiredprivateDiscoveryClientdiscoveryClient;AutowiredprivateRestTemplaterestTemplate;AutowiredprivateLoadBalancerClientloadBalancerClient;/** * 创建订单 * param productId * param userId * return */OverridepublicOrdercreateOrder(LongproductId,LonguserId){ProductproductgetProductFromRemoteWithLoadBalanceAnnotation(productId);OrderordernewOrder();order.setId(1L);order.setTotalAmount(product.getPrice().multiply(newBigDecimal(product.getNum())));order.setUserId(userId);order.setNickName(连杰李);order.setAddress(北京);order.setProductList(Arrays.asList(product));returnorder;}// 进阶3基于注解的负载均衡privateProductgetProductFromRemoteWithLoadBalanceAnnotation(LongproductId){Stringurlhttp://service-product/product/productId;//2、给远程发送请求 service-product 会被动态替换ProductproductrestTemplate.getForObject(url,Product.class);returnproduct;}privateProductgetProductFromRemote(LongproductId){//1、获取到商品服务所在的所有机器IPportListServiceInstanceinstancesdiscoveryClient.getInstances(service-product);ServiceInstanceinstanceinstances.get(0);//远程URLStringurlhttp://instance.getHost():instance.getPort()/product/productId;log.info(远程请求{},url);//2、给远程发送请求ProductproductrestTemplate.getForObject(url,Product.class);returnproduct;}// 进阶2完成负载均衡发送请求privateProductgetProductFromRemoteWithLoadBalance(LongproductId){//1、获取到商品服务所在的所有机器IPportServiceInstancechooseloadBalancerClient.choose(service-product);//远程URLStringurlhttp://choose.getHost():choose.getPort()/product/productId;log.info(远程请求{},url);//2、给远程发送请求ProductproductrestTemplate.getForObject(url,Product.class);returnproduct;}}OrderServiceConfig.javapackageyang.junbo.order.config;importorg.springframework.cloud.client.loadbalancer.LoadBalanced;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.client.RestTemplate;/** * ClassName: OrderServiceConfig * Package: yang.junbo.order.config * Description: * * Author 杨钧博 * Create 2026/6/17 9:48 * Version 1.0 */ConfigurationpublicclassOrderServiceConfig{BeanLoadBalancedpublicRestTemplaterestTemplate(){returnnewRestTemplate();}}ProductController.javapackageyang.junbo.product.controller;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RestController;importyang.junbo.bean.product.Product;importyang.junbo.product.service.ProductService;/** * ClassName: ProductController * Package: yang.junbo.product.controller * Description: * * Author 杨钧博 * Create 2026/6/17 8:53 * Version 1.0 */Slf4jRestControllerpublicclassProductController{AutowiredprivateProductServiceproductService;/** * 获取商品信息 * param productId * return */GetMapping(/product/{id})publicProductgetProduct(PathVariable(id)LongproductId){log.info(查询商品信息System.currentTimeMillis());ProductproductproductService.getProduct(productId);returnproduct;}}ProductServiceImpl.javapackageyang.junbo.product.service.impl;importorg.springframework.stereotype.Service;importyang.junbo.bean.product.Product;importyang.junbo.product.service.ProductService;importjava.math.BigDecimal;/** * ClassName: ProductServiceImpl * Package: yang.junbo.product.service.impl * Description: * * Author 杨钧博 * Create 2026/6/17 8:54 * Version 1.0 */ServicepublicclassProductServiceImplimplementsProductService{/** * 获取商品信息 * param productId * return */OverridepublicProductgetProduct(LongproductId){ProductproductnewProduct();product.setId(Long.valueOf(1));product.setPrice(newBigDecimal(8000));product.setProductName(iPhone 17);product.setNum(1);returnproduct;}}LoadBalancerTest.javapackageyang.junbo.order;importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.cloud.client.ServiceInstance;importorg.springframework.cloud.client.loadbalancer.LoadBalancerClient;/** * ClassName: LoadBalancerTest * Package: yang.junbo.order * Description: * * Author 杨钧博 * Create 2026/6/17 10:47 * Version 1.0 */SpringBootTestpublicclassLoadBalancerTest{AutowiredprivateLoadBalancerClientloadBalancerClient;Testvoidtest(){ServiceInstancechooseloadBalancerClient.choose(service-product);System.out.println(choose choose.getHost()choose.getPort());chooseloadBalancerClient.choose(service-product);System.out.println(choose choose.getHost()choose.getPort());chooseloadBalancerClient.choose(service-product);System.out.println(choose choose.getHost()choose.getPort());chooseloadBalancerClient.choose(service-product);System.out.println(choose choose.getHost()choose.getPort());chooseloadBalancerClient.choose(service-product);System.out.println(choose choose.getHost()choose.getPort());}}