当前位置: 首页 > news >正文

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());}}
http://www.cnnetsun.cn/news/2951752.html

相关文章:

  • 机器人终于会主动找你了!触发器实战,每天8点自动推送新闻
  • 揭秘终极游戏模组管理:XXMI启动器深度解析与实战指南
  • Godot卡牌游戏框架终极指南:快速构建专业级卡牌游戏的完整解决方案
  • Mac高效打开命令行的终极指南:从Spotlight到iTerm2全局热键
  • 2026保姆级教程:图片转PDF免费方法汇总,电脑、手机、微信全都能用
  • FigmaCN中文汉化插件:3分钟消除设计工具的语言障碍
  • 终极指南:如何在IntelliJ IDEA中打造专业阅读环境
  • 3步实现语义引导LiDAR体素遮掩:让MAE预训练更聪明(附代码)
  • Open BMC开发实战:i2c总线驱动与三大外设控制详解
  • 3步获取阿里云盘Refresh Token:终极自动化管理指南
  • 如何在Windows上安装APK文件:APK Installer完整使用教程
  • 【电机控制】STM32F103CXT6无刷直流电机SimpleFOC学习板实战:从硬件焊接调试到位置/速度双环控制
  • AD2019 层次原理图实战避坑指南
  • 抖音直播录制工具完全指南:40+平台自动值守录制方案
  • adb install和 pm install 的区别是什么?
  • 外贸老板必看:Google SGE上线后,传统SEO排名还有用吗?
  • 高通平台TE GPIO选择和配置说明
  • 智慧树刷课插件终极指南:3分钟实现视频自动连播与倍速播放
  • 2026 年国内主流堡垒机厂商核心竞争力分析
  • 第1.3章:StarRocks部署--单机快速验证指南
  • FinFET源漏外延工艺:从原理到实战,揭秘芯片性能提升的核心技术
  • AI NAS大战一触即发,ibbot青春版凭PopLang引擎降维打击
  • NarratoAI终极教程:3步打造专业级AI视频解说,免费开源让创作更简单
  • MidScene:用自然语言开启全平台AI自动化新纪元
  • 2026年试了7款录音转文字工具,准确率稳定性性价比真实体验
  • 制动信号人工采集效率低,LabVIEW定制调试
  • 【毕业设计】基于 JavaWeb 的游戏知识库(战舰世界)管理系统设计与研发(源码+文档+远程调试,全bao定制等)
  • 无需纯化,直接在天然环境中玩转分子互作
  • 5步构建企业级Windows日志监控平台:从零部署到智能告警
  • Freescale e500虚拟化技术栈:KVM/QEMU实现与vcpu规范深度解析