Dobbo的继任者?试用微博RPC框架Motan
来源:互联网 发布:剑三萝莉脸型数据网盘 编辑:程序博客网 时间:2024/05/22 19:25
从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.xsd http://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.xsd http://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
- Dobbo的继任者?试用微博RPC框架Motan
- Dobbo的继任者?试用微博RPC框架Motan
- motan学习笔记 一 微博轻量级RPC框架Motan
- 支撑微博千亿调用的轻量级RPC框架:Motan
- 支撑微博千亿调用的轻量级RPC框架:Motan
- 微博轻量级RPC框架Motan
- 微博轻量级RPC框架Motan
- 微博RPC框架Motan
- 微博轻量级RPC框架Motan正式开源:支撑千亿调用
- 搭建新浪RPC框架motan Demo
- 微博RPC框架motan入门笔记
- 分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较
- 分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较
- 分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较
- 分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较
- 分布式服务框架学习笔记6 Motan试用
- thrift,gRPC,rpcx,motan,dubbox等rpc框架对比
- 【BZOJ3873】[Ahoi2014]拼图【分类讨论】【暴力】
- 从Google与eBay的系统架构学到的经验
- 一些常用的jQuery插件
- 原根
- OkHttp介绍
- Dobbo的继任者?试用微博RPC框架Motan
- Servlet——Session(2)之简单应用
- 身份证号码校验
- iOS开发之计算文字宽度
- 计算广告
- grid软件安装目录权限被修改引起登陆ASM出现ORA-12547 TNSlost contact
- 使用HttpUrlConnection进行post请求上传文件
- 经典的两个数互换的程序——更好的理解指针!!!
- Bootstrap多层模态框如何嵌套?