10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

NServiceBus——让创建企业级.NET 系统更加容易

  • 2007-09-18
  • 本文字数:1519 字

    阅读完需:约 5 分钟

NServiceBus 是一个开源的通信框架,它能够帮助开发人员在搭建企业.NET 系统时避免很多典型的常见问题。同时,该框架也提供了一些可伸缩的关键特征,比如对发布 / 订阅的支持、集成的长时间工作流及深入的扩展能力等。据作者说,其本意是为构建分布式应用软件创建一个理想的基础设施。

NServiceBus 在 2006 年一月发行了第一个版本,随后在三月份就在一个大型的分布式系统中得到了应用。为此,InfoQ 特地找到机会和 NServiceBus 的原创者 Udi Dahan 进行了交流。

开发缘由:

开发 NServiceBus 的动力主要有两个。首先,我希望让开发人员在使用异步消息传递机制(无论是否使用 Web Service)时,能够以一种固定的方式编写其服务层。其次,我也希望能够定义一个支持发布 / 订阅语义的通讯 API 模式——这样无论传输接口是否支持发布 / 订阅,程序均可自由地进行移植。当然,避免使用集中的分发模块也非常重要,否则就无法实现良好的可伸缩性。最后,NServiceBus 还为长时间运行的工作流确定了一个确定的形式,并能够与异步消息传递连接起来。

对于使用 SOA 协议构建系统的开发人员来说,基于用 NServiceBus,而不是一些其它的技术或者所谓的“企业服务”框架的理由主要在于:

基于 NServiceBus 开发的系统将很难对其可伸缩性造成负面影响。因为异步消息传递模式的地位非常重要,所以开发人员将在大多数 Web Service 实现中都能潜意识地避免暂时耦合。而使用其它的技术则很难避免这类情况的发生,比如开发人员容易破坏系统的可伸缩型性和易用性——更为致命的是,这类失误只能在程序部署后才能被发现。 NServiceBus 的另一个独到之处就是它将所有的工作流代码完全地从技术实现中独立了出来。这样就让我们很容易地对工作流类做单元测试,进而允许关键业务流程的迭代开发。这些可移植的.NET POJO(Plain Old Java Object)让开发者可以根据实际需要灵活地选择工作流的运行平台。

我们注意到 NServiceBus 将能够配合 MSMQ 使用。之所以这样实现,Udi Dahan 给出了如下说明:

NServiceBus 的核心并不依赖于 MSMQ。NServiceBus 可扩展性允许我们插入自行编写的通信传送器,、订阅存储器和工作流的实现。我已经基于 MSMQ 实现了一个传送器,还有一个则借助了 WCF 的 NetTCP。开发人员既可以使用这些现有组件,也可以根据需要进行自定义。我们知道当前的许多 SOA 产品都与 HTTP 紧密耦合,因此 NServiceBus 的这种实现方式也将是个另辟蹊径的设计。 之所以选择使用 MSMQ,是因为它是微软公司的两大主流的通讯技术之一(另一个是 SQL Server Service Broker)。MSMQ 允许双方在离线的状态下进行通信,且它提供了一整套易于使用的 API,并已经集成到了.NET 框架中,这一点要比 Service Broker 好得多。我个人认为支持离线通信是任何 SOA 基础框架都必须考虑的关键部分——因为 Tenet of Service Autonomy 并不能保证当前通信的另一端处于可用状态。

NServiceBus 是一个开源的产品,基于 Creative Commons Attribution 3.0 License 发布。该框架已经被封装成数个.NET 程序集,允许在任何符合许可协议的应用程序或客户端中使用。

限于采访时间,我们最后则让 Udi 对那些不熟悉 SOA 或者想更多的了解 SOA 实现的读者说说他的想法:

如果你正在开发提供服务这一类型的应用程序,且还不熟悉 SOA 的话,你需要知道 SOA 和你到目前为止所做的事情有很大的区别——你无需再重复地书写类似的代码。与其在使用某项技术遇到困难时步履维艰,不如先花些时间理解高层的消息传递模式,以避免日后的返工。

Udi 在前不久也曾被 DotNetRocks 采访。采访内容包括 SOA 以及 NServiceBus 等。若想了解更多 Udi,你也可以访问他的Blog

查看英文原文: NServiceBus - Makes Building Enterprise .NET Systems Easier

2007-09-18 03:1310834
用户头像

发布了 37 篇内容, 共 10.2 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

带你全面了解compaction 的13个问题

TiDB 社区干货传送门

TiDB 底层架构 数据库架构设计

TiDB VS MySQL

TiDB 社区干货传送门

TiDB 6.1 新特性解读 | TiDB 6.1 MPP 实现窗口函数框架

TiDB 社区干货传送门

新版本/特性解读 6.x 实践

文盘Rust -- 子命令提示,提高用户体验

TiDB 社区干货传送门

开发语言

避坑指南 生产环境TiKV的IO-Util趋近100%问题定位

TiDB 社区干货传送门

集群管理 管理与运维 TiKV 底层架构

TiCDC 6.0 原理之 Sorter 演进

TiDB 社区干货传送门

TiDB 源码解读 6.x 实践

TiFlash 面向编译器的自动向量化加速

TiDB 社区干货传送门

性能调优 应用适配

TiSpark v2.5 开发入门实践及 TiSpark v3.0.0 新功能解读

TiDB 社区干货传送门

6.x 实践

基于 TiDB 场景式技术架构过程 - 理论篇

TiDB 社区干货传送门

数据库架构选型 数据库架构设计

分布式数据库 TiDB 6.0 集群保姆级安装手册

TiDB 社区干货传送门

6.x 实践

让秒杀狂欢更从容:大促背后的数据库(下篇)

TiDB 社区干货传送门

TiDB 6.1 单机环境 On openEular 2003 SP3

TiDB 社区干货传送门

实践案例 版本测评 应用适配 6.x 实践

TiDB 性能分析和优化

TiDB 社区干货传送门

性能调优

OLTP 负载性能优化实践

TiDB 社区干货传送门

性能调优 OLTP 场景实践

使用 Vagrant + VirtualBox 虚拟机搭建TiDB v5.4 实验环境

TiDB 社区干货传送门

安装 & 部署

利用odbc连接oracle与tidb

TiDB 社区干货传送门

迁移 实践案例 数据库架构选型 应用适配 数据库连接

TiFlash 源码解读(四) | TiFlash DDL 模块设计及实现分析

TiDB 社区干货传送门

TiDB 之 TiCDC6.0 初体验

TiDB 社区干货传送门

迁移 安装 & 部署 6.x 实践

TiCDC canal_json的实际应用

TiDB 社区干货传送门

迁移 管理与运维 新版本/特性解读 OLTP 场景实践

你踩过这些坑吗?谨慎在时间类型列上创建索引

TiDB 社区干货传送门

性能调优 TiDB 底层架构 OLTP 场景实践

TiFlash 源码阅读(三) DeltaTree 存储引擎设计及实现分析 - Part 1

TiDB 社区干货传送门

Performance Overview 面板重要监控指标详解

TiDB 社区干货传送门

监控

TiSpark 3.0.0 新特性实践

TiDB 社区干货传送门

实践案例 新版本/特性发布 HTAP 场景实践 大数据场景实践

文盘Rust -- 给程序加个日志

TiDB 社区干货传送门

开发语言

我和 TiDB 的故事 - 2020~2022

TiDB 社区干货传送门

生产环境TiDB集群缩容TiKV操作步骤

TiDB 社区干货传送门

扩/缩容

TIDB监控升级解决panic的漫漫探索之路

TiDB 社区干货传送门

监控 实践案例 集群管理 故障排查/诊断 扩/缩容

TiDB v6.0.0 DMR 源码阅读——缓存表

TiDB 社区干货传送门

TiDB 源码解读 新版本/特性解读 6.x 实践

TIDB 6.0新特性漫谈之Clinic

TiDB 社区干货传送门

新版本/特性发布 6.x 实践

TiDB 性能优化概述

TiDB 社区干货传送门

性能调优

tidb-dm报警DM_sync_process_exists_with_error排查

TiDB 社区干货传送门

故障排查/诊断

NServiceBus——让创建企业级.NET系统更加容易_SOA_Robert Bazinet_InfoQ精选文章