Dubbo学习一:Duboo了解

Apache Dubbo是一款高性能的java RPC框架,是阿里巴巴公司开源的一个高性能,轻量级的开源RPC框架,可以和Spring进行无缝集成对接。

Dubbo提供了三大核心能力

  • 面向接口的远程方法调用
  • 智能容错和负载均衡
  • 服务的自动注册和发现

什么是RPC

RPC全称为remote procedure call,即远程过程调用

例,有两台服务其A和B,上面分别部署着一个应用,A服务器想要调用B服务器的方法,由于两个服务器不在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。

RPC并不是一种技术,而是指整个网络远程调用的过程

在面对对象的编程语言中,以远程过程调用即是远程方法调用

java中RPC框架比较多,常见的有RIM,Hessian,gRPC(谷歌),bRPC(百度),Dubbo等,对于RPC框架,其核心就是通讯和序列化

常见RPC框架

RIM

RIM(remote method invocation)是java原生的远程调用,RIM采用JRMP(Java RemoteMessageing Protocol)作为通信协议,可以认为是纯java版本的分布式远程调用解决方案

RMI核心概念

 

RMI执行步骤

  1. 创建远程接口,并且继承java,rmi.Remote接口
  2. 实现远程接口,并且继承UnicastRemoteObject
  3. 创建服务程序,createRegistry()方法注册远程对象
  4. 创建客户端程序(获取注册信息,调用接口方法)

代码实现

服务端:

import java.rmi.Remote;
import java.rmi.RemoteException;
/*
* 创建远程接口,并且继承java,rmi.Remote接口
* */

public interface UserServer  extends Remote {
    public String sayHellow(String name) throws RemoteException;
}

------------------------------分割线------------------------------------------



import com.lf.server.UserServer;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

/*
* 实现远程接口,并且继承UnicastRemoteObject
* */

public class UserServerImpl extends UnicastRemoteObject implements UserServer {

    //必须重写无参构造,为了抛出RemoteException异常
    public UserServerImpl() throws RemoteException {
    }

    public String sayHellow(String name) throws RemoteException  {
        return "name:"+name+"成功调用了服务端服务";
    }
}

-----------------------------------分割线-----------------------------------------

import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

/*
* 创建服务程序,createRegistry()方法注册远程对象
* */
public class ServerMain {

    public  static  void main(String [] args) throws RemoteException, AlreadyBoundException, MalformedURLException {
         //启动RMI注册服务,指定端口号
        LocateRegistry.createRegistry(8888);
        //创建要被访问的远程对象的实例
        UserServer userServer=new UserServerImpl();
        //把远程对象实例注册到RMI注册服务器上
        Naming.bind("rmi://localhost:8888/UserServer",userServer);
        System.out.println("服务端启动中..............");
    }
}

启动

客户端

import java.net.MalformedURLException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import static java.rmi.Naming.*;

/**
 * 创建客户端程序(获取注册信息,调用接口方法)
 */
public class clientMain {
    public static void main(String []args) throws RemoteException, NotBoundException, MalformedURLException {
        //要调用的远端对象
        //注意客户端创建的userserver对象的包必须和服务端包路径相同
        UserServer userServer= (UserServer) lookup("rmi://localhost:8888/UserServer");
        String name=userServer.sayHellow("客户端");
        System.out.println(name);
    }
}

--------------------------------分割线--------------------------------------------------

import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * 注意客户端创建的userserver对象的包必须和服务端包路径相同
 */

public interface UserServer extends Remote {

    public String sayHellow(String name) throws RemoteException;
}

测试结果:

 

Hessian

Hessian使用C/S模式,基于HTTP协议传输,使用Hessian二进制系列化

-------------------代码看资源:https://download.csdn.net/download/xiaoxiaobai250/12034767-------------------

 
 
其他RPC框架
  • ThriftFaceBook开源RPC框架,典型的CS架构,支持跨语言,客户端和服务端可以使用不同的语言开发,thrift通过IDL(Interface Description Language)来关联客户端和服务端。
  • gRPC google
  • dubbo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值