微服务服务拆分原则 与 RestTemplate远程调用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务服务拆分原则 与 RestTemplate远程调用相关的知识,希望对你有一定的参考价值。

(目录)


服务拆分和远程调用


服务拆分原则

这里总结了微服务拆分时的几个原则:


服务拆分示例

服务拆分注意事项:

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

要求:


实现远程调用案例

在order-service服务中,有一个根据id查询订单的接口:

微服务项目下,打开 idea 中的 Service,可以很方便的启动。

根据id查询订单,返回值是Order对象,如图:

user 为 null


在user-service中有一个根据id查询用户的接口:

查询的结果如图:


1.需求:


大概的步骤是这样的:


2.注册RestTemplate

Spring 提供了一个 RestTemplate 工具,只需要把它创建出来即可。(即注入 Bean)

package cn.itcast.order;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication 

    public static void main(String[] args) 
        SpringApplication.run(OrderApplication.class, args);
    

    @Bean
    public RestTemplate restTemplate() 
        return new RestTemplate();
    


3.实现远程调用

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

@Service
public class OrderService 

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) 
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.远程查询 user
        String url = "http://localhost:8081/user/"+order.getUserId();
        // 使用 restTemplate 发送 http 请求
        User user = restTemplate.getForObject(url,User.class);
        //3. 封装 user 信息
        order.setUser(user);
        // 4.返回
        return order;
    


提供者与消费者

在服务调用关系中,会有两个不同的角色:

但是,服务提供者与服务消费者的角色并不是绝对的,而是相对于业务而言。

如果服务A调用了服务B,而服务B又调用了服务C,服务B的角色是什么?

因此,服务B既可以是服务提供者,也可以是服务消费者。


以上是关于微服务服务拆分原则 与 RestTemplate远程调用的主要内容,如果未能解决你的问题,请参考以下文章

※Spring全家桶从入门到X神-微服务+远程调用(RestTemplate)

SpringCloud服务拆分初探与案例解析

SpringCloud微服务之初识微服务01

SpringCloud微服务之初识微服务01

SpringCloud学习笔记-p1(服务拆分&远程调用&Eureka注册中心&Ribbon负载均衡)

前端巨型项目拆分与整合原则方案