Avro实现RPC
场景:一个客户端,一个服务端(创建两个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的更多相关文章
- Avro总结(RPC/序列化)
Avro(读音类似于[ævrə])是Hadoop的一个子项目,由Hadoop的创始人Doug Cutting(也是Lucene,Nutch等项目的创始人,膜拜)牵头开发,当前最新版本1.3.3.Avr ...
- 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; ...
- 【RPC】Thrift ICE 等 RPC 框架相关资料
RPC框架-Thrift-ICE Apache Thrift - Documentation Apache Thrift - Index of tutorial/ Apache Thrift - Ab ...
- Avro之一:Avro简介
一.引言 1. 简介 Avro是Hadoop中的一个子项目,也是Apache中一个独立的项目,Avro是一个基于二进制数据传输高性能的中间件.在Hadoop的其他项目中例如HBase(Ref)和Hiv ...
- Flume NG Getting Started(Flume NG 新手入门指南)
Flume NG Getting Started(Flume NG 新手入门指南)翻译 新手入门 Flume NG是什么? 有什么改变? 获得Flume NG 从源码构建 配置 flume-ng全局选 ...
- Flume-ng+Kafka+storm的学习笔记
Flume-ng Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统. Flume的文档可以看http://flume.apache.org/FlumeUserGuide.html ...
- 对于Netty的十一个疑问(转)
[说明]本文原载于码农 IO(manong.io)官方微信 developerWorks,转载.引用请注明出处及作者. 1.Netty 是什么? Netty 是一个基于 JAVA NIO 类库的异步通 ...
- 对于Netty的十一个疑问
[说明]本文原载于码农 IO(manong.io)官方微信 developerWorks,转载.引用请注明出处及作者. 1.Netty 是什么? Netty 是一个基于 JAVA NIO 类库的异步通 ...
- 新手入门:目前为止最透彻的的Netty高性能原理和框架架构解析
1.引言 Netty 是一个广受欢迎的异步事件驱动的Java开源网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端. 本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件 ...
随机推荐
- org.apache.ibatis.builder.IncompleteElementException: Could not find result map java.util.HashMap
这样的配置有问题吗? <select id="getFreightCollectManagementList" resultMap="java.util.HashM ...
- leetcode152
class Solution { public: int maxProduct(vector<int>& nums) { if(nums.empty()) ; ) ]; ]; // ...
- 远程桌面 把explorer关掉了
用Ctrl+Alt+End调出远程桌面的任务管理器.然后,运行explorer.exe即可重启该服务.
- Centos安装ffmpeg
yum install -y ffmpeg 使用上面的命令安装却出现以下问题: Google后发现缺少一些扩展: wget https://download1.rpmfusion.org/free/e ...
- 利用nginx添加账号密码验证
server { listen ; server_name xxx.com; location / { proxy_pass http://10.10.10.10:5601; proxy_redire ...
- SSM框架整合思想
-------------------siwuxie095 SSM 框架整合思想 1.SSM 框架,即 SpringMV ...
- python基础 ---- 使用pyCharm 调试
debug -- 为了分析程序的异常 单步调试 1.设置断点 2.debug.启动 3.监控变量
- [leetcode]52. N-Queens II N皇后
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...
- cnetos 下 rar 解压
第一步:http://www.rarlab.com/rar/rarlinux-x64-5.3.0.tar.gz 下载 文件 或 wget http://www.rarlab.com/rar/rarli ...
- Java 7 使用TWR(Try-with-resources)完成文件copy
try-with-resources语句是声明了一个或多个资源的try语句块.在java中资源作为一个对象,在程序完成后必须关闭.try-with-resources语句确保每个资源在语句结束时关闭. ...