场景:一个客户端,一个服务端(创建两个avro工程)。客户端向服务端发送数据,服务端根据算法算出结果,返回给客户端。

Http主外,RPC主内。(解决分布式环境下,节点间的数据通信或远程过程调用)

实现步骤

1.创建两个maven工程

2.引入pom文件

3.更改maven工程结构(src/main/avro)

4.创建模式文件(协议文件)

5.根据avro插件生成文件对应的接口类

6.利用API实现rpc

具体实现:

1、 创建两个maven项目,修改jdk版本和编译的版本  1.5->1.7

2、 拷贝pom.xml文件

3、 创建资源文件夹src/main/avro

4、 创建模式文件(协议文件),在客户端项目和服务器端项目都要有一份协议文件。

@namespace("rpc.service")

protocol AddService{

int add(int x,int y);

}

5、 选择项目右键->Run->Maven generate-sources

6、 在服务器端的项目中添加一个实现类

public class AddServiceImpl implements AddService {

public int add(int x, int y) throws AvroRemoteException {

return x+y;

}

}

7、 在服务器端项目中,开发Server类

package cn.tedu.avro_server;

import java.net.InetSocketAddress;

import org.apache.avro.ipc.NettyServer;

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

import rpc.service.AddService;

import rpc.service.AddServiceImpl;

public class Server {

public static void main(String[] args) {

NettyServer server = new NettyServer(

new SpecificResponder(AddService.class,

new AddServiceImpl()),

new InetSocketAddress(6666));

}

}

8、 在客户端项目中开发Client类

public class Client {

public static void main(String[] args) throws Exception {

//指定rpc服务器端的ip地址和端口号

Transceiver transciever = new NettyTransceiver(

new InetSocketAddress("127.0.0.1", 6666));

//获取rpc服务器端接口实现类的对象

AddService proxy = SpecificRequestor.getClient(

AddService.class, transciever);

//调用对象的方法

int result = proxy.add(3, 5);

System.out.println(result);

}

}

Avro实现RPC的更多相关文章

  1. Avro总结(RPC/序列化)

    Avro(读音类似于[ævrə])是Hadoop的一个子项目,由Hadoop的创始人Doug Cutting(也是Lucene,Nutch等项目的创始人,膜拜)牵头开发,当前最新版本1.3.3.Avr ...

  2. Apache Avro# 1.8.2 Specification (Avro 1.8.2规范)二

    h5 { text-indent: 0.71cm; margin-top: 0.49cm; margin-bottom: 0.51cm; direction: ltr; color: #000000; ...

  3. 【RPC】Thrift ICE 等 RPC 框架相关资料

    RPC框架-Thrift-ICE Apache Thrift - Documentation Apache Thrift - Index of tutorial/ Apache Thrift - Ab ...

  4. Avro之一:Avro简介

    一.引言 1. 简介 Avro是Hadoop中的一个子项目,也是Apache中一个独立的项目,Avro是一个基于二进制数据传输高性能的中间件.在Hadoop的其他项目中例如HBase(Ref)和Hiv ...

  5. Flume NG Getting Started(Flume NG 新手入门指南)

    Flume NG Getting Started(Flume NG 新手入门指南)翻译 新手入门 Flume NG是什么? 有什么改变? 获得Flume NG 从源码构建 配置 flume-ng全局选 ...

  6. Flume-ng+Kafka+storm的学习笔记

    Flume-ng Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统. Flume的文档可以看http://flume.apache.org/FlumeUserGuide.html ...

  7. 对于Netty的十一个疑问(转)

    [说明]本文原载于码农 IO(manong.io)官方微信 developerWorks,转载.引用请注明出处及作者. 1.Netty 是什么? Netty 是一个基于 JAVA NIO 类库的异步通 ...

  8. 对于Netty的十一个疑问

    [说明]本文原载于码农 IO(manong.io)官方微信 developerWorks,转载.引用请注明出处及作者. 1.Netty 是什么? Netty 是一个基于 JAVA NIO 类库的异步通 ...

  9. 新手入门:目前为止最透彻的的Netty高性能原理和框架架构解析

    1.引言 Netty 是一个广受欢迎的异步事件驱动的Java开源网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端. 本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件 ...

随机推荐

  1. 面向连接的tcp 编程

    from socket import * serverSocket=socket(AF_INET,SOCK_STREAM) serverSocket.bind(("",8899)) ...

  2. Java 身份证号码验证

    身份证号码验证 1.号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码 2.地址码(前 ...

  3. Xeon Phi 《协处理器高性能编程指南》随书代码整理 part 1

    ▶ 第三章,逐步优化了一个二维卷积计算的过程 ● 基准代码 #include <stdio.h> #include <stdlib.h> #include <string ...

  4. ATS配置自定义日志

    修改records.config,开启日志自定义功能 更改日志目录,默认日志存放在/var/log/trafficserver: CONFIG proxy.config.log.logfile_dir ...

  5. python大法好——异常

    ---恢复内容开始--- Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Pyth ...

  6. Innodb锁相关总结

    一.InnoDB共有七种类型的锁: (1)共享/排它锁(Shared and Exclusive Locks) (2)意向锁(Intention Locks) (3)插入意向锁(Insert Inte ...

  7. eclipse的Git忽略某些不需要提交的文件

    Eclipse切换到Navigator视图,找到.gitignore文件(如果是maven项目,一般找作为modules的项目的.gitignore文件),添加内容: .settings .proje ...

  8. springmvc shiro UnauthorizedException 异常解决方案

    springMVC 整合 shiro 时,配置了当访问某个URL没有权限时的配置处理: <!-- 通过unauthorizedUrl指定没有权限操作时跳转页面 --><propert ...

  9. aptana怎么显示空格 tab和回车等

  10. datatables插件提示Cannot reinitialise DataTable的解决办法

    这个错误是由于重新设置数据源,又没有将原来的数据清空导致的. 网上有很多解决方案,试了都不管用. 最后找到一种方法,将原来的table销毁,再初始化. 方法是在datatable初始化的时候加入属性 ...