3、微服务远程调用

         这章我们讲解如何进行微服务远程调用,在使用微服务远程调用之前,我们首先需要进行服务拆分讲解,例如一个电商有用户管理 和 订单管理,我们可以将其拆分成两个独立的服务。一个为用户微服务系统,一个为订单微服务系统。

3、微服务远程调用_第1张图片

单一职责:不同微服务,不要重复开发相同业务。

数据独立:不要访问其它微服务的数据库。

面向服务:将自己的业务暴露为接口,供其它微服务调用。

3、微服务远程调用_第2张图片

 

cloud-demo:父工程,管理依赖

  • order-service:订单微服务,负责订单相关业务
  • user-service:用户微服务,负责用户相关业务

数据库分为cloud_order、colud_user、各自连接自己的数据库。这样减轻了数据库的压力。增加了并发能力。

3、微服务远程调用_第3张图片

     (需要具体代码的可以留下邮箱)

远程调用

    什么是远程调用?

          当微服务进行部署的时候,A服务器布署order-service(订单微服务),B服务器布署user-service(用户微服务),以你为,订单服务如果需要查询用户信息,只能调用用户服务的 Restful 接口,不能查询用户数据库,所以这个时候该怎么调用呢。因此我们需要像B服务器发起一个请求,请求用户服务的接口 拿到用户数据,然后在根据用户数据 去查询相对应的订单信息。

     因此我们需要知道 Java 如何去发送 http 请求,Spring 提供了一个 RestTemplate 工具,只需要把它创建出来即可。(即注入 Bean)

@Configuration
public class RestConfig {
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

发送请求,自动序列化为 Java 对象。

@RestController
@RequestMapping("order")
public class OrderController {
   @Autowired
   private OrderService orderService;

   @Autowired
   private RestTemplate restTemplate;

    @GetMapping("{orderId}")
    public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
        // 根据id查询订单并返回
        Order order = orderService.queryOrderById(orderId);
        System.out.println("数据:" + order);
        String url = "http://localhost:8081/user/" + order.getUserId();
        User user = restTemplate.getForObject(url, User.class);
        order.setUser(user);
        return order;
    }
}

在上面代码的 url 中,我们可以发现调用服务的地址采用硬编码,倘若我后期更换服务器进行部署了B项目,那我们相对应调用B接口的IP地址也要发生更改了,这个时候你会回到代码来更改这里的URL。并且假设后期B服务需要进行集群,有四五台服务器一起部署,那么你的IP地址该怎么写呢,怎么调用这四五台呢。所以这在后续的开发中肯定是不理想的,这就需要服务注册中心(Eureka)来帮我们解决这个事情。

你可能感兴趣的:(#,SpringCloud微服务,java,restful,远程调用,SpringCloud,微服务)