基于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查看展示效果如下,已经可以在订单微服务中已服务名称的形式调用商品微服务获取数据
 
posted @   1640808365  阅读(66)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示
主题色彩