栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

3、微服务远程调用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

3、微服务远程调用

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

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

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

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

 

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

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

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

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

远程调用

    什么是远程调用?

          当微服务进行部署的时候,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)来帮我们解决这个事情。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/301324.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号