在分布式系统中, 远程调用是最基础也是最重要的基石. 历史上, 曾经先后出现过 CORBA,RMI,EJB,webService 等技术和规范, 在服务化以及微服务日趋流行的今天, 更多的被广泛使用的是包括 gRPC,Finagle, 以及国内的 Dubbo 为代表的轻量级框架.
由于这些框架多半与服务注册中心, 配置中心等配套设施结合使用, 用来作为系统分布式服务化的场景, 因此这类框架又被统称为服务框架. 本文将以 Dubbo 为例, 介绍如何快速开发一个 Dubbo 应用.
背景
本文将以 Dubbo 为例, 介绍如何快速开发一个 Dubbo 应用. 为了便于读者理解:
首先会介绍一下传统的 RMI 的基本概念
然后比较下现代的 RPC 框架与 RMI 的区别
再基于 Dubbo 提供的 API 展示最基本的 Dubbo 应用如何开发
最后介绍如何通过 start.dubbo.io 快速搭建 Dubbo 的脚手架工程
Java RMI 简介
Java RMI (Remote Method Invocation) 远程方法调用, 能够让客户端像使用本地调用一样调用服务端 Java 虚拟机中的对象方法. RMI 是面向对象语言领域对 RPC (Remote Procedure Call)的完善, 用户无需依靠 IDL 的帮助来完成分布式调用, 而是通过依赖接口这种更简单自然的方式.
Java RMI 工作原理
一个典型的 RMI 调用如下图所示:
服务端向 RMI 注册服务绑定自己的地址;
客户端通过 RMI 注册服务获取目标地址;
客户端调用本地的 Stub 对象上的方法, 和调用本地对象上的方法一致;
本地存根对象将调用信息打包, 通过网络发送到服务端;
服务端的 Skeleton 对象收到网络请求之后, 将调用信息解包;
然后找到真正的服务对象发起调用, 并将返回结果打包通过网络发送回客户端.
- 2018-05-28 16:59:38.072 INFO 59943 --- [ main] a.b.d.c.e.WelcomeLogoApplicationListener :
- :: Dubbo Spring Boot (v0.1.0) : https://github.com/dubbo/dubbo-spring-boot-project
- :: Dubbo (v2.0.1) : https://github.com/alibaba/dubbo
- :: Google group : http://groups.google.com/group/dubbo
- ...
- 2018-05-28 16:59:39.624 INFO 59943 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 1.746 seconds (JVM running for 2.963)
来源: http://zhuanlan.51cto.com/art/201806/576528.htm