问题标签 [routing-slip]

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 回答
927 浏览

masstransit - 如何从 saga 执行路由单?

我们正在使用 saga 对工作流程进行建模。此工作流等待事件进入并根据事件执行一些工作。在某些情况下,我们需要一个接一个地执行多个任务(链接的 .Then 方法),但如果一个失败,我们想要补偿整个链。路由单似乎合适,但我不确定这样的路由单是否可以从传奇中的 Then 方法执行?

0 投票
1 回答
146 浏览

c# - 从 MT 2.9.5 迁移到 4.0.1 并获得“RoutingSlip 必须包含至少一个活动日志”

我们已经开始了从 MassTransit 2.9.5(带有 Courier 插件)迁移到 MassTransit 4.0.1 的旅程。事情进展得很慢,但是好的,我对新的(对我们而言)功能感到兴奋......但我已经与 Courier 碰壁了。

这是一个简单的 Activity,它具有执行和补偿行为:

当我执行包含此活动的路由单时,它会执行(我看到日志,并且可以单步执行代码).. 但是之后return context.Completed(compLog),我们在控制台中得到一个异常(也在这里的错误队列消息中捕获):

I've read through the documentation here (http://masstransit-project.com/MassTransit/advanced/courier/), but nothing's jumping out at me as wrong (aside from a bit of difference in naming of some things between the doc's code samples and current MT 4.0.1).

What is the proper way to store a compensation log entry on completion of an activity in MT 4.0.1? and/or is there something else I might be doing wrong that is manifesting itself as this exception even though I am providing a compensation log value?

Thanks,

Tyler

0 投票
1 回答
1180 浏览

unit-testing - 如何对构建和执行路由单的 MassTransit 消费者进行单元测试?

在 .NET Core 2.0 中,我有一个相当简单的 MassTransit 路由单,其中包含 2 个活动。这是在消费者中构建和执行的,并且都与自动状态机相关联。尽管需要进行一些最终的干净调整,但这一切都很好。

但是,我无法确定为我的消费者编写单元测试的最佳方式,因为它会构建路由单。我的消费者中有以下代码:

我创建了 SetupRoutingSlipActivities 方法,因为我认为它可以帮助我编写测试以确保添加了正确的活动,它看起来像:

我尝试使用 Moq 模拟构建器和 MassTransit InMemoryTestHarness 为 SetupRoutingSlipActivities 编写测试,但我发现 AddActivity 方法不是虚拟的,所以我无法验证它:

请忽略代码示例中的一些奇怪数据,因为我只是提供了一个简化版本。

有人对如何做到这一点有任何建议吗?我还想测试以确保创建了 RoutingSlipBuilder 但由于该实例是在 Consume 方法中创建的,所以我不知道该怎么做!我在网上和通过 MassTransit 存储库进行了很多搜索,但没有什么特别突出的。

0 投票
1 回答
1518 浏览

split - Camel RoutingSlip 需要在 Split 中使用 end()

当使用拆分器和路由单将主体部分路由到不同的端点时,我发现.end()需要一个以避免包含拆分块之外的任何内容。

所需的行为是拆分主体,使用路由表将每个部分路由到不同的端点。拆分块完成后,继续处理交换(和正文),就像拆分前一样。

测试代码有两条相同的路线,.end()除了.routingSlip(). 当测试运行时,您可以看到带有.end()3 个内部处理器消息和一个外部处理器消息的那个。拆分块完成后,它还将具有正确的有效负载类型。而另一个使用没有 after 的第二条路由的测试.end()产生3routingSlip()个交错的内部外部处理器消息。

虽然我可能错过了文档中的某些内容,但我找不到任何以这种方式使用拆分器和 routingSlip 的示例,这会警告我我需要.end()让它按照我的意图运行。如果这不是一个错误,我会建议这个问题的更明显的文档。我可能会更早找到它,但我的原始代码涉及一个自定义拆分器,这并不明显是问题所在,而不是我的代码。

我也不知道这个问题是否也适用于收件人列表或动态路由器。

0 投票
1 回答
243 浏览

masstransit - 有没有办法从错误的活动中执行补偿

假设我已经定义了路由单活动。在 Execute 方法中,我想进行几个异步服务调用。让我们假设 3 个服务调用。其中两个成功,一个失败。然后我想执行此活动的补偿操作,以补偿两次成功的服务调用引入的更改。从我看到的补偿仅针对以前的活动运行,当前活动补偿在其中某处出现异常时没有机会被调用。有没有办法处理它或者我应该改变方法?

我想达到类似于在此处输入图像描述 使用 MassTransit 的目的。

0 投票
1 回答
524 浏览

masstransit - Dependency injection in Masstransit routing slip Activity

I working on a project using masstransit Courier. I am trying to inject some service dependencies into my Activities but this is not working. Can someone help how to use DI in MT activity. I could not find any working example with Activity implementation and DI

In my below code I am trying to inject IMyservice into my activity. But my activity constructor is never executing. Am I doing something wrong here?

my service program code ActivityService.cs

My program.cs

0 投票
1 回答
481 浏览

c# - 是否可以将动态数据添加到 MassTransit 快递/路线单自定义事件?

我已配置并运行了 MassTransit 路由单。作为参考,路由单采用 MongoDB 数据库中项目的 ID,然后使用 EF Core 在 SQL 数据库中创建该文档的“版本”。活动(作为命令)是:

  1. 将文档迁移到 SQL
  2. 更新 MongoDB 文档中的审计信息
  3. 更新 MongoDB 文档状态(即已发布)

以上都是写命令。

我添加了一个新的第一步,它在运行迁移之前运行查询以确保 MongoDB 文档有效(例如,名称和描述字段已完成)。如果这一步失败,它会抛出一个自定义异常,进而触发一个失败的事件,然后由我的 saga 拾取和管理。下面是我的活动代码片段,后跟路由单生成器代码:

活动代码

路由单生成器代码

虽然所有这些都有效并且事件被我的传奇所接受,但理想情况下,我希望将 ModuleValidationMessages (即任何失败的验证消息)添加到返回的事件中,但我无法弄清楚如何或即使这是可能的(或更多基本上,如果这样做是正确的)。

值得注意的是,这是最后的检查,并且验证是由客户端在尝试迁移之前检查的,所以更糟糕的情况是我可以让它有“有验证问题”,但理想情况下我想将脱轨包含在响应失败。

0 投票
2 回答
1403 浏览

c# - MassTransit - 等待所有活动完成,然后继续处理

如果我有很多活动,是否会导致资源阻塞或请求超时?

这是我的场景:

我有一个向消费者发送订单请求的 api 控制器;我使用 Request/Response 模式从消费者那里接收ErrorMessage属性,并基于该属性响应返回,如果它为 null 我想返回OK(),否则返回BadRequestOk但带有如下消息:Product out of stock to notify to the client

在我的消费者中,我建立了一个包含 2 个活动的路由单:

  • CreateOrderActivity:创建带有订单详细信息的订单。
  • ReserveProductActivity:这减少了库存产品的数量,if product quantity < 0我将向消费者发布一条带有ErrorMessage的消息并补偿之前的活动。

    /li>

ReserveProductActivity 的代码:

消费者方法中的这行代码await context.Execute(builder.Build())

起初我认为它会在进入下一行之前先构建路由单并执行所有活动,但事实并非如此。相反,它会立即转到下一行代码(响应回控制器),然后在执行活动之后,这不是我想要的。我需要先检查第二个活动中的产品数量,然后再根据返回给控制器。

(目前,它总是首先响应控制器 - 之后的行buider.Buid(),然后如果quantity < 0它仍然进入第一个 if 条件的消费方法,但由于它已经响应,我无法再次触发该 if 语句内的响应)。

所以简而言之,如果产品在第二个活动中仍然可用,我可以像往常一样发回响应(它在之后执行代码context.Execute(builder.Build()),但是如果- 我使用ErrorMessagequantity < 0发布回消费者方法,我希望它跳转到非常首先如果 Consume 方法 ( ) 的条件和基于ErrorMessage通知客户端。if(!string.IsNullOrEmpty(context.Message.ErrorMessage)) ...

这种方法有问题吗?我怎样才能实现这样的目标?

谢谢

0 投票
1 回答
60 浏览

masstransit - 状态机中路由单的发件箱?

在我的一个状态机操作中,我创建了一个路由单以执行一系列命令。这是通过调用

但有时由于并发问题,saga 提交失败。是否有类似“发件箱”的机制来推迟将路由单发送到总线,直到成功提交传奇?

0 投票
1 回答
165 浏览

c# - MassTransit:同步运行执行路由睡眠

我正在寻找如何以routing-sleep阻塞方式执行。
我需要从http请求中运行 routing-sleep,而不是从公共交通中运行request/response,并且在所有活动都完成的情况下返回成功,在活动失败的情况下返回失败。

我知道路由睡眠构建器的订阅。IPublishEndpoint.Execute到达第一个活动端点后立即解决的问题。

我跟着这个答案。就我而言,它说我需要masstransit从 ASP.Net 控制器向自己发布请求。
有没有更好的方法来确保所有活动都可以在哪里完成?