当前位置: 首页 > 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.jsqmd.com/news/1029410/

相关文章:

  • 2026浙江原木定制工厂市场测评:聚焦中式整装与纯实木定制的专业能力 - 企业品牌优选测评官
  • 飞书内部智能助理搭建教程 OpenClaw 本地 Agent 集成方案
  • 关于北大青鸟顺义校区介绍及官方公告 - 北大青鸟总部
  • 5分钟上手Midscene.js:基于视觉AI的UI自动化测试实践指南
  • 广州海珠区琶洲会展与住宅施工设备租赁攻略|广州广申机械就近派车 - 润富黄金回收
  • 2026年智能工牌服务商推荐:从汽车销售场景看数卓科技的AI语音工牌实践
  • Codex 桌面端 安装部署问题汇总(windows系统)
  • 微信网页版访问难题的终极解决方案:wechat-need-web扩展深度解析
  • IEC 61850标准协议解读 6.RCB报告控制块
  • 计算机毕业设计之jsp博物馆售票系统设计与实现
  • 2026年山东超高分子量聚乙烯板材与pp聚丙烯定制厂家选型指南 - 年度推荐企业名录
  • 2026深度测评青岛 6 家金铺 本地黄金回收避坑甄选榜单 - 讯息早知道
  • 同样一枚 1 克拉钻戒,沈阳回收价差居然差几千! - 逸程
  • 计算机毕业设计之音乐网站
  • 微信好友关系检测终极指南:快速找出已删除你的好友
  • 绘画书法比赛怎么发起微信投票?书画作品评选教程 - 微信投票小程序
  • 物理AI元年:英伟达Cosmos 3与Figure 03引爆的智能革命
  • 闲置黄金怎么卖最划算2026黄金回收计价方式张家口正规回收店 - 润富黄金回收
  • 收藏!小白程序员实战学习大模型Agent的进阶路线图
  • 告别依赖:从沁恒EVT到MounRiver独立工程的构建心法
  • 机器人终于会主动找你了!触发器实战,每天8点自动推送新闻
  • 2026六安电商企业做GEO应该怎么选服务商?靠谱GEO服务商推荐与选型实战指南 - 企业新闻快传
  • 跟我学UDS(ISO14229) ———— 0x2C(DynamicallyDefineDataIdentifier)实战:灵活数据采集与带宽优化
  • 反向海淘移动端适配技术:taocarts跨端自适应优化方案
  • 2026重庆黄金回收时效梯队榜单:收的顶全域响应力断层登顶 - 奢侈品回收测评
  • 飞思卡尔QorIQ处理器架构演进与多核通信处理技术解析
  • 密云本地室内装修|山语空间装饰市场解析与避坑指南 - 百航
  • WebAssembly 跨语言互操作:Rust 与 JS 的高效数据传递与类型桥接
  • 高端翡翠如何变现?沈阳合扬专业鉴定回收解析 - 开心测评
  • SuperPNG:专业级PNG压缩插件深度解析与实战指南