写点什么

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:1310738
用户头像

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

关注

评论

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

IDEA导入多模块maven项目时部分模块未成功加载

WuXiaoYuan

IDEA springboot

打破制造业数字化转型困境:华为云助力企业填补数据空白和简化管理

YG科技

GitHub重磅上线!开源分布式架构原理设计笔记

小小怪下士

Java 程序员 分布式 分布式架构

游戏内嵌社区服务开放,助力开发者提升玩家互动与留存

HarmonyOS SDK

HMS Core

CSS文本平衡排版 text-wrap:balance

南城FE

CSS 前端 设计

【倒计时4天】金融服务用户体验专场沙龙开启预约

易观分析

金融 经济

基于多场景化解决方案,华为云助力制造业企业走出数字化转型困境

YG科技

明修"栈"道——越过Android启动栈陷阱

vivo互联网技术

flag Activity启动 应用栈Task

国内服务器终于支持ChatGPT接入到公众号了

派大星

ChatGPT

阿里内部出品的这5份Java资料的含金量有多高,你不会还不知道吧

会踢球的程序源

Java 程序员 面试 java面试 构架师

轻医美面部抗衰品牌“娅蔻”宣布将进军江苏市场

科技热闻

华为云数字化转型解决方案 助力制造业企业迈向智能化

YG科技

百度CTO王海峰做客《中国经济大讲堂》:文心一言,读书破万亿

飞桨PaddlePaddle

飞桨 文心一言

深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测

汀丶人工智能

人工智能 机器学习 深度学习 损失函数

一文详解 PoseiSwap,Nautilus Chain 上的首个 DEX

西柚子

css动若脱兔转换视差效果

格斗家不爱在外太空沉思

CSS 三周年连更

Groovy def关键字妙用

FunTester

Java面向对象编程高级

timerring

Java

华为云场景化解决方案 助力制造业企业数字化转型

YG科技

Java如何实现手动连接数据库(mysql或oracle)|超级详细,建议收藏

bug菌

MySQL oracle 三周年连更

如何设计一个几十万在线用户弹幕系统

前端面试题之性能优化大杂烩

肥晨

三周年连更

测试环境治理之MYSQL索引优化篇

京东科技开发者

MySQL 性能优化 测试环境 企业号 4 月 PK 榜

浅谈离线数据倾斜

京东科技开发者

hive sql 数据倾斜 Spark java 企业号 4 月 PK 榜

小白福利 | Window前言

GreatSQL

MySQL greatsql greatsql社区

早有尔闻 | 低碳赋能,创新发展

Openlab_cosmoplat

工业互联网 开源社区

InfluxDB vs TDengine,用数据“说”性能

TDengine

大数据 tdengine Influxdb 时序数据库 InfluxDB Cluster

软件复杂度的思考与解决之道

阿里技术

技术成长 软件复杂度

华为云助力制造企业解锁数字化转型困局

YG科技

Fabarta 获过亿元人民币 Pre-A 轮融资,打造面向 AI 的图智能 Infra

Fabarta

Dock优化工具:HyperDock mac中文激活版

真大的脸盆

Mac Mac 软件 优化工具

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