Rest协议框架-bboss rpc

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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。
restful风格rpc服务协议rest,定义的语法如下:

(rest::a/b/c/d)/rpc.test

协议头:rest

节点路由组:a/b/c/d,以/分割的服务器路由节点列表,执行顺序由左到右

服务id:rpc.test,配置在aop框架中的一般业务组件

Rest协议服务调用示意图如下:

img_47b2aedf709becb70b7f9eb6db4349ae.jpe
系统将逐步解析a/b/c这三个节点的地址:

a,b,c分别代表远程服务器地址

系统根据a,b,c的顺序来路由远程服务调用,首先将远程请求发送到a服务器,然后由a路由到b服务器,再由b路由到c服务器

当c处理完请求后再将结果返回给b,b再返回给a。这样就完成了一层restful风格的远程服务调用过程。



a,b,c分别代表服务器的标识符,这个标识符可以对应于一个真正的物理服务器地址,他们之间的映射关系可以在一个注册中心中维护

每个服务器都会有这样一个注册中心用来存放在本机注册的标识符和物理服务器地址的映射关系。



aop框架提供了一个接口来获取映射关系:

org.frameworkset.spi.remote.restful.RestfulServiceConvertor

接口方法为:

public String convert(String restfuluddi,String serviceid);

其中参数restfuluddi对应于服务器标识符a,b,c,参数serviceid为请求的远程服务id

经过该方法转换的地址:可以为以下格式:

"(" + protocol + "::" +  uri + ")/" + serviceid + "?user=" + user + "&password=" + password;

其中的protocol,uri,user,password就是根据服务器标识符从注册中心中查询出的信息。



以下是一个简单的接口实现:

public class RestfulServiceConvertorImplTest implements RestfulServiceConvertor

{

 

    public String convert(String restfuluddi, String serviceid)

    {

        if(restfuluddi.equals("a"))

        {

            String uri = "172.16.17.216:1187";

            String user = "admin";

            String password = "123456";

            String protocol = "mina";

            String returl = "(" + protocol + "::" +  uri + ")/" + serviceid + "?user=" + user + "&password=" + password;

           

            return returl;

        }

        else if(restfuluddi.equals("b"))

        {

            String uri = "172.16.17.216:1187";

            String user = "admin";

            String password = "123456";

            String protocol = "mina";

            String returl = "(" + protocol + "::" +  uri + ")/" + serviceid + "?user=" + user + "&password=" + password;

           

            return returl;

        }

        else if(restfuluddi.equals("c"))

        {

            String uri = "172.16.17.216:1187";

            String user = "admin";

            String password = "123456";

            String protocol = "mina";

            String returl = "(" + protocol + "::" +  uri + ")/" + serviceid + "?user=" + user + "&password=" + password;

            

            return returl;

        }

       

        else if(restfuluddi.equals("d"))

        {

            String uri = "172.16.17.216:1187";

            String user = "admin";

            String password = "123456";

            String protocol = "mina";

            String returl = "(" + protocol + "::" +  uri + ")/" + serviceid + "?user=" + user + "&password=" + password;

           

            return returl;

        }

        else

        {

            String uri = "172.16.17.216:1187";

            String user = "admin";

            String password = "123456";

            String protocol = "jgroup";

            String returl = "(" + protocol + "::" +  uri + ")/" + serviceid + "?user=" + user + "&password=" + password;

           

            return returl;

        }

           

    }

 

}


RestfulServiceConvertor接口的实现类被配置在manager-rpc-service.xml文件中:

    
  <!--

           restful风格地址转换器

        -->

       <property name="rpc.restful.convertor" singlable="true"

                        class="org.frameworkset.spi.serviceid.RestfulServiceConvertorImplTest"/>


开发人员可以实现自己的地址转换器,直接替换rpc.restful.convertor配置即可。

                  

再看看一个简单restful风格的服务调用示例:

    
  RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(rest::a/b/c/d)/rpc.test");

        //循环执行10次服务调用

        for(int i = 0; i < 10; i ++)

        {

            try

            {

                System.out.println("testInf.getCount():" + i + " = "+testInf.getCount());

            }

            catch(Exception e)

            {

                e.printStackTrace();

               

            }

        }



补充说明:

框架在解析rest风格的地址时,能够自动识别节点对应的地址是否是本地地址,假设存在以下地址:

    (rest::a/b/c)/rpc.test

如果框架在解析地址时,发现a是本地地址,将继续解析下一个地址b,直到碰到一个远程地址时才执行远程服务调用,如果全部是本地地址,那么整个rest风格的远程服务调用就是一个本地调用。

rest风格地址中节点对应的物理地址的协议可以是aop框架目前提供的协议中的任何一种:jms,webservice,mina,jgroups



rest风格地址后面带的认证参数将被忽略。

Rest协议只支持单播调用,不支持多播调用。
目录
相关文章
|
24天前
|
自然语言处理 负载均衡 API
gRPC 一种现代、开源、高性能的远程过程调用 (RPC) 可以在任何地方运行的框架
gRPC 是一种现代开源高性能远程过程调用(RPC)框架,支持多种编程语言,可在任何环境中运行。它通过高效的连接方式,支持负载平衡、跟踪、健康检查和身份验证,适用于微服务架构、移动设备和浏览器客户端连接后端服务等场景。gRPC 使用 Protocol Buffers 作为接口定义语言,支持四种服务方法:一元 RPC、服务器流式处理、客户端流式处理和双向流式处理。
|
3月前
|
Dubbo 网络协议 Java
RPC框架:一文带你搞懂RPC
这篇文章全面介绍了RPC(远程过程调用)的概念、原理和应用场景,解释了RPC如何工作以及为什么在分布式系统中广泛使用,并探讨了几种常用的RPC框架如Thrift、gRPC、Dubbo和Spring Cloud,同时详细阐述了RPC调用流程和实现透明化远程服务调用的关键技术,包括动态代理和消息的编码解码过程。
RPC框架:一文带你搞懂RPC
|
2月前
|
XML 负载均衡 监控
分布式-dubbo-简易版的RPC框架
分布式-dubbo-简易版的RPC框架
|
3月前
|
API 开发者 微服务
RPC和 HTTP协议
【8月更文挑战第8天】RPC(远程过程调用)使程序能像本地调用般请求远程服务,简化网络通信细节。其优点包括高效的数据传输及严格的类型定义,适合微服务间的高效通信。HTTP(超文本传输协议)则是用于万维网数据传输的通用协议,以文本为基础,易于理解和调试,并被广泛支持。两者各有侧重,RPC偏高速服务通信,HTTP则更适用于多样化的网络场景。选择时需根据具体需求决定。
|
3月前
|
XML 存储 JSON
(十二)探索高性能通信与RPC框架基石:Json、ProtoBuf、Hessian序列化详解
如今这个分布式风靡的时代,网络通信技术,是每位技术人员必须掌握的技能,因为无论是哪种分布式技术,都离不开心跳、选举、节点感知、数据同步……等机制,而究其根本,这些技术的本质都是网络间的数据交互。正因如此,想要构建一个高性能的分布式组件/系统,不得不思考一个问题:怎么才能让数据传输的速度更快?
|
5月前
|
存储 缓存 Linux
【实战指南】嵌入式RPC框架设计实践:六大核心类构建高效RPC框架
在先前的文章基础上,本文讨论如何通过分层封装提升一个针对嵌入式Linux的RPC框架的易用性。设计包括自动服务注册、高性能通信、泛型序列化和简洁API。框架分为6个关键类:BindingHub、SharedRingBuffer、Parcel、Binder、IBinder和BindInterface。BindingHub负责服务注册,SharedRingBuffer实现高效数据传输,Parcel处理序列化,而Binder和IBinder分别用于服务端和客户端交互。BindInterface提供简单的初始化接口,简化应用集成。测试案例展示了客户端和服务端的交互,验证了RPC功能的有效性。
412 6
|
4月前
|
分布式计算 负载均衡 数据安全/隐私保护
什么是RPC?有哪些RPC框架?
RPC(Remote Procedure Call,远程过程调用)是一种允许运行在一台计算机上的程序调用另一台计算机上子程序的技术。这种技术屏蔽了底层的网络通信细节,使得程序间的远程通信如同本地调用一样简单。RPC机制使得开发者能够构建分布式计算系统,其中不同的组件可以分布在不同的计算机上,但它们之间可以像在同一台机器上一样相互调用。
160 8
|
4月前
|
网络协议 Dubbo Java
什么是RPC?RPC和HTTP对比?RPC有什么缺点?市面上常用的RPC框架?
选择合适的RPC框架和通信协议,对于构建高效、稳定的分布式系统至关重要。开发者需要根据自己的业务需求和系统架构,综合考虑各种因素,做出适宜的技术选型。
461 1
|
4月前
|
负载均衡 Java
使用Java实现RPC框架
使用Java实现RPC框架
|
4月前
|
负载均衡 Java
下一篇
无影云桌面