只是做一些快速的尖峰,可能使用消息传递系统来处理在一个很好地解耦的工作流系统中的文件.
人们发现使用上述每个框架的优点和缺点是什么?使用这些与使用WCF绑定和/或非MSMQ解决方案的手动MSMQ系统相比有什么优势?
我听说过关于NServiceBus的讨论,但我还没有真正理解它是什么.他们声称自己是".net最受欢迎的开源服务总线".
所以; 什么是"服务巴士",什么时候需要?
我正在努力寻找有关NServiceBus和MassTransit的优缺点列表.
现在我知道这里已经有了一个帖子,但它并没有真正回答我的问题.
这是我到目前为止所读到的内容:
NServiceBus较旧,并且有更多参考.很难找到关于MassTransit的东西,但我心胸开阔.但是我必须提供可靠的解决方案,所以我不得不问.
所以,请有这两个框架经验的人.我为什么要选择NServiceBus?或者我为什么要选择MassTransit?
是性能,安全性,规模还是?
我正在尝试学习消息传递系统.我发现RabbitMq和NServiceBus在很少的地方一起使用.我的问题是
有人能够揭示新发布的Windows ServiceBus(内部部署,而不是Azure)和NServiceBus之间的差异吗?
正在寻找详细解答Windows SB可能缺失的内容,因为我很熟悉NSErviceBus可以做什么:
我是CQRS的新手,我想要在写端(域)内理解业务规则验证.我知道客户端验证应该在有效日期(必填字段,字符串长度,有效电子邮件等)方面完成,业务规则/业务域相关验证应该在域方进行.实际上,同样的客户端验证规则也应该应用于域中的命令,因为我们不信任用户.
因此,我们有一个有效的命令(AddEmailToCustomer),并在命令上调用命令处理程序.这是我的验证方法.
我在命令处理程序中抛出异常并在那里添加这些错误吗?我是否将命令发送到错误队列或其他地方?我是否回复Bus.Reply之类的内容并返回错误代码?如果是这样,我该如何处理错误消息?如何将这些错误传达给用户?我知道我可以稍后通过电子邮件发送它们,但在Web场景中,我可以在命令中发送请求ID(或使用消息ID),并使用请求ID轮询响应并向用户显示错误消息.
感谢您的指导.
谢谢
我的ASP.NET MVC3/NHibernate应用程序需要触发和处理与我的域对象相关的各种事件.例如,Order对象可能包含OrderStatusChanged或等事件NoteCreatedForOrder.在大多数情况下,这些事件会导致发送电子邮件,因此我不能将它们留在MVC应用程序中.
我已经阅读了Udi Dahan的Domain Events以及关于如何做这类事情的许多其他想法,我决定使用一个处理事件消息的基于NServiceBus的主机.我做了一些概念验证测试,这似乎运作良好.
我的问题是应用程序层应该实际引发事件.我不想在有问题的对象成功保留之前触发事件(如果持久性失败,则无法发送创建注释的电子邮件).
另一个问题是,在某些情况下,事件与聚合根下面的对象相关联.在上面的示例中,Note通过将a 添加到Order.Notes集合并保存订单来保存a .这带来了一个问题,因为它很难评估Order保存时应该触发哪些事件.我想避免在保存更新的副本之前必须拉出对象的当前副本并查找差异.
用户界面提出这些事件是否合适?它知道发生了什么事件,并且只有在成功使服务层保存对象后才能触发它们.让控制器触发域事件似乎有些不对劲.
存储库是否应该在成功持久后触发事件?
我是否应该完全分离事件,让存储库存储一个Event对象,然后由轮询器服务接收该对象,然后将其转换为NServiceBus的事件(或直接从轮询器服务处理)?
有一个更好的方法吗?也许让我的域对象排队只有在持久化对象后由服务层触发的事件?
更新:我有一个服务层,但让它通过比较过程以确定在保存给定聚合根时应该触发哪些事件似乎很麻烦和过分.由于其中一些事件是粒状的(例如"订单状态已更改"),我认为我必须检索对象的数据库副本,比较属性以创建事件,保存新对象,然后将事件发送到NServiceBus保存操作成功完成.
在我下面发布的答案(下面的方法)之后,我最终做的是在我的域实体中构建一个EventQueue属性List<IDomainEvent>.然后我添加了事件,因为对域的更改是值得的,这使得我可以将逻辑保留在域中,我认为这是合适的,因为我根据实体内部的内容触发事件.
然后,当我将对象保留在服务层中时,我处理该队列并实际将事件发送到服务总线.最初,我计划使用使用身份PK的遗留数据库,因此我必须对这些事件进行后处理以填充实体的ID,但我最终决定切换到Guid.Comb允许我跳过该步骤的PK.
asp.net-mvc domain-driven-design nservicebus domain-events asp.net-mvc-3
更新:最新的许可信息可以在这里找到:http://particular.net/licensing
所以,我正在阅读NServiceBus Community Edition的许可限制.它说:
生产使用仅限于不超过4个核心的单个服务器.
这是否意味着所有订阅者和所有发布者都需要在单个服务器上运行?
或者这是否意味着作为发布者或订阅者的每个服务器可以拥有不超过4个核心?
我希望它是后者,因为我们计划使用NServiceBus允许在几个不同的客户端机器和服务器上运行的多个应用程序(和服务)订阅业务事件.我很难让我的管理层为我们想要允许作为已发布事件的订阅者的每台机器上的每个cpu支付500美元.
更新:作为旁注,商业许可证表明他们"将有权进入您的场所并访问您的记录和计算机系统",以确保您支付全额费用.我知道我的数据安全人员会对此嗤之以鼻.有商业版本的人是否评论了这次审计的发生频率以及实际的侵入程度?
使用NServiceBus比使用RabbitMQ的.net驱动程序有什么好处(假设我们可以用AMQP替换MSMQ).NSB是否提供AMQP中无法直接提供的任何其他功能或抽象.
使用Bus.Publish发布消息和使用Bus.Send发送消息之间有什么本质区别?我希望了解它们之间的区别,以及我何时应该选择使用其中一种.
nservicebus ×10
.net ×3
servicebus ×3
masstransit ×2
rabbitmq ×2
amqp ×1
apache-kafka ×1
asp.net-mvc ×1
command ×1
cqrs ×1
esb ×1
msmq ×1
nservicebus3 ×1
rhino-esb ×1
validation ×1