先说AOP
说到注入,大家就会想起来IoC和AOP,确实如些,这一讲中,我们通过unity来实现对thrift插件的动态注入,事实上,这个功能在以后的项目中经常要用到,比如,你将一些功能分发到指定服务器,而这些服务器的功能是可以动态调整的,每台服务器的插件功能都不相同,这时,如果你有新的插件开发好后,如果不使用AOP的思想,那简直就是灾难!试想,有100个客户端的程序,你将会把新的程序和插件一个个的重新安装到100个客户端电脑上,这是无可厚非的,但如果有了AOP思想,那么,客户端的程序可以实现根据配置文件动态去加载BIN下的DLL的功能,这是吸引人的,呵呵。
再说Thrift容器
Thrift的动态插件需要有一个统一的入口,即所有thrift插件都装到这个入口容器中,事实上,这就是AOP方法拦截的思想,将这些插件的执行控制在某个方法的执行之前或者之后,这是一种巧妙的设计,它解决了不断生产出来的插件的装载问题。
Thrift容器设计,核心代码
Thrift容器有着自己的特色,它需要有一个端口,一个传输协议,和一批动态被加载的Handle,即处理程序(或者叫“插件),我们来看一个代码:
/// <summary> /// Thrift容器规范 /// </summary> public interface IThriftHandle { /// <summary> /// 处理程序 /// </summary> void Handle(); }
/// <summary> /// 为thrift提供的插件容器 /// </summary> public class ThriftHandle : IThriftHandle { /// <summary> /// 插件处理器的集合,每当一个插件被激活, /// 在拦截Hanle()之前,都会前自己的Processor /// 添加到MultiplexedProcessor中 /// </summary> public readonly static TMultiplexedProcessor MultiplexedProcessor = new TMultiplexedProcessor(); public void Handle() { //远程登陆调用 new Thread(() => { var serverTransport = new TServerSocket(9800); var server1 = new TThreadedServer(MultiplexedProcessor, serverTransport); Console.WriteLine("开启扩展服务..."); server1.Serve(); }).Start(); }
OK,我们看到了容器代码之后,对于具体的thrift插件,只要调用MultiplexedProcessor属性的register方法即可完成插件的注册了,而这部分的代码都是在DLL项目里完成的,即一个插件,一个DLL,或者一组类型的插件,一个DLL,这也符合面向对象的原则,即每个插件的职责都是单一的。
看个thrift插件的例子,一个远程命令调用的例子:
/// <summary> /// 远程命令拦截器 /// </summary> public class RemoteCommandBehavior : Project.InterceptionBehaviors.InterceptionBase { public override IMethodReturn Invoke( IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext) { Console.WriteLine("远程命令调用开始..."); //注册thrift插件到thrift容器 ThriftHandle.MultiplexedProcessor.RegisterProcessor("RemoteCommandHandler", new RemoteCommandService.Processor(new RemoteCommandHandler())); return getNext().Invoke(input, getNext); } }
RemoteCommandBehavior所对应的Handle处理程序我就省略了,呵呵。
看一下AOP Thrift插件的图示
相关推荐
Thrift的整体架构分为四个主要层次: 1. **Transport层**:这是最基础的一层,提供了一个网络读写操作的抽象层,包括打开、关闭、读取、写入、刷新、接受和监听等操作。此外,Transport层还支持不同的I/O模型,如...
thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, ...
此文件为自己在Mac电脑上写的thrift的demo,使用maven 管理了小程序,并用thrift生成了源码,其中对thrift生成的源码,把override注销了,其他的没处理,如果感兴趣参考博客:...
- 安装Thrift dissector:可以从Wireshark的官方插件页面或者GitHub等第三方源获取Thrift dissector的最新版本,按照指示进行安装。 - 重新启动Wireshark:安装插件后,重启Wireshark,Thrift协议应该已经在解码器...
使用thrift、websocket在javascript和c++之间建立rpc调用机制。 如果要使用js+html来写界面,cpp来写底层业务逻辑,这就非常有用了。 当然,如果底层不用cpp来写,也可以参考本代码的js对thrift的rpc包装。
maven-thrift-plugin-0.1.11.jar
在分布式系统和微服务架构中,Thrift被广泛用于构建服务之间的通信机制。 ### Thrift安装步骤 1. **下载Thrift源码** 首先,你需要从Thrift的官方网站或者通过Git克隆其源码仓库获取最新版本的Thrift。在本例中,...
Thrift是一种高效的、跨语言的服务框架,最初由Facebook开发,现在是Apache的顶级项目。它提供了强大的代码生成工具,可以从接口定义文件(IDL)生成多种编程语言的客户端和服务端代码,使得不同语言之间可以轻松地...
在微服务架构中,Thrift因其轻量级和高性能的特性,常被用作服务间通信的工具。它可以降低系统间的耦合度,提高服务的可扩展性。 十、最佳实践 在使用Thrift时,应注意以下几点: 1. 尽量减少数据结构的复杂性,...
Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年设计并发布,其目的是为了在各种编程语言之间提供高效的、轻量...不过,这也需要开发者对Thrift的原理和Dubbo的架构有深入的理解,才能充分发挥两者的优势。
欢迎使用 Maven Thrift 插件 Maven Thrift Plugin 用于编译你项目的 thrift 文件。 注意:确保已安装 Thrift。 有关 Thrift 安装指南,请参阅: 目标概述 generate-java绑定到 generate-sources 阶段,用于编译 ...
- Maven-Thrift-Server项目通常依赖于`maven-thrift-plugin`,这个插件允许在Maven构建流程中自动生成Thrift代码。 - Maven插件简化了Thrift服务的构建,将编译Thrift文件集成到常规的构建生命周期中,使得项目...
在IT行业中,Thrift是一种高性能、可扩展的跨语言服务开发框架,由Facebook开源,用于构建分布式服务。它通过定义一种中间表示(IDL,接口定义语言)来描述服务,然后自动生成不同编程语言的代码,使得不同语言之间...
Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年创建,并于2008年贡献给了Apache基金会。它通过定义一种中间语言(IDL,Interface Definition Language)来描述服务接口,允许开发者在不同的编程语言之间...
Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年创建,现在是Apache软件基金会的项目。它的主要目标是通过定义一种中间语言(IDL,Interface Definition Language)来简化不同编程语言之间的通信,使得...
而Thrift则是一种开源的软件框架,用于构建可伸缩的服务,它支持多种编程语言,包括C++,并且允许不同语言之间进行高效的数据交换。在这个“C++(Qt)下的thrift的使用示例”中,我们将探讨如何在Qt项目中集成和使用...
### Netty+Thrift 实现高并发高性能的关键技术解析 #### 一、引言 在当前互联网技术高速发展的背景下,高性能、高并发的服务框架成为众多企业和开发者追求的目标。Netty作为一款高性能、异步事件驱动的网络应用...
Thrift 环境配置方法 Thrift 是一个跨语言的 RPC 框架,由 Facebook 开发,用于建立高性能的服务之间的远程过程调用。为了使用 Thrift,需要配置好相关的环境,这篇文章将介绍 Thrift 环境配置的方法。 Thrift ...
Golang与Thrift框架结合可以实现跨语言的RPC调用,这在分布式系统架构中非常有用。Golang(通常称为Go)是一种编译型、静态类型的编程语言,由Google开发。它简洁、高效,并且擅长处理并发任务,特别适合开发服务器...
1. **微服务架构**:在微服务架构中,Thrift-Laravel可以帮助将大型应用拆分为独立的服务,通过Thrift进行通信,降低了服务间的耦合。 2. **高性能通信**:Thrift-Laravel利用Thrift的高效序列化和反序列化机制,...