微服务_rpc

微服务

一、概述

什么是微服务

微服务是分布式架构的一种解决方案,系统平台架构通常分为两种:一:单体架构 二:分布式架构

  • 单体架构:所有业务代码都写在一个项目下,业务之间可以互相调用(ioc、创建对象等方式)

    优点:

    架构简单,易于理解,方便部署

    缺点:

    代码不方便维护,耦合度太高

  • 分布式架构;

    优点:

    分布式架构极大地对业务和代码进行了解耦,易于维护

    缺点:

    部署困难,架构难度大

微服务能干什么

微服务用于解决分布式架构,为分布式架构提供了一种很好的解决方案

怎么用微服务

微服务是一套完整的解决方案,其中有 :

  • 服务集群(将系统拆分成一个一个的粒度很小的服务后进行集群)

  • 对于每一个服务都要观察它的健康状态等,需要一个注册中心

  • 并且每一个服务都是用不同的数据源,不同的框架,不同的工具,配置信息也不同,所以也需要一个记录配置信息的配置中心

  • 用户进行访问时,需要一个服务网关进行身份验证和分配路由(告诉用户 服务都在哪里)

  • 服务与服务之间的通信通过传统rpc方式性能开销 内存开销都比较大,我们就需要一个消息中间件,进行异步传递消息,起到通知的作用,这样通知完不需要等待

  • 最后数据库也要进行分布式 集群(数据量太大)

对于微服务,我们划分服务时要尽可能的将粒度压缩,保证单一职责

设计中还要达到面向服务的效果,对外暴露接口

自治,就是 独立部署 自定义配置 数据也是自己的

隔离性强,不能其中一个服务挂了,其他服务也跟着挂了

rpc是什么

rpc即远程调用方式,服务与服务之间ip 端口都不同,所以需要一个相同调用的方式来传递消息,单体架构中,业务与业务之间调用方式一帮通过ioc注入,直接调用实例的方法来获取数据,对于分布式架构就不能这么做了

rpc就为我们提供了一种方法,就是通过java后端发起http请求(就是通过url方式调用接口)

二、远程调动实例

需求:

写两个服务,订单服务,用户服务,REST风格访问

订单服务:8080端口,对外暴露接口 http://localhost:8080/order/{orderId},访问接口得到订单数据

图示:


image-20220312171557856.png

用户服务:8081端口:对外暴露接口 http://localhost:8081/user/{userId]},访问接口得到用户数据

图示:


image-20220312171447219.png

两个服务分别使用自己的数据库,现在需要查询订单反馈的JSON数据中要级联用户的数据

代码:

在配置类中 注册RestTemplate

@MapperScan("com.geekrose.order.mapper")
@SpringBootApplication
public class OrderApplication {

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

//    向spring容器里注入一个RestTemplate对象
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

在业务层 获取订单数据(发送http请求)

@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

        String url = "http://localhost:8081/user/" + order.getUserId();

        User user = restTemplate.getForObject(url, User.class);

        order.setUser(user);

        // 4.返回
        return order;
    }
}

实现效果:

图示:

image-20220312171832007.png

你可能感兴趣的:(微服务_rpc)