• RPC(以及dubbo和zookeeper)


    Remote Procedure Call  远程过程调用

    与之相对的就是本地过程调用(相当于洗碗直接把碗放进洗碗机,打开开关就可以洗了)

    远程过程调用就是你不在家,打了电话回家,让你老公去洗碗

    在一台电脑中,一个A方法调用了B方法,就是本地调用

    方法A在一台电脑上,方法B在另一台电脑里面,此时A方法去调用B方法,就是远程调用

    RPC可以使得就像调用本地方法一样去调用远程方法

    下面过程就展示了客户端的客户函数怎么去调用服务器端的服务器函数的过程:

     RPC里两个核心模块就是通讯和序列化

    甲主机的A方法调用乙主机的B方法

    我们把乙主机的B方法就叫服务,甲主机的A方法调用这个服务,乙主机提供服务

    现在通过dubbo和zookeeper实现这个Rpc远程调用

    zookeeper是注册中心,服务提供者将服务注册到注册中心去,服务调用者去注册中心中取出服务调用

    dubbo帮助实现这个注册和调用服务的过程

    有两个应用程序,第一个应用程序叫provider-server(提供服务者,被调用服务的)

    第二个应用程序consumer-server(调用服务的消费者程序)

    启动zookeeper

    然后两个应用程序中都要引入dubbo和zookeeper的依赖:

      导入dubbo和zookeeper的依赖:


        org.apache.dubbo
        dubbo-spring-boot-starter
        3.1.1

    引入zookeeper麻烦一些:

    接下来就看服务提供者和服务调用者各自的程序长什么样:

    服务提供者端:

    服务提供者程序:

    public interface  TicketService

    {

       public String getTicket();

    }

    import org.apache.dubbo.config.annotation.Service;
    import org.springframework.stereotype.Component;
    

    @Service //注意这个Service注解是dubbo包里面的Service

    @Component 

    public class TicketServiceImpl implements TicketService

    {

       @Override

        public String getTicket()

        {

             return "测试成功";

         }

    }

    服务提供者端 在application.properties文件中进行配置:

    server.port=8801


    #服务应用的名字
    dubbo.application.name=provider-server

    #注册中心地址:本机的2181端口
    dubbo.registry.address=zookeeper://127.0.0.1:2181

    #扫描provider-service这个应用下的这个service包,把里面的服务注册到注册中心去
    dubbo.scan.base-packages=com.test.service

    服务调用者端:

    服务调用者端程序:

    @Service

    public interface UserService

    {

       //去注册中心拿到服务

      @Reference

      TicketService ticketService;

       String result=ticketService.getTicket();

         

        System.out.println(result);

      }

    }

    服务调用者端 在application.properties文件中进行配置:

    server.port=8802

    #消费者应用需要暴露自己的名字

    dubbo.application.name=consumer-server

    #注册中心的地址

    dubbo.registry.address=zookeeper://127.0.0.1:2181

    有了远程调用,就可以实现微服务了

    微服务就是把一个项目拆分成很多个小项目

    利用rpc就可以实现项目与项目之间的通信

  • 相关阅读:
    时序动作定位 | ActionFormer: 使用Transformers动作时刻
    Android Camera性能分析 - 第18讲 预览Buffer Path详解
    Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 第7章 Vue.js高级进阶 7.2 vue-cli目录结构
    postgres配置参数生效方式和优先级
    【游戏引擎Easy2D】场景和文本,不同的输出方式
    排队时延与流量强度
    VSCode中Prettier插件&依赖安装及冲突解决
    数商云采购商城价格管理应用场景介绍 | 数字化采购助力汽配行业企业降本增效
    Java校招120道面试题目合集
    【vue3+ts】项目初始化
  • 原文地址:https://blog.csdn.net/weixin_47414034/article/details/127580348