Dobbo---分布式系统通信方式

这篇具有很好参考价值的文章主要介绍了Dobbo---分布式系统通信方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

分布式系统通信方式

1. RMI

RMI ( Remote Method Invocation 远程方法调用)
Dobbo---分布式系统通信方式,dubbo,dubbo,rpc

图1.1 客户端-服务端通信方式

客户端将要调用的方法及参数,打包为辅助对象,通过网络socket,发送给服务端辅助对象。服务端接收后,会进行解包,找出真正被调用的方法,然后将执行结果,依次再返回回去。服务端辅助对象进行打包,然后客户端辅助对象进行解包,结果返回给真正的调用者。

RMI 通信实现案例

Dobbo---分布式系统通信方式,dubbo,dubbo,rpc

1-2项目文件结构图
  1. 创建一个maven项目
  2. 创建一个HelloService接口
// 1. 接口本身继承Remote
// 2. 被调用的方式也要抛出相关的异常
public interface HelloService extends Remote {
    //底层需要经过网络通信,是有风险的,所以需要抛出RemoteException
    String sayHello(String msg) throws RemoteException;
}

  1. 创建一个HelloService实现类HelloServiceImpl
//1. 需要继承远程对象类 UnicastRemoteObject
//2. 由于此对象的参数和返回值都需要在网络上传输,所以需要可序列化 鼠标右键 Generate... ==> SerialVersionUID
public class HelloServiceImpl extends UnicastRemoteObject implements HelloService {


    //alt + insert
    private static final long serialVersionUID = -6444636358785164250L;



    //UnicastRemoteObject的构造函数抛出了异常,所以子类需要重写
    protected HelloServiceImpl() throws RemoteException {
    }

    public String sayHello(String msg) throws RemoteException {
        System.out.println("客户端返回的信息:" +msg);
        return "你想说的是这个::" +msg+"?";
    }
}


  1. 创建一个服务端

/**
 * 暴露服务
 * 提供可被调用的端口
 *
 */
public class RMIServer {

    public static void main(String[] args) {

        try {
            //通过本地中心注册
            LocateRegistry.createRegistry(9090);
            //注册具体实现类到通信地址下
            HelloService helloService = new HelloServiceImpl();
            Naming.bind("rmi://127.0.0.1/RMIServer",helloService);
            System.out.println("rmi服务端启动成功");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }


}
  1. 创建一个客户端
/**
 * 调用客户端RMI
 */
public class RMIClient {
    public static void main(String[] args) {

        HelloService helloService = null;

        try {
            helloService = (HelloService) Naming.lookup("rmi://127.0.0.1:9090/RMIServer");
            String result = helloService.sayHello("hello demo ");
            System.out.println("客户端接收结果为:  " + result);
        } catch (NotBoundException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}

  1. 先启动服务端再启动客户端

Dobbo---分布式系统通信方式,dubbo,dubbo,rpc

图1.3 服务端-客户端通信结果

2. RPC

Dobbo---分布式系统通信方式,dubbo,dubbo,rpc

图2-1 RPC通信过程
  • LPC = Local Procedure Call 本地过程调用
    本地过程调用(LPC)LPC用在多任务操作系统中,使得同时运行的任务能互相会话。
  • RPC = Remote Procedure Call 远程过程调用
    特指一种隐藏了过程调用时实际通信细节的IPC方法。

RPC真正的目的,是像调用本地方法一样去调用远程方法,而且不需要关心方法部署在哪里,这样才能够解耦服务。
简单说,RPC就是从一台机器通过参数传递的方式,调用另一台机器上的方法,并得到返回结果。

常用RPC框架

1) Dubbo,阿里开发,基于Spring和Netty,是当前使用最广泛的RPC框架
2) brpc,百度开发,“baidu-rpc”,支持多种协议,性能优良
3) grpc,谷歌开发,基于Netty,在人工智能领域有广泛应用,服务于tensorflow的底层通信
4) Thrift,脸书开发,已开源给apache,有一定的应用范围文章来源地址https://www.toymoban.com/news/detail-797685.html

到了这里,关于Dobbo---分布式系统通信方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 聊聊分布式架构04——RPC通信原理

    目录 RPC通信的基本原理 RPC结构 手撸简陋版RPC 知识点梳理 1.Socket套接字通信机制 2.通信过程的序列化与反序列化 3.动态代理 4.反射 思维流程梳理 码起来 服务端时序图 服务端—Api与Provider模块 客户端时序图 RPC通信的基本原理 RPC(Remote Procedure Call)是一种远程过程调用协议,

    2024年02月07日
    浏览(26)
  • RPC分布式网络通信框架(二)—— moduo网络解析

    网络部分,包括寻找rpc服务主机,发起rpc调用请求和响应rpc调用结果,使用muduo网络和zookeeper 服务配置中心 (专门做服务发现) 其中MprpcApplication类负责框架的一些初始化操作,注意去除类拷贝构造和移动构造函数(实现单例模式)。其中项目还构建了MprpcConfig类负责读取服

    2024年02月17日
    浏览(37)
  • RPC分布式网络通信框架(一)—— protobuf的使用

    常见序列化和反序列化协议有XML、JSON、protobuf,相比于其他protobuf更有优势: 1、protobuf是二进制存储的,xml和json都是文本存储的。故protobuf占用带宽较低 2、protobuf不需要存储额外的信息。 json如何存储数据?键值对。例:Name:”zhang san”, pwd: “12345”。 protobuf存储数据的方式

    2024年02月16日
    浏览(42)
  • RPC分布式网络通信框架(三)—— 服务配置中心Zookeeper模块

    分布式系统存在的问题: 为了支持高并发,每个客户端都保存了一份服务提供者的 列表 。但是如果 列表 有更新,想要得到最新的URL列表(rpc服务的ip和端口号),必须要手动更新配置文件,很不方便。 如图所示,实例3挂掉了,但是 列表 并没有得到更新。 故需要动态的更

    2024年02月15日
    浏览(39)
  • 基于Dubbo分布式网上售票系统

    民航售票是一个高度依赖信息业的行业。但在机票销售的管理和规范这方面上存在着很多各种各样的问题。例如订票是客运行业中的一个最基本的业务,表面上看,它只是机票站业务的一个简单的部分,但是它涉及到管理与客户服务等多方面,关系到民航公司能否正常运作。

    2024年02月16日
    浏览(27)
  • 分布式系统面试全集通第一篇(dubbo+redis+zookeeper----分布式+CAP+BASE+分布式事务+分布式锁)

    什么是分布式 一个系统各组件分别部署在不同服务器。彼此通过网络通信和协调的系统。 也可以指多个不同组件分布在网络上互相协作,比如说电商网站 也可以一个组件的多个副本组成集群,互相协作如同一个组件,比如数据存储服务中为了数据不丢失而采取的多个服务备

    2024年04月11日
    浏览(38)
  • 分布式通信方式

      分布式通信是指在分布式系统中,不同节点之间进行消息传递和交互的方式。   以下是常见的分布式通信方式:   使用消息队列作为中间件,节点之间通过发送和接收消息来实现通信。消息队列提供了异步、解耦和可靠性的通信机制,常见的消息队列系统包括Rabb

    2024年02月15日
    浏览(24)
  • 基于Dubbo分布式仓库管理系统设计与实现

    现如今,互联网的发展速度是人们有目共睹的,它的迅速发展从源头上改变了全世界对于管理的方式以及管理方法,从上世纪九十年代以来,我国各种单位和许多部门就在思考能否依靠互联网来对信息管理进行优化。虽然在以前,想让仓库管理和互联网相互结合存在许多方面

    2024年02月11日
    浏览(33)
  • 【DDD分布式系统学习笔记】RPC调用以及系统初步搭建

    modelVersion: 模型版本,指定POM模型的版本,目前使用的是Maven 4.0.0版本。 groupId: 项目的组织标识符,通常是组织的域名倒序。在这里是 cn.itedus.lottery。 artifactId: 项目的唯一标识符,通常是项目的名称。在这里是 Lottery。 packaging: 项目的打包方式,这里是 pom,表示这是一个聚合

    2024年01月18日
    浏览(38)
  • 基于Dubbo分布式高校学籍管理系统设计与实现

    生活节奏日益加快,人们普遍追求的更高的效率和收益,计算机算得上是推动人类社会发展的一项重要工具,其已经渗透到了人们生活中息息相关的各个领域。其中也包括的学校,学校里人手一台的电脑、手机让我们离信息化社会并不遥远,网络社交也贯穿每位大学生的日常

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包