avro-远程过程调用(RPC)

论坛 期权论坛 脚本     
匿名技术用户   2021-1-3 19:44   11   0

RPC-远程过程调用,即本地调用网络另一端机器上对象的方法,以前接触过通过httpclient,jsonpon等方式调用远程服务,这两种方式都需要一个应用服务器容器,比如tomcat来运行远程的服务。RPC调用就像调用本地方法一样,不需要容器来帮忙。

RPC

190820_eGAD_3049601.png

HTTP

191034_LLl9_3049601.png

AVRO-RPC是基于NIO的NETTY网络通信框架实现的,使用步骤:

编写avdl文件

@namespace("com.jv.avro")
protocol AddService{
import schema "user.avsc";
int add(int x , int y);
void parseUser(com.jv.avro.User user);
}

namespace:命名空间

protocol:声明AddService为一个协议

import:导入模式文件,还可以导入avpr,avdl文件

int add(int x,int y):定义的方法

生成代码

184427_Fz2O_3049601.png

测试代码:

服务端

package com.jv.test;

import java.net.InetSocketAddress;

import org.apache.avro.AvroRemoteException;
import org.apache.avro.ipc.NettyServer;
import org.apache.avro.ipc.specific.SpecificResponder;

import com.jv.avro.AddService;
import com.jv.avro.User;

public class TestRPCServer {
 
 public static void main(String[] args) {
  NettyServer ns = new NettyServer(
    new SpecificResponder(AddService.class,new ServerImpl()),
    new InetSocketAddress(9999)
    );
  //ns.start();
  System.out.println("服务端已启动");
 }

}


class ServerImpl implements AddService{

 @Override
 public int add(int x, int y) throws AvroRemoteException {
  return x+y;
 }

 @Override
 public Void parseUser(User user) throws AvroRemoteException {
  System.out.println(user);
  return null;
 }
}

客户端

package com.jv.test;

import java.io.IOException;
import java.net.InetSocketAddress;

import org.apache.avro.ipc.NettyTransceiver;
import org.apache.avro.ipc.specific.SpecificRequestor;

import com.jv.avro.AddService;
import com.jv.avro.User;

public class TestRPCClient {
 public static void main(String[] args) throws IOException {
  NettyTransceiver client = new NettyTransceiver(new InetSocketAddress("127.0.0.1",9999));
  AddService proxy = SpecificRequestor.getClient(AddService.class, client);
  int result = proxy.add(2, 3);
  System.out.println("客户端接收到结果:" + result);
  
  User user = new User("Messi",30,"巴塞罗那");
  proxy.parseUser(user);
 }
}

服务端输入:

190032_YjTi_3049601.png

客户端输出:

190054_iJIn_3049601.png

转载于:https://my.oschina.net/u/3049601/blog/1809766

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP