SpringCloud入门(二)服务间调用和案例

一、微服务拆分注意事项

微服务拆分注意事项:

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

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

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

1.微服务需要根据业务模块拆分,做到单一职责,不要重复开发相同业务

2.微服务可以将业务暴露为接口,供其它微服务使用

3.不同微服务都应该有自己独立的数据库

二、订单和用户服务调用案例

订单和用户两个独立服务;有两个单独的数据库,

-需求:根据订单id查询订单的同时,把订单所属的用户信息一起返回

不要重复开发业务,不能直接查数据库,服务是独立的看不见别人的数据库。

订单向用户发起远程调用;如何完成远程调用;远程调用方式分析: 发起http请求。如下图:

使用 spring提供的 RestTemplate http请求;通过bean注测为spring对象;

基于RestTemplate发起的http请求实现远程调用。http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可。

因此,我们需要在order-service中 向user-service发起一个http的请求,调用http://localhost:8081/user/{userId}这个接口。

使用步骤:

步骤是这样的:

步骤一、注册一个RestTemplate的实例到Spring容器

注册RestTemplate,首先,我们在order-service服务中的OrderApplication启动类中,注册RestTemplate实例:

复制代码
@MapperScan("cn.it.order.mapper")
@SpringBootApplication
public class OrderApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
 
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

步骤二、修改order-service服务中的OrderService类中的queryOrderById方法,根据Order对象中的userId查询User

修改order-service服务中的cn.it.order.service包下的OrderService类中的queryOrderById方法:

步骤三、将查询的User填充到Order对象,一起返回

复制代码
@Service
public class OrderService {
 
    @Autowired
    private OrderMapper orderMapper;
 
 
    @Autowired
    private RestTemplate restTemplate;
 
    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.利用RestTemplate发起http请求,查询用户
        // 2.1.url路径
        String url = "http://userservice/user/" + order.getUserId();
        // 2.2.发送http请求,实现远程调用
        User user = restTemplate.getForObject(url, User.class);
        // 3.封装user到Order
        order.setUser(user);
        // 4.返回
        return order;
    }
    
   
}

三、服务的提供者和消费者概念

-提供者与消费者

服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)

服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)

-服务调用关系:

服务提供者:暴露接口给其它微服务调用

服务消费者:调用其它微服务提供的接口

提供者与消费者角色其实是相对的

一个服务可以同时是服务提供者和服务消费者

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

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

  • 对于A调用B的业务而言:A是服务消费者,B是服务提供者

  • 对于B调用C的业务而言:B是服务消费者,C是服务提供者

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

相关推荐
wfsm2 天前
nacos和openfeign
springcloud
无心水2 天前
【分布式利器:腾讯TSF】11、腾讯TSF微服务框架深度对比:全面解析TSF vs Spring Cloud vs Dubbo vs Service Mesh
分布式·spring cloud·微服务·dubbo·springcloud·service mesh·分布式利器
sunnyday04264 天前
Spring Cloud Alibaba Sentinel 流量控制与熔断降级实战指南
spring boot·sentinel·springcloud
悟空码字6 天前
Spring Cloud 集成 Nacos,全面的配置中心与服务发现解决方案
java·nacos·springcloud·编程技术·后端开发
坐不住的爱码13 天前
Bootstrap和application.yml
springcloud
悟空码字13 天前
Spring Cloud Gateway实战,从零搭建API网关,构建高性能微服务统一入口
java·gateway·springcloud·编程技术·后端开发
没有bug.的程序员15 天前
Service Mesh 与 Spring Cloud 共存方案:双体系治理、平滑迁移与风险控制实战指南
云原生·springcloud·流量治理·混合架构·servicemesh·微服务迁移·技术演进
奥升新能源平台17 天前
奥升充电平台安全稳定体系构建
运维·安全·开源·springcloud
qq_1659016917 天前
spring-cloud读取Nacos上的配置
java·spring cloud·springcloud
无心水17 天前
【分布式利器:腾讯TSF】2、腾讯微服务框架TSF实战指南:Spring Boot零侵入接入与容器化部署全流程
java·spring boot·分布式·微服务·springcloud·分布式利器·腾讯tsf