bboss rpc使用介绍

简介: bboss 3.4及后续版本在原有的rpc功能基础上做了非常大的改进,支持丰富的协议簇(http/netty/mina/jms/webservice/rmi/jgroups/restful)。
bboss 3.4及后续版本在原有的rpc功能基础上做了非常大的改进,支持丰富的协议簇(http/netty/mina/jms/webservice/rmi/jgroups/restful)。bboss rpc客户端可以类似于webservice和rmi的客户端方式对bboss ioc容器、mvc容器中配置的任何组件发起远程调用。为了支撑这个功能,3.4版中新增了组件:
org.frameworkset.spi.ClientProxyContext

该组件提供了以下能力而在本地无需服务组件的实现类和配置文件,只需接口以及接口依赖的相关的类即可:
1.对mvc容器中配置的组件的远程调用
2.对其他类型容器中配置的组件的远程调用

三个主要的接口如下:
1.获取MVC容器中的服务组件调用代理

/**
  * 获取MVC容器中的服务组件调用代理
* @param <T> 泛型类型
* @param name  服务组件访问地址
* @param type  组件接口类型,使用泛型来实现接口的自动类型转换
* @return 服务组件调用代理
*/
public static <T> T getWebMVCClientBean(String name,Class<T> type)

2.获取ApplicationContext类型容器中的服务组件调用代理

/**
  * 获取ApplicationContext类型容器中的服务组件调用代理
* @param <T> 泛型类型
* @param context 容器标识,一般是容器初始化的配置文件路径
* @param name  服务组件访问地址
* @param type  组件接口类型,使用泛型来实现接口的自动类型转换
* @return 服务组件调用代理
*/
public static <T> T getApplicationClientBean(String context,String name,Class<T> type)

3.获取DefaultApplicationContext类型容器中的服务组件调用代理

/**
* 获取DefaultApplicationContext类型容器中的服务组件调用代理
* @param <T> 泛型类型
* @param context 容器标识,一般是容器初始化的配置文件路径
* @param name  服务组件访问地址
* @param type  组件接口类型,使用泛型来实现接口的自动类型转换
* @return 服务组件调用代理
*/
public static <T> T getSimpleClientBean(String context,String name,Class<T> type)

每种接口的使用实例如下,全部基于http协议实现:

1.获取mvc容器中组件的远程服务调用接口,mvc容器由服务端mvc框架自动初始化
ClientInf mvcinf = ClientProxyContext.getWebMVCClientBean(
				"(http::localhost:8080/bboss-mvc/http.rpc)" +
				"/client.proxy.demo?user=admin&password=123456",
				ClientInf.class);
mvcinf.helloworld("aaaa,多多");


2.获取DefaultApplicationContext类型容器中的服务组件调用代理
//服务器端容器org/frameworkset/spi/ws/webserivce-modules.xml必须是以下方式创建
//		DefaultApplicationContext context = DefaultApplicationContext.getApplicationContext("org/frameworkset/spi/ws/webserivce-modules.xml");
		ClientInf simpleinf = ClientProxyContext.getSimpleClientBean("org/frameworkset/spi/ws/webserivce-modules.xml",//容器标识
		                                                            "(http::localhost:8080/bboss-mvc/http.rpc)/client.proxy.simpledemo?user=admin&password=123456",//服务组件地址 
		                                                            ClientInf.class);//服务接口
simpleinf.helloworld("aaaa,多多");


3.获取服务器端默认容器中组件的远程服务调用接口
ClientInf defaultinf = ClientProxyContext.getApplicationClientBean( "(http::localhost:8080/bboss-mvc/http.rpc)" +
				"/client.proxy.simpledemo?user=admin&password=123456", ClientInf.class);
defaultinf.helloworld("aaaa,多多");


4.http协议补充说明
服务端必须在web.xml文件中配置以下servlet
<servlet>
  <display-name>RPCHttpServLet</display-name>
  <servlet-name>RPCHttpServLet</servlet-name>
  <servlet-class>org.frameworkset.spi.remote.http.RPCHttpServLet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>RPCHttpServLet</servlet-name>
  <url-pattern>*.rpc</url-pattern>
 </servlet-mapping>


5.http协议串说明
http::localhost:8080/bboss-mvc/http.rpc
协议部分 ip部分 port部分 应用上下文  匹配rpcservlet串
我们用()将上面的url串括起来,然后再添加服务端组件标识和认证参数user和password:
/client.proxy.simpledemo?user=admin&password=123456
client.proxy.simpledemo为服务端组件,?user=admin&password=123456中的user参数就是认证账户,password参数就是认证口令,如果服务开启了认证机制,就需要在客户端设置这两个参数,反之无需配置。

我们可以在服务组件方法中通过org.frameworkset.spi.security.SecurityContext获取客户端传递过来的账户信息,静态方法:
SecurityContext securityContext = SecurityContext.getSecurityContext();
String user = securityContext.getUser();
String password = securityContext.getPassword();


6.通过配置文件来配置客户端调用组件的实例
可以通组件工厂模式来在aop配置文件中配置一个客户端代理组件,我们这里是以http协议为列,从mvc容器中获取服务client.proxy.demo的客户端调用实例。

先看配置文件:
org/frameworkset/spi/remote/clientproxy/consumer.xml
consumer.xml文件的内容如下:
<properties>
	<property name="clientservice" factory-class="org.frameworkset.spi.ClientProxyContext" factory-method="getWebMVCClientBean">
		<construction>
			<property name="servicaddress" value="(http::localhost:8080/bboss-mvc/http.rpc)/client.proxy.demo?user=admin&password=123456"/>		
			<property name="serviceclass" value="org.frameworkset.spi.remote.clientproxy.ClientInf"/>		
		</construction>
	</property>	
</properties>


consumer.xm中配置了名称为clientservice的组件,该组件实例通过代理类org.frameworkset.spi.ClientProxyContext的静态方法getWebMVCClientBean来创建,通过构造器construction指定了getWebMVCClientBean方法需要的两个参数:
参数一 服务地址信息
(http::localhost:8080/bboss-mvc/http.rpc)/client.proxy.demo?user=admin&password=123456
参数二 服务接口类信息
org.frameworkset.spi.remote.clientproxy.ClientInf

这样我们就可以加载consumer.xml文件创建一个DefaultApplicationContext类型的容器,然后获取到组件的客户端调用实例,代码如下:
//定义容器对象
		DefaultApplicationContext context = DefaultApplicationContext.getApplicationContext("org/frameworkset/spi/remote/clientproxy/consumer.xml");
		//获取客户端组件实例
		ClientInf client = context.getTBeanObject("clientservice", ClientInf.class);
		//发起远程方法调用
		client.helloworld("aaa");


通过这种方式,我们就可以把之前通过代码调用ClientProxyContext创建客户端代理转换为通过aop容器管理创建客户端调用代理模式,这两种方式是等价的。

服务配置:
<property name="mysfirstwsservice" 	enablerpc="true" class="org.frameworkset.web.ws.WSServiceImpl"/>


理论上bboss ioc容器中配置的组件都可以作为远程服务调用,但是必须通过enablerpc属性开启为远程服务,对应的业务组件才能作为远程服务发布,
enablerpc="true" 开启
enablerpc="false" 禁用



7.总结
本文介绍了通过ClientProxyContext来获取bboss中三种不同类型容器(mvc容器、独立容器、默认容器)中配置的组件客户端调用代理的方法,并以http协议为列介绍了使用方法;介绍了客户端如何传递认证信息的方法;介绍了协议串的配置方法和含义;同时也对比了通过代码直接创建代理和通过aop配置文件创建代理的两种方式,实际情况可以任意选择。



目录
相关文章
|
网络架构
Rest协议框架-bboss rpc
restful风格rpc服务协议rest,定义的语法如下: (rest::a/b/c/d)/rpc.test 协议头:rest 节点路由组:a/b/c/d,以/分割的服务器路由节点列表,执行顺序由左到右 服务id:rpc.test,配置在aop框架中的一般业务组件 Rest协议服务调用示意图如下: 系统将逐步解析a/b/c这三个节点的地址: a,b,c分别代表远程服务器地址 系统根据a,b,c的顺序来路由远程服务调用,首先将远程请求发送到a服务器,然后由a路由到b服务器,再由b路由到c服务器 当c处理完请求后再将结果返回给b,b再返回给a。
1109 0
发布bbossgroups-2.0-RC补丁-bboss rpc classcast and timeout exception patch.zip
------------------------------------------------------------------ 2010-07-23 ------------------------------------------------------------------ ...
844 0
哈哈,终于在bboss aop中实现了rpc(远程服务调用)功能
哈哈,终于在bboss aop中实现了rpc(远程服务调用)功能,并成功应用到系统管理平台的集群功能中。 另外,通过bboss aop框架新增的远程管理框架,终于将系统管理平台中的事件管理框架独立成为一个单独的子项目,可以独立使用了,而且对事件管理框架进行了以下的改进: 本地事务处理做了一些完善 远程事件支持组播事件和点对点事件传播 经过测试后,即将发布bboss aop 1.0.6版本,bboss event 1.0.1版本。
856 0
|
10月前
|
负载均衡 Dubbo Java
Dubbo 3.x:探索阿里巴巴的开源RPC框架新技术
随着微服务架构的兴起,远程过程调用(RPC)框架成为了关键组件。Dubbo,作为阿里巴巴的开源RPC框架,已经演进到了3.x版本,带来了许多新特性和技术改进。本文将探讨Dubbo 3.x中的一些最新技术,包括服务注册与发现、负载均衡、服务治理等,并通过代码示例展示其使用方式。
515 9
|
10月前
|
设计模式 负载均衡 网络协议
【分布式技术专题】「分布式技术架构」实践见真知,手把手教你如何实现一个属于自己的RPC框架(架构技术引导篇)
【分布式技术专题】「分布式技术架构」实践见真知,手把手教你如何实现一个属于自己的RPC框架(架构技术引导篇)
399 0
|
10月前
|
Dubbo Java 应用服务中间件
Rpc编程系列文章第三篇:Hessian RPC一个老的RPC框架
Rpc编程系列文章第三篇:Hessian RPC一个老的RPC框架
|
4月前
|
自然语言处理 负载均衡 API
gRPC 一种现代、开源、高性能的远程过程调用 (RPC) 可以在任何地方运行的框架
gRPC 是一种现代开源高性能远程过程调用(RPC)框架,支持多种编程语言,可在任何环境中运行。它通过高效的连接方式,支持负载平衡、跟踪、健康检查和身份验证,适用于微服务架构、移动设备和浏览器客户端连接后端服务等场景。gRPC 使用 Protocol Buffers 作为接口定义语言,支持四种服务方法:一元 RPC、服务器流式处理、客户端流式处理和双向流式处理。
|
7月前
|
Dubbo 网络协议 Java
RPC框架:一文带你搞懂RPC
这篇文章全面介绍了RPC(远程过程调用)的概念、原理和应用场景,解释了RPC如何工作以及为什么在分布式系统中广泛使用,并探讨了几种常用的RPC框架如Thrift、gRPC、Dubbo和Spring Cloud,同时详细阐述了RPC调用流程和实现透明化远程服务调用的关键技术,包括动态代理和消息的编码解码过程。
RPC框架:一文带你搞懂RPC
|
9月前
|
存储 缓存 Linux
【实战指南】嵌入式RPC框架设计实践:六大核心类构建高效RPC框架
在先前的文章基础上,本文讨论如何通过分层封装提升一个针对嵌入式Linux的RPC框架的易用性。设计包括自动服务注册、高性能通信、泛型序列化和简洁API。框架分为6个关键类:BindingHub、SharedRingBuffer、Parcel、Binder、IBinder和BindInterface。BindingHub负责服务注册,SharedRingBuffer实现高效数据传输,Parcel处理序列化,而Binder和IBinder分别用于服务端和客户端交互。BindInterface提供简单的初始化接口,简化应用集成。测试案例展示了客户端和服务端的交互,验证了RPC功能的有效性。
525 12
|
6月前
|
XML 负载均衡 监控
分布式-dubbo-简易版的RPC框架
分布式-dubbo-简易版的RPC框架