建设工程网站tc百度推广怎么样才有效果
我们现在项目中使用的RPC远程调用技术是Dubbo
实际上除了Dubbo技术之外,还有很多远程调用的方法
它们有些调用的思想都和Dubbo完全不同
Dubbo是SpringCloudAlibaba提供的功能强大的RPC框架
但是Dubbo功能也有限制,如果我们想调用的方法不是我们当前项目的组件或功能,甚至想调用的方法不是java编写的,那么Dubbo就无能为力了
我们可以使用RestTemplate来调用任何语言编写的公开的Rest路径
也就是只要能够使用浏览器访问的路径,我们都可以使用RestTemplate发送请求,接收响应
使用步骤如下
步骤1:
无需添加任何pom依赖和yml文件配置
只需在调用的发起方,也就是使用RestTemplate发起请求的项目配置文件中(指支持@Configuration注解的类或SpringBoot启动类),向Spring容器注入一个该类型对象
所有SpringBoot配置类都可以添加下面代码,我们选择SpringBoot启动类添加如下代码
在CartWebapi启动类中修改
@SpringBootApplication
// 略....
public class CsmallCartWebapiApplication {public static void main(String[] args) {SpringApplication.run(CsmallCartWebapiApplication.class, args);}@Bean// 启动负载均衡的注解,因为Dubbo自带负载均衡,但是RestTemplate是代替Dubbo的,需要单独设置@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}}
步骤2:
RestTemplate是一个能够发送请求到指定url路径的工具
我们项目中有若干控制器方法,都可以作为它调用的目标
我们可以实现在cart模块运行删除购物车商品的同时减少库存
这样就要求我们stock模块具备一个能够减少库存的控制器方法,
现在这个方法是有的,url为:/base/stock/reduce/count
但是RestTemplate调用时请求以get方法居多,post方法调用代码比较繁琐,所以将现在stock模块减少库存的方法由之前的@PostMapping修改为@GetMapping
步骤3:
回到cart-webapi模块
开始调用
我们可以在当前CartController控制器方法deleteUserCart中
添加RestTemplate的调用,实现库存的减少
// 装配RestTemplate调用远程方法
@Autowired
private RestTemplate restTemplate;@PostMapping("/delete")
@ApiOperation("删除购物车中的商品")
@ApiImplicitParams({@ApiImplicitParam(value = "用户Id",name="userId",example = "UU100"),@ApiImplicitParam(value = "商品编号",name="commodityCode",example = "PC100")
})
public JsonResult deleteUserCart(String userId,String commodityCode){cartService.deleteUserCart(userId,commodityCode);// RestTemplate调用减少库存的方法// 我们设计删除购物车之后,减少库存的操作// 要调用的stock的/base/stock/reduce/count,所以调用前先确定urlString url="http://localhost:20003/base/stock/reduce/count?" +"commodityCode={1}&reduceCount={2}";// 发起调用// getForObject方法参数和返回值的解释// 参数分3个部分// 1.第一个参数:请求的url// 2.第二个参数:调用的方法的返回值类型,要求编写类型的反射// 3.第三个参数开始:往后的每一次参数都是在给url中{x}的占位符赋值// 第三个参数赋值给{1},第四个参数赋值给{2} 以此类推JsonResult jsonResult = restTemplate.getForObject(url, JsonResult.class, commodityCode, 5);System.out.println(jsonResult);return JsonResult.ok("删除购物车完成!");
}
SpringCloudNetflix系统下,RestTemplate实现有一个别名叫Ribbon
如果说"Ribbon"调用,指的就是RestTemplate对象的调用过程