【问题标题】:What technologies are available for a publish/subscribe model using .NET?哪些技术可用于使用 .NET 的发布/订阅模型?
【发布时间】:2009-12-09 20:21:07
【问题描述】:

我目前正在开发一个应用程序,其中应用程序的一个组件需要根据某些事件与多个其他系统组件进行交互。这些事件基于许多不同的触发器而发生......一些事件是由用户的操作引起的,需要通知其他用户,一些事件是基于时间的,而其他事件是基于对象状态的变化。

根据我目前所看到的,听起来最简洁的解耦应用程序组件的方法是设置一个发布/订阅模型,其中组件中的我的对象发布其他感兴趣的应用程序组件可以订阅的事件.

我见过 nServiceBus,由于“供应商锁定”的原因,我不能在 Azure 中使用 .NET 服务。还有其他可用的技术吗?我应该考虑其他方法吗?

编辑 - 明确地说,这是一个基于网络的大容量应用程序。该应用程序是 ASP.NET MVC,并且 MVC 应用程序正在与多个 WCF 服务进行通信以获取其数据。

【问题讨论】:

  • 我不是 .Net 专家。但是,我认为 .Net 消息队列 (System.Messaging) 是针对这个特定问题的。
  • 大部分服务总线都建立在windows消息队列之上。

标签: .net events publish-subscribe


【解决方案1】:

WCF 绝对能够处理 pub/sub 场景 - 一旦带有新的 WCF Azure 中继绑定的 .NET 4 发布后,它会更强大。

现在,请查看有关该主题的以下文章:

对于未来使用 .NET 服务总线的基于 Azure 的发布/订阅消息传递,请在此处查看这些文章:

【讨论】:

  • 这似乎是拥有最完整文档的选项,并且看起来它会更容易移动到 .NET 服务总线,这就是我接受这个答案的原因。
【解决方案2】:

还有MassTransit。从未使用过它,但它通常在与 nServiceBus 相同的对话中被提及。

根据您要执行的操作,还有Managed Extensibility Framework。不是真正的发布/订阅框架,但如果您还没有,请注意它。

【讨论】:

  • 我认为 MEF 不太适合我正在尝试做的事情。为 MassTransit 推荐 +1...
【解决方案3】:

Udi(nServiceBus 的创建者)在他的blog 上有一个简化版的域事件概念

我们以此为基础开发了一个更简单的实现,例如我们可以在我们的解决方案中使用的 nServiceBus。

【讨论】:

    【解决方案4】:

    要使用 .net 实现经典的发布/订阅模型,我会使用 ActiveMQ。它非常容易理解,如果您已经了解 JMS,那么学习曲线非常平坦。

    【讨论】:

      【解决方案5】:

      WCF

      Google WCF 发布订阅模式。我认为 Juval Lowy 编写的 Programming WCF 的附件部分对如何做到这一点有很好的解释。

      编辑 http://idesign.net/idesign/DesktopDefault.aspx?tabindex=5&tabid=11
      寻找发布-订阅框架

      【讨论】:

        【解决方案6】:

        Prism 带有一个提供松散耦合事件的 EventAggregator。

        【讨论】:

          【解决方案7】:

          假设您拥有多进程或 SOA 架构,到目前为止的答案都是不错的。

          如果它是一个简单的独立应用程序,那么内置的 C# 事件模型可能适用于您的情况。或者,也可以使用委托或接口传递给服务器/发布者。

          这个observer pattern link 可能会有所帮助。

          【讨论】:

            【解决方案8】:

            这是一个关于“nServiceBus, Rhino Service Bus, MassTransit - Videos, Demos, Learning Resources”的 SO 问题,有一些很好的答案。

            【讨论】:

              猜你喜欢
              • 2022-09-23
              • 2015-10-07
              • 1970-01-01
              • 2016-07-03
              • 1970-01-01
              • 2013-12-08
              • 2012-06-12
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多