场景:一个客户端,一个服务端(创建两个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. 版本控制(svn、Git)环境创建

    1.SVN 2.Git last 版本控制工具应该具备的功能: 协同修改: 数据备份: 版本管理: 权限控制: 历史记录:查看修改人.修改时间.修改内容…… 分支管理:开发团队在工作过程中多条产品线同 ...

  2. 网络编程 tftp下载文件的编程

    一.代码 操作码 功能 1 读请求,即下载 2 写请求,即上传 3 表示数据包,即DATA 4 确认码,即ACK 5 错误 from socket import * import struct s=s ...

  3. java.io.UnsupportedEncodingException

    启动项目抛错: java.io.UnsupportedEncodingException: 1 at java.lang.StringCoding.decode(StringCoding.java:1 ...

  4. nginx 返回数据不完整

    当nginx 代理解析大量数据流时,会把数据先放在自己的缓冲区,然后一并发给客户端 一次请求的数据量很大, 则会有一部分数据会被忽略掉 前端解析数据会有问题 致使页面白屏 nginx 返回数据不完整的 ...

  5. centos密码策略

    centos7密码策略 https://blog.csdn.net/qq_36896749/article/details/80264280 centos7设置密码规则 https://blog.cs ...

  6. Swift 通过运行时获取属性名列表

    import UIKit //必须要有@objcMembers修饰符,否则获取到的成员属性为0 @objcMembers class Person: NSObject { var name: Stri ...

  7. leetcode75

    class Solution { public: void sortColors(vector<int>& nums) { sort(nums.begin(), nums.end( ...

  8. python-反射案例讲解

    login.py#!/usr/bin/dev python# coding:utf-8 def index(): print u'欢迎访问xx网站首页' def login(): print u'登录 ...

  9. 无法启动 nexus 服务,错误1067:进程意外终止。java环境变量设置技巧。

    Nexus启动失败 wrapper.log记载: 无支持版本 51.0,版本51.0指的是Java1.7. 分析: nexus版本为2.14.8,适用JRE版本为1.7. 已配置JAVA_HOME为1 ...

  10. Apache配置默认主页

    Apache配置默认主页 进入Apache的conf目录 打开httpd.conf文件输入: 在文件末位添加: <Directory "F:/www_php/blog_com/my_b ...