java 构建avro rpc_avro-远程过程调用(RPC)

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

RPC

be02562757862ab139f73f0e3ab690a3.png

HTTP

7c7e4f4491490968e910d5289f7e643f.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):定义的方法

生成代码

ca01569795907fb1ffffe94ea2053370.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);

}

}

服务端输入:

cbe0582c7e50eba1729eca92ca91696c.png

客户端输出:

69e610f54ca6c514aa263a83945db2d5.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值