微服务
将项目分割成一个个小项目,每个项目单独打包部署到自己的服务器,每个服务之间可以相互调用
优点:
-
每个项目的代码量降低,容易维护
-
项目的技术更新迭代方便
-
方便系统的水平扩展
-
系统的并发量提高
-
系统的可用性提高
-
系统的性能提高
缺点:
-
系统整体的复杂性大大提高
-
系统开发和部署成本提高
-
系统运维困难
开发商品微服务和订单微服务
服务提供者:商品服务
服务消费者:订单服务
查询订单时需要查询相关商品的信息
服务之间可以通过RestTemplate进行http调用
商品服务
@RestController public class ProductController { @GetMapping("/product/{id}") public ResponseEntity<Product> getProductById(@PathVariable Long id){ Product product = new Product(id,"测试商品",new BigDecimal("99.99999")); return ResponseEntity.ok(product); } }
订单服务
/** * 配置RestTemplate */ @Configuration public class RestTemplateConfig { @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } }
@Service public class OrderService { @Autowired private RestTemplate restTemplate; public Order getOrderById(Long id){ Order order = new Order(id,88L,10L, LocalDateTime.now(),null); //调用商品服务查询商品 ResponseEntity<Product> entity = restTemplate.getForEntity("http://localhost:8001/product/" + order.getProductId(), Product.class); order.setProduct(entity.getBody()); return order; } }
@RestController public class OrderController { @Autowired private OrderService orderService; @GetMapping("/order/{id}") public ResponseEntity<Order> getOrderById(@PathVariable Long id){ return ResponseEntity.ok(orderService.getOrderById(id)); } }
运行效果:
在网页输入url。可得这样的效果:
(id,"测试商品",new BigDecimal("99.99999"));