问题标签 [masstransit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1708 浏览

c# - MassTransit 和简单注射器

我正在审查.NET 的 MassTransit 分布式应用程序框架。根据该网站的说法, MassTransit 从一开始就构建了涉及 IoC 容器的概念,并为少数更“主流”的 IoC 容器提供支持库。(目前)有适用于 Autofac、StructureMap、Castle Windsor、Ninject 和 Unity 的 NuGet 包。

出于性能原因,我选择了Simple Injector作为我选择的 IoC 容器,但我无法找到一个集成库,可以为 MassTransit 添加对 Simple Injector 的支持。

有没有人试过这个,让它工作并且有一些代码可以让我开始?

0 投票
1 回答
1114 浏览

nservicebus - 将 NServicebus 或 Masstransit 与 TIBCO EMS 一起使用的好处

我们正在探索将 TIBCO EMS 纳入我们基于 .NET 的系统的设计。据我了解,broth NServiceBus 和 MassTransit 可以使用 TIBCO EMS 作为运输通信层。我的问题是:与直接在 TIBCO EMS 上使用自定义 C#/.NET 库相比,使用 NServiceBus 或 MassTransit 有什么好处?

我知道这个关于 RabbitMQ 的答案:MassTransit 向 RabbitMQ 添加了什么?

TIBCO EMS 是否也有同样的好处?

0 投票
1 回答
1373 浏览

c# - 通过 MSMQ 的 MassTransit 无法正常工作,为什么?

这是我的 MassTransit 代码。

订阅者控制台应用程序:

留言类:

发布者控制台应用程序:

当我运行这两个控制台应用程序时,消费者似乎没有接收到消息。有任何想法吗?

干杯!

0 投票
2 回答
594 浏览

.net - 使用服务总线架构在不同系统之间关联/映射实体有哪些方法?

我正在研究在我们的企业中使用服务总线架构来协调我们环境中系统之间的数据和业务流程。

我们的情况很典型:面向客户的 Web 应用程序将消息传递给内部系统以进行计费、库存等。我们有几个业务实体在大多数或所有这些系统中都是通用的;这些系统中的每一个都在自己的数据库中维护自己的这些实体版本。

应用于服务总线概念,我们可以从我们的客户门户网站向总线发布代表订单的消息。每个感兴趣的系统(计费、库存等)都可以使用此消息在自己的数据库中创建相应的客户记录。但是,当这些内部系统中的一个需要发布有关订单状态的消息时,它会从自己的数据库中携带订单 ID。如果我们的门户网站需要使用该消息,它将不知道如何将从我们的内部系统发送给它的订单 ID 与保存到门户网站数据库的订单 ID 相关联。

由于没有其他系统固有地知道等效实体如何跨系统关联,因此似乎需要某种类型的映射机制来允许系统将消息中包含的 ID 转换为与其相关的 ID。例如,可以创建一个将 ID 从一个系统映射到另一个系统的数据库表。可以查询该表以检索目标系统的适当 ID。我们的业务目前不使用实体聚合或其他一些“360 度视图”类型的存储库作为通用实体信息的单一权威来源,通用 ID 可以从这些信息中在所有系统之间传递和使用。

使用这种实体映射方法来伴随服务总线实现是一种有效的方法吗?如果是这样,是否有任何既定的指导方针来指导设计?如果没有,我有兴趣了解跨系统链接实体以促进通过服务总线进行集成的替代方法。

PS:如果有帮助,我目前正在评估用于构建我们的公共汽车的 MassTransit 框架,所以如果有特定的信息可以提供,那也非常受欢迎。

0 投票
1 回答
951 浏览

c# - 如何向特定订阅者重新发送消息?

背景:

我们有一个基于 MassTransit 的消息传递子系统。它工作得很好,只需小问题就可以发送数千条消息。到目前为止,失败的消息会自动推送到xxx_error队列中。这也很好用。

我们甚至拥有自己的基于 Web 的管理控制台来查看消息队列并重新发送失败的消息。该工具基于BusDriver示例并直接在 MSMQ 上工作——它将消息复制xxx_errorxxx并重新发送。

现在的情况:

我们考虑迁移到 RabbitMQ,它似乎更快且更具可扩展性。但是当然,MSMQ 管理控制台变得无用了,我不喜欢编写另一个版本的控制台来处理 RabbitMQ 队列。我宁愿采用通用路由,将失败的消息放入我自己的存储库中,该存储库独立于 MSMQ 传输。

听起来很容易。这就是我们有一个具体问题的地方。

失败消息的存储库将包含(以及其他属性)消息正文和消息订阅者名称。稍后,我可以去存储库,反序列化消息并将其重新发送给特定的订阅者。

但是,我们不想这样,bus.Publish( msg )因为消息会再次命中所有订阅者,而不是之前失败的订阅者。我们想要的是将消息重新发送给一个订阅者。

这似乎是可能的:

或者

(取决于使用的交通工具)。使用这种方法,消息被传递给唯一的特定订阅者。

问题是:

这是推荐的方法吗?我们有什么选择?

可能的问题是这种方法可能会忽略有关当前订阅的信息并将消息直接传递到订阅者队列。但是,订阅者可能不再订阅该类型的消息。所以,代码应该是这样的:

提前感谢您对此的任何评论。

0 投票
1 回答
220 浏览

msmq - 可能是一个非常愚蠢的大众运输误解

我是 MassTransit 的新手,我不明白的一件事是:

如何在多个 .net ServiceBuse 之间创建总线?

拿这个代码:

我希望“收到消息...”会出现两次,因为我有两辆公共汽车。然而,我只得到一个。显然,有一些步骤将这两个 Bus 实例与同一个逻辑总线联系起来,我不明白那是什么。我不能将它们指向相同的队列名称,因为同样只有一个人会收到消息。

谢谢!

编辑/解决方案

我从 MT Google Groups 获得了一些帮助,他们让我很快就理顺了……这没有按预期工作,因为我没有安装 MSMQ 的多播位。安装了这些,它按预期工作。

0 投票
2 回答
10988 浏览

rabbitmq - 使用 RabbitMQ 的 Masstransit 的简单示例

我想将 MassTransit 总线与 RabbitMQ 一起使用。但我找不到一个简单的例子。我正在寻找可以帮助我入门的示例。

我已经尝试过。

  1. 谷歌搜索:但大多数示例都使用 MSMQ 或使用太多配置选项。
  2. GitHub:我查看了 MassTransit 的 GitHub ( https://github.com/MassTransit/MassTransit/tree/master/src/Samples ) 但这里的示例负载很重。初学者很难理解。
  3. 阅读文档:我已经开始阅读文档,但完成它需要一些时间。我希望如果有人分享一个简单示例的链接,这将使我开始。

请提供您的建议。

0 投票
1 回答
211 浏览

masstransit - MassTransit 在 sagas 中具有业务逻辑/行为

sagas 的事件处理程序似乎嵌入了业务逻辑/行为。
我指的是星巴克的例子。

由于示例的“示例应用程序”性质,这是故意这样做的吗?
域逻辑/行为似乎不是与公共交通密切相关吗?

0 投票
1 回答
516 浏览

nhibernate - 是否可以阻止 MassTransit 运行时服务要求 DTC?

我开始使用 MassTransit,需要使用 RuntimeServices 来管理订阅和超时。我正在安装的环境是一个面向外部的网络,使用防火墙划分为多个部分。

当前,要安装 RuntimeServices 的应用程序服务器和 SQL Server 没有打开允许分布式事务协调器 (DTC) 正常工作的 RPC 端口。

下面列出了我得到的完整异常,但重要的部分看起来是这样System.Transactions.TransactionException: The operation is not valid for the state of the transaction.。由于未配置 DTC,我不相信该交易会启动。

虽然我应该能够要求打开正确的端口,但我不愿意这样做,因为我并不关心为此目的的交易。所以理想情况下,我想告诉 MassTransit 或者可能是 nHibernate,我不需要分布式事务。

顺便说一句,我的 MS 消息队列是非事务性的。

欢迎任何帮助,谢谢,Rob

完整的异常堆栈跟踪:

MassTransit.Context.ServiceBusReceiveContext-'System.Action'1[[MassTransit.IConsumeContext, MassTransit, Version=2.6.416.0, Culture=neutral, PublicKeyToken=null]]' threw an exception consuming message 'MassTransit.Context.ReceiveContext' NHibernate.Exceptions.GenericADOException: could not execute query [ select subscripti0_.CorrelationId as Correlat1_1_, subscripti0_.CurrentState as CurrentS2_1_, subscripti0_.ControlUri as ControlUri1_, subscripti0_.DataUri as DataUri1_ from dbo.SubscriptionClientSaga subscripti0_ where subscripti0_.CurrentState=? ] Name:p1 - Value:Active (State) [SQL: select subscripti0_.CorrelationId as Correlat1_1_, subscripti0_.CurrentState as CurrentS2_1_, subscripti0_.ControlUri as ControlUri1_, subscripti0_.DataUri as DataUri1_ from dbo.SubscriptionClientSaga subscripti0_ where subscripti0_.CurrentState=?] ---> System.Transactions.TransactionException: The operation is not valid for the state of the transaction. at System.Transactions.TransactionState.EnlistVolatile(InternalTransaction tx, IEnlistmentNotification enlistmentNotification, EnlistmentOptions enlistmentOptions, Transaction atomicTransaction) at System.Transactions.Transaction.EnlistVolatile(IEnlistmentNotification enlistmentNotification, EnlistmentOptions enlistmentOptions) at NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.EnlistInDis tributedTransactionIfNeeded(ISessionImplementor session) at NHibernate.Impl.AbstractSessionImpl.EnlistInAmbientTransactionIfNeeded() at NHibernate.Impl.AbstractSessionImpl.CheckAndUpdateSessionStatus() at NHibernate.Impl.SessionImpl.get_Batcher() at NHibernate.Loader.Loader.GetResultSet(IDbCommand st, Boolean autoDiscoverTypes, Boolean callable, RowSelection selection, ISessionImplementor session) at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) --- End of inner exception stack trace --- at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) ... (elided for brevity!) ...

0 投票
1 回答
1331 浏览

masstransit - 新手 - 是否需要消费者队列才能在 MassTransit 中进行发布

我正在尝试了解 MassTransit 和 RabbitMQ 并排队(第 1 天)

我的问题是“是否需要消费者才能在 MT 中排队工作。我问的原因是因为我首先创建了域和生产者,但我在 RabbitMQ 管理窗口中没有看到任何排队的项目。”

创建消费者队列后,我可以看到消息正在排队。

根据我的理解,Producer 从不知道消费者,那为什么 MassTransit 需要消费者队列来启动消息发布呢?

制片人

应用程序

讯息

消费者服务

代码是使用网络上的示例创建的。

编辑还想补充一点,所有命名空间都是不同的项目域生产者消费者

问候,

三月