用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中增加配置: 代码 ...
随机推荐
- iftop – 实时Linux网络带宽监控工具
在本文中,我们提出了另一个称为Interface TOP (IFTOP)的优秀程序, 它是一个基于实时控制台的网络带宽监控工具. 它将显示接口上网络活动的快速概览. Iftop 平均每 2,10 和4 ...
- CheckTimeWait.bat实现windows下的TimeWait检查
原文链接: http://www.lookdaima.com/WebForms/WebPages/Blanks/Pm/Docs/DocItemDetail.aspx?id=c7bff196-cd9c- ...
- kettle 启动spoon一闪而过
Kettle是Pentaho的一个组件,主要用于数据库间的数据迁移(ETL). Kettle有三个主要组件:Spoon,Kitchen,Pan.其中Spoon是一个图形化的界面. 一.安装kettle ...
- Jenkins 角色 项目权限管理
插件名称: Role-based Authorization Strategy 新建 两用户 配置项目安全策略 在系统管理页面点击Manage and Assign Roles进入角色管理页面: 进 ...
- webpack分离css单独打包
这篇文章过期了,webpack4.x已经不这么用了,最新的可以看这个地址webpack实战场景系列 原文地址:http://www.izhongxia.com/posts/44724.html CHA ...
- git 的一般使用
git安装 git初始化一个仓库 命令:git init; 想在哪个目录创建.git目录,就是哪个目录打开工具然后写命令. 一般是在项目的根目录执行这个命令. 配置用户名 : git config u ...
- BZOJ2306:[CTSC2011]幸福路径(倍增Floyd)
Description 有向图 G有n个顶点 1, 2, …, n,点i 的权值为 w(i).现在有一只蚂蚁,从给定的起点 v0出发,沿着图 G 的边爬行.开始时,它的体力为 1.每爬过一条边,它 ...
- android与JS交互,互相调用方法,跳转到网页
在main下面New - Folder - Assets Folder,在Assets下面新建一个js_android.html <html><head> <meta h ...
- Java ThreadLocal的使用案例
本文以数据库操作Dao为例进行描述ThreadLocal的使用,如下是一个反例: package com.daxin.threadlocal.dao; import java.sql.Connecti ...
- JavaScript定时器的工作原理(翻译)
JavaScript定时器的工作原理(翻译) 标签(空格分隔): JavaScript定时器 最近在看ajax原理的时候,看到了一篇国外的文章,讲解了JavaScript定时器的工作原理,帮助我很好的 ...