news 2026/11/5 14:23:42

IDEA 创建 Java 项目 负载均衡 获取 Nacos 服务地址

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
IDEA 创建 Java 项目 负载均衡 获取 Nacos 服务地址

IDEA 创建 Java 项目 负载均衡 获取 Nacos 服务地址

一、创建 SpringCloud 工程

创建 SpringCloud 工程 教程

二、引入 Nacos 注册中心配置中心

引入 Nacos 注册中心配置中心教程

三、开发下单功能之创建实体类




四、开发下单功能之查询商品信息接口


五、开发下单功能之测试负载均衡



六、开发下单功能之订单服务调用商品服务



七、源码

Order.java

packageyang.junbo.bean.order;importlombok.Data;importyang.junbo.bean.product.Product;importjava.math.BigDecimal;importjava.util.List;@DatapublicclassOrder{privateLongid;privateBigDecimaltotalAmount;privateLonguserId;privateStringnickName;privateStringaddress;privateList<Product>productList;}

Product.java

packageyang.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.java

packageyang.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){Orderorder=orderService.createOrder(productId,userId);returnorder;}}

OrderServiceImpl.java

packageyang.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 */@Slf4j@ServicepublicclassOrderSerciveImplimplementsOrderService{@AutowiredprivateDiscoveryClientdiscoveryClient;@AutowiredprivateRestTemplaterestTemplate;@AutowiredprivateLoadBalancerClientloadBalancerClient;/** * 创建订单 * @param productId * @param userId * @return */@OverridepublicOrdercreateOrder(LongproductId,LonguserId){Productproduct=getProductFromRemoteWithLoadBalanceAnnotation(productId);Orderorder=newOrder();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){Stringurl="http://service-product/product/"+productId;//2、给远程发送请求; service-product 会被动态替换Productproduct=restTemplate.getForObject(url,Product.class);returnproduct;}privateProductgetProductFromRemote(LongproductId){//1、获取到商品服务所在的所有机器IP+portList<ServiceInstance>instances=discoveryClient.getInstances("service-product");ServiceInstanceinstance=instances.get(0);//远程URLStringurl="http://"+instance.getHost()+":"+instance.getPort()+"/product/"+productId;log.info("远程请求:{}",url);//2、给远程发送请求Productproduct=restTemplate.getForObject(url,Product.class);returnproduct;}// 进阶2:完成负载均衡发送请求privateProductgetProductFromRemoteWithLoadBalance(LongproductId){//1、获取到商品服务所在的所有机器IP+portServiceInstancechoose=loadBalancerClient.choose("service-product");//远程URLStringurl="http://"+choose.getHost()+":"+choose.getPort()+"/product/"+productId;log.info("远程请求:{}",url);//2、给远程发送请求Productproduct=restTemplate.getForObject(url,Product.class);returnproduct;}}

OrderServiceConfig.java

packageyang.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{@Bean@LoadBalancedpublicRestTemplaterestTemplate(){returnnewRestTemplate();}}

ProductController.java

packageyang.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 */@Slf4j@RestControllerpublicclassProductController{@AutowiredprivateProductServiceproductService;/** * 获取商品信息 * @param productId * @return */@GetMapping("/product/{id}")publicProductgetProduct(@PathVariable("id")LongproductId){log.info("查询商品信息"+System.currentTimeMillis());Productproduct=productService.getProduct(productId);returnproduct;}}

ProductServiceImpl.java

packageyang.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){Productproduct=newProduct();product.setId(Long.valueOf("1"));product.setPrice(newBigDecimal(8000));product.setProductName("iPhone 17");product.setNum(1);returnproduct;}}

LoadBalancerTest.java

packageyang.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(){ServiceInstancechoose=loadBalancerClient.choose("service-product");System.out.println("choose = "+choose.getHost()+":"+choose.getPort());choose=loadBalancerClient.choose("service-product");System.out.println("choose = "+choose.getHost()+":"+choose.getPort());choose=loadBalancerClient.choose("service-product");System.out.println("choose = "+choose.getHost()+":"+choose.getPort());choose=loadBalancerClient.choose("service-product");System.out.println("choose = "+choose.getHost()+":"+choose.getPort());choose=loadBalancerClient.choose("service-product");System.out.println("choose = "+choose.getHost()+":"+choose.getPort());}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/4 16:14:44

机器人终于会主动找你了!触发器实战,每天8点自动推送新闻

你有没有过这样的想法&#xff1a;每天早上醒来&#xff0c;打开飞书&#xff0c;机器人已经把今天的新闻、天气、待办事项整理好&#xff0c;整整齐齐地推送给你&#xff1f;或者&#xff0c;你希望机器人能自动提醒你“下午三点开会”“信用卡明天还款”&#xff1f;如果你觉…

作者头像 李华
网站建设 2026/11/5 10:07:40

揭秘终极游戏模组管理:XXMI启动器深度解析与实战指南

揭秘终极游戏模组管理&#xff1a;XXMI启动器深度解析与实战指南 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 想要为《原神》、《崩坏&#xff1a;星穹铁道》、《绝区零》等热…

作者头像 李华
网站建设 2026/11/5 14:22:13

Mac高效打开命令行的终极指南:从Spotlight到iTerm2全局热键

1. 项目概述&#xff1a;为什么Mac用户需要“快捷打开命令提示符”&#xff1f;如果你刚从Windows切换到Mac&#xff0c;或者经常需要在不同操作系统间切换工作&#xff0c;最让你抓狂的瞬间之一&#xff0c;可能就是下意识地想按Win R然后输入cmd来召唤那个熟悉的黑框框——命…

作者头像 李华
网站建设 2026/11/1 8:31:01

FigmaCN中文汉化插件:3分钟消除设计工具的语言障碍

FigmaCN中文汉化插件&#xff1a;3分钟消除设计工具的语言障碍 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面感到困惑吗&#xff1f;每次面对"Pen Tool&qu…

作者头像 李华