基于Ribbon实现订单调用商品服务
不论是基于Eureka的注册中心还是基于Consul的注册中心,SpringCloudRibbon统一进行了封装,所以对于服务调用,两者的方式是一样的。
坐标依赖#
在springcloud提供的服务发现的jar中以及包含了Ribbon的依赖。所以这里不需要导入任何额外的坐标
工程改造#
(1) 服务提供者#
修改 shop_service_product模块中ProductController#findById() 方法如下
@Value("${server.port}") private String port; @Value("${spring.cloud.client.ip-address}") private String ip; @GetMapping("/{id}") public Product findById(@PathVariable Long id) { Product product = productService.findById(id); //设置端口 product.setProductDesc("调用shop-service-product服务,ip:"+ip+",服务提供者端 口:"+port); return product; }
(2) 服务消费者#
修改服务消费者 shop_service_order模块中的启动类OrderApplication ,在创建RestTemplate方法上添加 @LoadBalanced 注解
/** * 基于Ribbon的服务调用与负载均衡 */ @LoadBalanced @Bean public RestTemplate getRestTemplate() { return new RestTemplate(); }
在 shop_service_order的OrderController 中添加下单方法,并使用RestTemplate完成服务调用
@Autowired private RestTemplate restTemplate; @GetMapping("/buy/{id}") public Product order() { //通过restTemplate调用商品微服务 //Product product = restTemplate.getForObject("http://127.0.0.1:9002/product/1", Product.class); Product product = restTemplate.getForObject("http://shop-serviceproduct/product/1", Product.class); return product; }
代码测试#
浏览器中请求http://localhost:9001/order/buy/1查看展示效果如下,已经可以在订单微服务中已服务名称的形式调用商品微服务获取数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)