用Spring.Services整合 thrift0.9.2生成的wcf中间代码-复杂的架构带来简单的代码和高可维护性
最近一直在看关于thrift的相关文章,涉及到的内容的基本都是表层的。一旦具体要用到实际的项目中的时候就会遇到各种问题了!
比如说:thrift 的服务器端载体的选择、中间代码的生成options(async asyncctp wcf 等等)、实现服务器端和客户端的基础框架的选择、和承载各层之间的组合的ioc架构。
其实这些东西,内容还是蛮多的。可能大家在看了这篇文章对很多必须要对 thrift 的基础做些普及才能看懂,还有就是windowsservices、wcf、spring.net!
这里,我是用的C# 做服务器和客户,当然,服务器端公布出的接口客户端就不在乎你是什么语言的了。只需要thrift的编译器生成对应中间代码然后相应编写代码就ok了。
下面是我选择的代码结构:
服务器端的载体我选择了windows services ,编译器肯定是用官方最新的thrift0.9.2(在代码生成的时候options我选择了wcf), 至于Thrift 的基础框架,我选择的是.net的 Thrift 和Thrift.Server和Thrift.Client (客户端可以支持多个服务器端的配置这正式我要找的东西呀),Ioc框架,其实现成的注入框架比较多,什么autoface,unity,spring.net等等;其实最终我们选择这些依赖注入的目的一定要清楚:(个人观点) 让我们的架构更松散、代码更美观、代码量更少、高可复用性、更容易维护。其实无论的的选择是什么,目的清楚了你的选择就一目了然了。这里我的选择肯定就是spring.net了,因为它有对Wcf,webservice,windowsservice,remoting等 的专门支持Spring.Services。另外的原因就太多了,让我省去了不少代码,让原本臃肿Wcf的代码变得结构清晰,另外它也统一了所有项目的依赖注入。

其中thrift 的代码生成命令是:thrift -gen csharp:wcf *.thrift
现在还看不到spring 的内容,应该它的作用是将松散的代码最后组合成一个成品。所以会涉及很多的spring配置。而且最终只会在ServerHost 项目的app.config 中可以看到。
当然里面的代码相当的少,因为spring.services里面做了整合,且一次封装,ServerHost 里面的代码就不用改了,你 唯一要做的就是如何将各个模块用配置整合在一起了。
从现在的结构视乎看上去很简单,其实不然,要真正将它们整合在一起要做很多配置和调试工作
下面看看生成的dll文件就知道了:

这还只是dll文件,相信用过spring的都知道。spring在代码和结构上带来了福音,但是配置文件的编写和整个框架的调试和融通却是一件头痛的事情。
不过,随着.net 的开源,对项目架构和可扩展性,分布式,可维护性要求也在慢慢体现出来。
所以做.net 的同学们,不要只看到.net的敏捷开发,要看到它有更宏伟的目标(分布式,云层存储,搜索引擎等等);而要达成这样的目标,我们必须重视各种第三方开发的中间件,不管它的原型是java开发的,php开发的,还是其他语言开发的。最重要的是它能带来我们想要的,它能让我们程序不在难以维护,让系统像一个婴儿一样可以逐步成长,而不是其他语言所取代,或是各种重复开发。
用Spring.Services整合 thrift0.9.2生成的wcf中间代码-复杂的架构带来简单的代码和高可维护性的更多相关文章
- 3.springMVC+spring+Mybatis整合Demo(单表的增删该查,这里主要是贴代码,不多解释了)
前面给大家讲了整合的思路和整合的过程,在这里就不在提了,直接把springMVC+spring+Mybatis整合的实例代码(单表的增删改查)贴给大家: 首先是目录结构: 仔细看看这个目录结构:我不详 ...
- SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。
SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发.是目前企业开发比较流行的架构.代替了之前的SSH(Struts + Spring + Hibernate) 计划 ...
- Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档
0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...
- WebService--CXF与Spring的整合(jaxws:endpoint形式配置)以及客户端调用(spring配置文件形式,不需要生成客户端代码)
一.CXF与Spring整合(jaxws:endpoint形式配置) 工具要点:idea.maven 1.新建一个maven项目 <?xml version="1.0" en ...
- 关于RabbitMQ以及RabbitMQ和Spring的整合
转自:https://www.cnblogs.com/s648667069/p/6401463.html 基本概念 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是 ...
- struts2+hibernate-jpa+Spring+maven 整合(1)
1.0.0 struts2 与 spring 的整合. 1.1.0 新建maven工程 , 编写pom.xml ,这里只需要简单的添加 一个组件就够了: 在myeclipse 生成的pom.xml 添 ...
- Spring Boot整合Elasticsearch
Spring Boot整合Elasticsearch Elasticsearch是一个全文搜索引擎,专门用于处理大型数据集.根据描述,自然而然使用它来存储和搜索应用程序日志.与Logstash和K ...
- SpringMVC+Spring+Hibernate整合开发
最近突然想认真研究下java web常用框架,虽然现在一直在用,但实现的整体流程不是很了解,就在网上搜索资料,尝试自己搭建,以下是自己的搭建及测试过程. 一.准备工作: 1/安装并配置java运行环境 ...
- cxf与spring的整合
cxf与spring的整合: 一:服务端相关配置(配置好后启动tomocat就自动发布了接口,浏览器打开验证下) 1:导入cxf以及spring的相关jar包; 2:在web.xml中增加配置: 代码 ...
随机推荐
- (转)在.net中检索HTTP请求
原文转载:https://www.west-wind.com/presentations/dotnetWebRequest/dotnetWebRequest.htm HTTP内容检索是应用程序的重要组 ...
- Prometheus Node_exporter 之 Network Netstat TCP
Network Netstat TCP /proc/net/snmp 1. TCP Segments type: GraphUnit: shortLabel: Segments out (-) / i ...
- SQL 时间戳转换为日期
, '1970-01-01 00:00:00') 其中Timestamp为10位的时间戳,+8*3600是获取中国北京时间(东八区)
- Netstat Commands for Linux Network Management
netstat (network statistics) is a command line tool for monitoring network connections both incoming ...
- Django商城项目笔记No.10用户部分-登录接口
Django商城项目笔记No.10用户部分-登录接口 添加url路由 接下来第二步,增加返回内容: 增加结果如下: 配置:上边的方法定义了返回的内容都有哪些,那这个方法jwt还不知道,需要配置: 修改 ...
- jquery实现返回页面顶部功能。
<p id="back-to-top"> <span></span> </p> <script type="text ...
- 安装的 Linux 软件包有多少?
导读 你有没有想过你的 Linux 系统上安装了几千个软件包? 是的,我说的是“千”. 即使是相当一般的 Linux 系统也可能安装了上千个软件包. 有很多方法可以获得这些包到底是什么包的详细信息. ...
- create_buffer_tree example
假设这样一种情况: 绕线完修完timing 后,designer 修改了netlist,给了eco.v,其中改动了 clock tree 的一个分支,导致这个分支上的buffer 都没有了,如下图 一 ...
- Mac OS 上配置java开发环境
在开始本学期的java课程前,我需要先为自己的电脑配置好Java的开发环境.由于电脑是mac操作系统,所以教材上的教程对我并不管用,于是乎开始动手自己查阅网上资料来解决. 1.安装JDK 1.访问Or ...
- Ubuntu 重新安装声卡驱动
有的时候ubuntu 的声卡不能用,没有声音也不能使用麦克风,所有很困惑,查看声卡驱动的时候不显示声卡的驱动,所有我们要自己安装声卡驱动, 1.下载驱动包这是比较新的声卡驱动,1.0.20 $ wge ...