从14年开始就陆续看到新浪微博RPC框架Motan的介绍,时隔两年后,微博团队终于宣布开源轻量级RPC框架Motan,项目地址:

https://github.com/weibocom/motan/

项目文档介绍比较详细,搭建开发环境非常简单,如果只是使用而不需要源码的话,只配置maven依赖项目即可,按照示例几分钟就可以搭建起一个Hello world。当然这也是官方介绍中的优点之一。

我们来扩展一下官方的示例,并测试一下集群式部署。首先创建一个maven项目

1 公共部分

pom.xml

 <dependencies><dependency><groupId>com.weibo</groupId><artifactId>motan-core</artifactId><version>0.0.1</version></dependency><dependency><groupId>com.weibo</groupId><artifactId>motan-transport-netty</artifactId><version>0.0.1</version></dependency><!-- only needed for spring-based features --><dependency><groupId>com.weibo</groupId><artifactId>motan-springsupport</artifactId><version>0.0.1</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.2.4.RELEASE</version></dependency><dependency><groupId>com.weibo</groupId><artifactId>motan-registry-zookeeper</artifactId><version>0.0.1</version></dependency></dependencies>

项目结构如图

User类,注意必须实现Serializable

public class User implements Serializable {private static final long serialVersionUID = 2925168737226033271L;public User(int id, String name) {this.id = id;this.name = name;}private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String toString() {return String.format("{id=%d,name=%s}", this.id, this.name);}
}

UserService

public interface UserService {public User find(int id);
}

2 服务器部分

UserServiceImpl

public class UserServiceImpl implements UserService {public User find(int id) {System.out.println(id + " invoked rpc service");return new User(id, "name" + id);}
}

motan_server.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:motan="http://api.weibo.com/schema/motan"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://api.weibo.com/schema/motan http://api.weibo.com/schema/motan.xsd"><motan:protocol name="motan" loadbalance="roundrobin" maxWorkerThread="500" minWorkerThread="20" /><bean id="serviceImpl" class="quickstart.UserServiceImpl" /><motan:registry regProtocol="zookeeper" name="my_zookeeper" address="127.0.0.1:2181"/><motan:service interface="quickstart.UserService" ref="serviceImpl" registry="my_zookeeper" export="8002" />
</beans>

Server.java

public class Server {public static void main(String[] args) throws InterruptedException {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:motan_server.xml");System.out.println("server start...");}
}

集群部署需要使用Zookeeper做注册中心

3 部署Zookeeper

以windows环境为例

下载地址 http://zookeeper.apache.org/

下载后得到gz包如zookeeper-3.4.8.tar.gz,解压到任意目录如d:\zookeeper-3.4.8

在zookeeper-3.4.8目录下建立data文件夹

进入zookeeper-3.4.8/conf目录,把zoo_sample.cfg重命名为zoo.cfg,并修改dataDir选项

dataDir=d:\\zookeeper-3.4.8\\data

进入zookeeper-3.4.8/bin目录,执行zkServer.cmd

运行Server.java测试,启动成功

4 部署多服务器实例

下面把服务器端部署两个实例,修改pom.xml,添加

<build><finalName>motan-examples</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version><configuration><archive><manifest><addClasspath>true</addClasspath><classpathPrefix>.</classpathPrefix><mainClass>quickstart.Server</mainClass></manifest></archive></configuration></plugin></plugins></build>

注意正确配置mainClass的类全路径

进入项目目录执行

mvn dependency:copy-dependencies

mvn clean package

把生成的可执行jar和依赖jar包复制到一起,并执行

java -jar motan-examples.jar

修改motan_server.xml中的export端口为8003,重复上面步骤再启动一个在8003端口上的实例

5 客户端部分

motan_client.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:motan="http://api.weibo.com/schema/motan"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://api.weibo.com/schema/motan http://api.weibo.com/schema/motan.xsd"><motan:protocol name="motan" haStrategy="failover" /><motan:registry regProtocol="zookeeper" name="my_zookeeper" address="127.0.0.1:2181"/><motan:referer id="remoteService" interface="quickstart.UserService" registry="my_zookeeper"/>
</beans>

Client.java

public class Client {public static void main(String[] args) throws InterruptedException {ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:motan_client.xml");final UserService service = (UserService) ctx.getBean("remoteService");final int SIZE = 100;final AtomicInteger atom = new AtomicInteger();ExecutorService exec = Executors.newFixedThreadPool(SIZE);for(int i = 0; i < SIZE; i++) {exec.execute(new Thread(){public void run() {User user = service.find(atom.addAndGet(1));System.out.println(user);}});}}
}

运行Client.java

从输出结果可以看出,客户端请求被分配到两个服务器实例中。

关闭其中一个服务器实例,重新运行客户端

因为Zookeeper处理服务器断开的消息有一定延时,一部分请求仍然被提交到已关闭的端口上,导致抛出异常。但是这里并没有按配置执行失败切换服务器的策略,是配置问题还是不支持网络拒绝连接的失败类型,限于时间关系,没有做更多测试,暂时打个问号。

6 总结

同是RPC框架,就不可避免的要和另一个优秀开源框架dubbo/dubbox比较

缺点:

1 功能较少,不支持跨语言调用

2 年轻,稳定性和可能出现的问题尚待检验

优点:

1 轻量级,开发和学习简单

2 年轻,有无限的发展可能性。dubbo因为原创团队的原因已经停止更新,motan能否后来居上,让我们拭目以待。

Dobbo的继任者?试用微博RPC框架Motan相关推荐

  1. 微博RPC框架Motan

    原文来自:http://blog.csdn.net/autfish/article/details/51374798 从14年开始就陆续看到新浪微博RPC框架Motan的介绍,时隔两年后,微博团队终于 ...

  2. 1、微博RPC框架Motan

    RPC概述 RPC:即Remote Procedure Call Protocol,翻译过来就是远程过程调用协议. 引用知乎(https://www.zhihu.com/question/255366 ...

  3. 微博开源框架Motan初体验

    前两天,我在开源中国的微信公众号看到新浪微博的轻量Rpc框架--Motan开源了.上网查了下,才得知这个Motan来头不小,支撑着新浪微博的千亿调用,曾经在2014年的春晚中有着千亿次的调用,对抗了春 ...

  4. motan学习笔记 一 微博轻量级RPC框架Motan

    前言 motan学习笔记 一 微博轻量级RPC框架Motan motan学习笔记 二 motan架构分析 motan学习笔记 三 motan Demo 分析 motan学习笔记 四 motan Dem ...

  5. 微博轻量级RPC框架Motan

    Motan 正式开源了,项目地址为https://github.com/weibocom/motan.微博技术团队希望未来能有更多优秀的开源人入驻,并进一步完善优化. 微博轻量级RPC框架Motan正 ...

  6. 搭建新浪RPC框架motan Demo

    motan是新浪微博开源的RPC框架,github官网是:https://github.com/weibocom/motan 今天就先搭建一个Hello world demo,本demo基于motan ...

  7. motan rpc java demo_轻量级RPC框架-motan

    四步完成NodeJS安装,配置和测试 四步完成NodeJS安装,配置和测试 NodeJS 官网地址: http://nodejs.org/ 第一步:在官网点击 ' INSTALL ',下载相应的版本( ...

  8. 支撑微博千亿调用的轻量级RPC框架:Motan

    随着微博容器化部署以及混合云平台的高速发展,RPC 在微服务化的进程中越来越重要,对 RPC 的需求也产生了一些变化.今天主要介绍一下微博 RPC 框架 Motan,以及为了更好的适应混合云部署所做的 ...

  9. 新浪微博新兵训练营系列课程——平台RPC框架介绍

    新浪微博新兵训练营系列课程--平台RPC框架介绍 课程大纲 1.RPC简介 1.1 什么是RPC 1.2 RPC与其他远程调用方式比较 2.Motan RPC框架 2.1 RPC服务框架 2.2 Mo ...

最新文章

  1. Apache Kafka源码分析 – Log Management
  2. 目标检测方法简介:RPN(Region Proposal Network) and SSD(Single Shot MultiBox Detector)
  3. c++计算eigen随笔(2)
  4. python文件读取方法read(size)的含义是_在Python中可使用read([size])来读取文件中的数据,如果参数size省略,则读取文件中的()。(4.0分)_学小易找答案...
  5. 用Dalvik指令集写个java类
  6. 腾讯副总裁程武取代吴文辉接管阅文集团 后者开盘涨近4%
  7. 吃了一辈子土豆,原来这么多吃法还治病,真要好好学学!
  8. 应用安全-浏览器安全-攻防
  9. PLSQL中的RECORD小例子
  10. Python 万能代码模版:数据可视化篇
  11. Avesta飞秒光纤激光器
  12. python sorted怎么排序_Python sorted排序方法怎么用
  13. 推荐top10的免费下载破解软件的网站
  14. 转载四代重歼的一片博文 - 漏斗子:“三大战役”完成 人民币国际化就登场
  15. ROM、RAM、DRAM、SRAM、SDRAM区别及特点
  16. 联想服务器硬盘启动设置方法,教你联想台式机bios设定硬盘启动方法
  17. EduSoho教育周报(0805-0811)
  18. mysql 随机函数
  19. 为什么使用对象指针而不是使用对象本身?
  20. html中background标签作用,CSS Background 属性详解

热门文章

  1. unity3d:ugui 长按按钮
  2. 2022最新网络安全行业前景分析,附学习路线图
  3. 关于python安装问题 0x80072f7d的解决方法
  4. Keras自定义损失函数出现:ValueError: Unknown loss function: focal_loss
  5. EDA软件—Cadence学习笔记分享(内含安装教程)
  6. P2P网络中的节点发现
  7. np.repeat函数
  8. 自动化运维平台搭建(一)
  9. Python字符串算法
  10. 模板解析原理,脱裤子放屁