企业服务总线(ESB),.NET服务总线(Windows Azure AppFabric Service Bus),NServiceBus,RhinoServiceBus,MassTransit等.
我试图了解这些技术的共同点或共同点.
我参加了朱瓦尔·洛的基于.NET服务总线介绍今天早些时候,他说,.NET服务总线可以作为一个穷人版的ESB的,所以我会认为这意味着在.NET服务总线是不是ESB,其他任何一个都是真正的ESB吗?
如果其他任何一个都是真正的ESB,那么它们将成为真正的ESB而不是.NET服务总线?
在Visual Studio 2010中,我有一个Web应用程序和一个控制台应用程序(实际上是一个使用NServiceBus的服务,但它在本地作为控制台应用程序运行),我想在启动Debug时启动它们.
现在我将Web应用程序设置为启动应用程序并在浏览器中打开,然后我右键单击我的服务并转到调试 - >启动新实例.这工作正常,但我宁愿不手动,因为我有时会忘记并需要运行服务来处理来自网站的消息.
谢谢.
我已经在网上无数次读过nservicebus,但仍然没有得到服务总线.
我认为这是一种非常不同的系统相互交流的方式吗?在这种情况下,我不明白为什么它比WCF更好?
我在这里看到了关于服务总线是什么的线程,但它仍然没有点击.
谢谢
有人使用NServiceBus 2.0成功使用Unity 2.0吗?
我试图针对Unity 2.0程序集编译NServiceBus.ObjectBuilder.Unity.dll的源代码,但由于新Unity中许多对象方法的更改/删除签名,因此会出现几个编译时错误.
在文档中,Udi Dahan说附加任何容器就像实现5种方法一样简单IContainer.但是当我查看NServiceBus.ObjectBuilder.Unity实现时,我发现还有很多工作要做.为什么会这样?
嘿,人们很想知道你为nServiceBus,Rhino Service Bus和MassTransit提供或了解的任何资源.
我们正在启动一个新项目,它具有一些非常基本的消息传递和排队要求,但是在将来可能会有一些额外的要求,例如sagas可以处理可能无序到达并需要重新排序的消息.
我们刚刚发布了一个完全托管在Amazon EC2上的项目,该项目中还有一个简单的消息传递系统.我们有一个非常简单的小型pub/sub机制,我们收到一条消息,然后根据其类型确定用于消息的处理程序.在我们的新项目中,我们也有类似的机制,并且可能有一些稍微复杂的要求,但即使我们可以取消使用我们自己的代码来解决消息处理程序,这也很酷.
我们真的很想使用NServiceBus,因为pub/sub模型非常好,但到目前为止我们一直在使用Amazon SQS作为队列提供者.我们的每台EC2机器都有一个工作人员正在侦听相同的SQS队列并从中拉出消息来处理它们.显然,在NServiceBus中,不支持SQS作为传输层(我知道这是因为NServiceBus是围绕可靠且低延迟的队列构建的).
我知道NServiceBus有一个分销商,我可以想象在它自己的EC2实例上托管它,但问题是那里有一个巨大的单点故障,所以如果这个故障发生,我们基本上就搞砸了.根据我的收集,人们设置Windows故障转移群集来处理内部网络的这个问题,但我不知道这是否适用于EC2.
这是我在实际上尝试在基于云的环境中使用NServiceBus的人可以找到的唯一博客文章之一,他似乎并不推荐它.我只是想知道这里有没有其他人尝试过,如果有的话,他们会提供什么建议吗?似乎很遗憾,我们无法仅仅因为我们托管在云上而使用这样一个伟大的框架.
看起来Azure Queues正在取得一些进展,这是我们可能会看到的,但是现在我们希望将基础设施保留在亚马逊,因为我们有很多可以重复使用的构建自动化,这是基于.
我正在运行NServiceBus 3.0.0 rc2但是当我启动应用程序(作为本地管理员)而没有预先创建MSMQ时,它出错了:
队列不存在或您没有足够的权限来执行操作.
使用NServiceBus 2.6没有发生这种情况.
以下是我的配置:
var bus = Configure.With()
.Log4Net()
.NinjectBuilder()
.XmlSerializer()
.DefiningCommandsAs(t => typeof(ICommand).IsAssignableFrom(t))
.DefiningEventsAs(t => typeof(IEvent).IsAssignableFrom(t))
.DefiningMessagesAs(t => typeof(IMessage).IsAssignableFrom(t))
.MsmqTransport()
.DefineEndpointName("subscriber.input")
.IsTransactional(true)
.PurgeOnStartup(false)
.UnicastBus()
.LoadMessageHandlers()
.ImpersonateSender(false)
.CreateBus()
.Start();
Run Code Online (Sandbox Code Playgroud)
和
<configuration>
<configSections>
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
</configSections>
<MsmqTransportConfig ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="MyEvents" Endpoint="publisher.input" />
</MessageEndpointMappings>
</UnicastBusConfig>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我可以看到一个配置扩展方法来禁用自动创建队列但没有启用它.
如果我预先创建队列,它工作正常.
我试图通过从不同的命名空间向不同的端点发送消息来配置我的NServiceBus配置中的消息端点映射.
因此,我在web.config中配置了以下内容:
<MessageEndpointMappings>
<add Messages="Company.Messages.Accounts" Endpoint="ServiceInput" />
<add Messages="Company.Messages.Payments" Endpoint="ServiceInput" />
<add Messages="Company.Messages.Cancellations" Endpoint="ServiceInput" />
<add Messages="Company.Messages.Notifications" Endpoint="ServiceInput" />
</MessageEndpointMappings>
Run Code Online (Sandbox Code Playgroud)
但是,当我的应用程序启动时,我收到以下异常:
Spring.Objects.PropertyAccessExceptionsException:PropertyAccessExceptionsException(1个错误); 嵌套的PropertyAccessExceptions是:[Spring.Core.TypeMismatchException:无法将类型[System.Collections.Hashtable]的属性值转换为属性'MessageOwners'所需的类型[System.Collections.IDictionary].,内部异常:System.ArgumentException:问题加载消息程序集:Company.Messages.Payments ---> System.IO.FileNotFoundException:无法加载文件或程序集"Company.Messages.Payments"或其依赖项之一.该系统找不到指定的文件.文件名称:'Company.Messages.Payments'
我觉得有趣的是它似乎找到了Company.Messages.Accounts但在第二个配置的行上失败了.我想也许它不喜欢让它们全部转到同一个端点,但更改此配置以使它们进入不同的端点并没有改变我收到的错误消息.
我究竟做错了什么?是不是可以通过命名空间来分割消息(我所见过的只是按类型和汇编)?
谢谢,史蒂夫
我很好奇,如果它甚至考虑BizTalk实现发布/子消息传递架构(基本上你可以用NServiceBus或MassTransit做我真正需要的).我的经理倾向于坚持直接从微软提供的框架,因此作为我尽职调查的一部分,我需要为双方提供一套良好的利弊.任何指导将不胜感激!
任何人都可以举例说明生产中如何使用相关ID?
我已经读过它用于请求/响应类型的消息,但我不明白我会在哪里使用它?
我可以想到的一个例子(可能是错误的)是在发布订阅场景中,我可以有5个订阅者,如果我得到5个具有相同关联ID的回复,那么我可以说我的所有订阅者都收到了它.不确定这是否正确使用它.
或者如果我发送一条简单的消息,我可以使用相关性来保证客户端收到它.
还有其他例子吗?
nservicebus ×10
.net ×3
servicebus ×3
c# ×2
masstransit ×2
msmq ×2
amazon-ec2 ×1
amqp ×1
biztalk ×1
cqrs ×1
esb ×1
messaging ×1
rabbitmq ×1
rhino ×1
unity2.0 ×1