赞
踩
单体架构是将所有业务功能集中在一个项目中,最终打包成一个可部署单元。这种方式的优点在于架构简单,部署成本低。然而,它的缺点也很明显:耦合度高,这使得维护和扩展变得困难。
分布式架构通过将系统根据业务功能拆分成多个独立项目,每个项目作为一个独立的服务运行。这种方式的优点包括降低服务间的耦合度,有利于服务的升级和扩展。
微服务架构是分布式架构的一种形式,它通过更细致的服务拆分,实现了更高的灵活性和可维护性。微服务架构的关键特征包括:
Spring Cloud是一个基于Spring Boot的微服务框架,它集成了多种微服务治理组件,实现了这些组件的自动化配置,提供了一站式的微服务解决方案。
服务拆分后,不同服务之间的通信通常通过远程调用实现。以下是服务拆分的一些注意事项:
微服务之间的调用通常基于HTTP请求,这种方式具有语言无关性,只要知道服务的IP、端口、接口路径和请求参数,就可以实现跨语言的服务调用。
1. RestTemplate方式
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@Autowired
private RestTemplate restTemplate;
@GetMapping("/createOrder/{gid}/{number}")
public Order order(@PathVariable("gid") Integer id,@PathVariable("number") Integer number){
log.info("用户开始下单,调用商品系统,查询{}号商品信息",id);
Goods goods = restTemplate.getForObject("http://localhost:9002/goods/getGoods/" + id, Goods.class);
log.info("商品信息查询完毕:"+ JSON.toJSONString(goods));
log.info("开始下单:");
Order order = new Order();
order.setUid(1);
order.setUname("测试用户");
order.setGid(goods.getId());
order.setGname(goods.getGoodsName());
order.setNumber(number);
orderService.createOrder(order);
log.info("下单成功");
return order;
}
2. Fegin实现服务调用
Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。
在服务消费者上进行以下操作:
1.添加依赖
<!--fegin组件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.在启动类上添加注解
@EnableFeignClients
3.新建client包,并创建接口(把服务提供者controller对应的方法名复制过来,注意路径要完整
@FeignClient("goods-service")
public interface GoodsService {
@RequestMapping("/goods/getGoods/{id}")
public Goods goods(@PathVariable("id") Integer id);
}
4.调用代码示例
@Autowired
private GoodsService goodsService;
@GetMapping("/createOrder3/{gid}/{number}")
public Order order3(@PathVariable("gid") Integer id,@PathVariable("number") Integer number){
log.info("用户开始下单,调用商品系统,查询{}号商品信息",id);
//通过feign调用商品微服务
Goods goods = goodsService.goods(id);
log.info("商品信息查询完毕:"+ JSON.toJSONString(goods));
log.info("开始下单:");
Order order = new Order();
order.setUid(1);
order.setUname("测试用户");
order.setGid(goods.getId());
order.setGname(goods.getGoodsName());
order.setNumber(number);
orderService.createOrder(order);
log.info("下单成功");
return order;
}
一个服务可能同时扮演提供者和消费者的角色,这取决于业务流程的上下文。
微服务架构提供了更细粒度的服务拆分,降低了服务间的耦合度,提高了系统的可维护性和可扩展性。然而,它也带来了架构复杂性,增加了运维、监控和部署的难度。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。