RPC框架--missian框架
Missian简介
注:(创始者不明,应用于sina下面的公司(爱问))
Missian是一个构建于Mina和Hessian基础上的异步RPC框架,能够兼容HTTP协议和TCP协议,能和Hessian互通兼容,它提供了:
1、一个基于mina的高性能服务器,具备mina所有的一切优秀基因。Missian服务器能够在一个端口之上兼容tcp和http协议格式,因 此开启了Missian服务之后,即可以用Missian客户端调用(同步/异步,HTTP/TCP),也可以供Hessian客户端调用。
2、一个基于阻塞式的传统Socket的同步客户端,同样支持HTTP和TCP,它可以使用HTTP或TCP去访问Missian服务,同时也可以 使用HTTP方式去访问Hessian服务。您可以选择使用短连接的方式,也可以使用长连接(这时强制要求使用连接池,但Missian提供了一个基于 apache commons-pool的Socket连接池实现)。可以根据具体情况决定使用方式。
3、一个基于Mina NioSocketConnector的异步客户端。默认使用一个4个线程的线程池来处理回调,但开发者也可以指定线程数,或者传入一个存在的线程池。异 步客户端只能调用Missian服务,而不能够调用Hessian服务(正在思考如何实现)。同样,协议可以是HTTP或者TCP。
Mina: 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框,和netty框架类似;
Hessian:采用的是二进制协议,所以它很适合于发送二进制数据的RPC框架,基于http的同步框架
missian主要实现
/**
* api: 接口
* url:远程调用RPC服务器的地址
* loader :对象
**/
public Object create(Class<?> api, String url,
ClassLoader loader) {
if (api == null)
throw new NullPointerException(
"api must not be null for HessianProxyFactory.create()");
InvocationHandler handler = null;
TransportURL u = new TransportURL(url);
handler = new SyncMissianProxy(u, this); // 通过 hessian 远程调度 初始化 hander return Proxy.newProxyInstance(loader, new Class[] { api, // 通过动态代理实现接口
HessianRemoteObject.class }, handler); }
missian整合spring搭建使用
1、引入jar包
<dependency>
<groupId>missian</groupId>
<artifactId>missian-wenwo</artifactId> <!-- 此包在私服暂时找不到,sina下的框架 -->
<version>0.4.4</version>
<exclusions>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-context</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
2、搭建服务器 beans-context-missian.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd"> <bean
class="org.springframework.beans.factory.config.CustomEditorConfigurer ">
<property name="customEditors">
<map>
<entry key="java.net.SocketAddress">
<bean class="org.apache.mina.integration.beans.InetSocketAddressEditor" />
</entry>
</map>
</property>
</bean>
<!-- The IoHandler implementation -->
<bean id="minaHandler" class="com.missian.server.handler.MissianHandler">
<constructor-arg>
<bean class="com.missian.common.beanlocate.SpringLocator" />
</constructor-arg>
</bean> <!-- the IoFilters -->
<bean id="executorFilter" class="org.apache.mina.filter.executor.ExecutorFilter" />
<bean id="codecFilter" class="org.apache.mina.filter.codec.ProtocolCodecFilter">
<constructor-arg>
<bean class="com.missian.server.codec.MissianCodecFactory " />
</constructor-arg>
</bean>
<bean id="loggingFilter" class="org.apache.mina.filter.logging.LoggingFilter">
<property name="messageReceivedLogLevel" value="DEBUG" />
<property name="messageSentLogLevel" value="DEBUG" />
<property name="sessionCreatedLogLevel" value="DEBUG" />
<property name="sessionClosedLogLevel" value="DEBUG" />
<property name="sessionIdleLogLevel" value="DEBUG" />
<property name="sessionOpenedLogLevel" value="DEBUG" />
</bean>
<!-- The non-SSL filter chain. -->
<bean id="filterChainBuilder"
class="org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder">
<property name="filters">
<map>
<entry key="codecFilter" value-ref="codecFilter" />
<entry key="executor" value-ref="executorFilter" />
<entry key="loggingFilter" value-ref="loggingFilter" />
</map>
</property>
</bean>
<!-- The IoAcceptor which binds to port 1235 server side 对外开放端口 1235 -->
<bean id="minaAcceptor" class="org.apache.mina.transport.socket.nio.NioSocketAcceptor"
init-method="bind" destroy-method="unbind">
<property name="defaultLocalAddress" value=":1235" />
<property name="handler" ref="minaHandler" />
<property name="reuseAddress" value="true" />
<property name="filterChainBuilder" ref="filterChainBuilder" />
</bean> <bean id="missianFactory" class="com.missian.client.sync.SyncMissianProxyFactory">
<constructor-arg index="0">
<bean class="com.missian.client.NetworkConfig">
<property name="readTimeout" value="60000"/>
<property name="connectTimeout" value="60000"/>
<property name="receiveBufferSize" value="2048"/>
</bean>
</constructor-arg>
</bean> </beans>
3、搭建客户端beans-context-missianclient.xml,可以访问其它的missan服务器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="weiboBigNodeFacade" factory-bean="missianFactory" factory-method="create">
<constructor-arg index="0" value="com.wenwo.weiboproxy.service.WeiboBigNodeFacade" type="java.lang.Class" /> <!-- 要调用的接口 ,此接口必须在missan服务器中实现了,获取交给了spring管理-->
<constructor-arg index="1" value="tcp://127.0.0.1:1235/weiboBigNodeFacade" /> <!-- 调用的服务器和接口 -->
</bean> </beans>
4、使用RPC

这就是使用rpc的过程
RPC框架--missian框架的更多相关文章
- 【原创】自己动手实现RPC服务调用框架
自己动手实现rpc服务调用框架 本文利用java自带的socket编程实现了一个简单的rpc调用框架,由两个工程组成分别名为battercake-provider(服务提供者).battercake- ...
- 自己动手实现RPC服务调用框架
转自:http://www.cnblogs.com/rjzheng/p/8971629.html#3977269 担心后面忘了,先转了,后面借鉴实现一下RPC -------------------- ...
- 介绍开源的.net通信框架NetworkComms框架 源码分析
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 售价249英镑 我曾经花了 ...
- web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例
Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...
- 那些年读过的书《Java并发编程实战》和《Java并发编程的艺术》三、任务执行框架—Executor框架小结
<Java并发编程实战>和<Java并发编程的艺术> Executor框架小结 1.在线程中如何执行任务 (1)任务执行目标: 在正常负载情况下,服务器应用 ...
- Django框架----Web框架本质
Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...
- 框架----Web框架本质
一.Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:ut ...
- day06-初识Vuetify框架UI框架和使用域名访问本地项目
本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一) ...
- RPC简介及框架选择
简单介绍RPC协议及常见框架,对比传统restful api和RPC方式的优缺点.常见RPC框架,gRPC及序列化方式Protobuf等 HTTP协议 http协议是基于tcp协议的,tcp协议是流式 ...
随机推荐
- python编程之变量和简单的数据结构
一.变量 前面我们用python输出了“hello world!” 这次我们在前面加入一行,定义一个变量,然后修改第二行. 添加变量导致Python解释器需要做更多工作.处理第1行代码时,它将文本“H ...
- 偏差(Bias)和方差(Variance)——机器学习中的模型选择zz
模型性能的度量 在监督学习中,已知样本 ,要求拟合出一个模型(函数),其预测值与样本实际值的误差最小. 考虑到样本数据其实是采样,并不是真实值本身,假设真实模型(函数)是,则采样值,其中代表噪音,其均 ...
- Git和Eclipse的使用、上传、部署
https://www.jianshu.com/p/812717c740a2 https://blog.csdn.net/lynn_Kun/article/details/73740400 https ...
- 生成图形化html报告
生成图形化html报告: 1.从cmd 进入执行测试文件 2.执行该命令:jmeter -n -t <test JMX file> -l <test log file> -e ...
- c语言构建哈希表
/*哈希查找 *哈希函数的构造方法常用的有5种.分别是: *数字分析法 *平方取中法 *分段叠加 *伪随机数 *除留取余法 *这里面除留取余法比较常用 *避免哈希冲突常用的方法有4种: *开放定址法( ...
- 公用表表达式 (CTE)、递归、所有子节点、sqlserver
指定临时命名的结果集,这些结果集称为公用表表达式 (CTE).公用表表达式可以包括对自身的引用.这种表达式称为递归公用表表达式. 对于递归公用表达式来说,实现原理也是相同的,同样需要在语句中定义两部分 ...
- 第十一章 DNS服务器管理与配置
1.如何在WindowsServer 2008 系统中使用IIS进行多站点配置与管理? 1)运行“开始”–“程序”–“管理工具”–“服务器管理器”打开: 选择“WEB服务器(IIS)”,注意:首次安装 ...
- 6-使用requests库封装类处理get/post请求
1.request安装 1)pip安装,直接pip install requests 2)下载离线包安装,加压后,命令行进入路径,执行python setup.py install 2.创建工程 注意 ...
- grep 笔记
-a :将 binary 文件以 text 文件的方式搜寻数据-c :计算找到 '搜寻字符串' 的次数-i :忽略大小写的不同,所以大小写视为相同-n :顺便输出行号-v :反向选择,亦即显示出没有 ...
- EBS API及接口清单
https://www.cnblogs.com/lizicheng/p/9521742.html 模块 应用场景 类型 API/接口 AP 付款核销 API ap_pay_invoice_pkg.ap ...