问题标签 [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.
masstransit - 如何从 saga 执行路由单?
我们正在使用 saga 对工作流程进行建模。此工作流等待事件进入并根据事件执行一些工作。在某些情况下,我们需要一个接一个地执行多个任务(链接的 .Then 方法),但如果一个失败,我们想要补偿整个链。路由单似乎合适,但我不确定这样的路由单是否可以从传奇中的 Then 方法执行?
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
unit-testing - 如何对构建和执行路由单的 MassTransit 消费者进行单元测试?
在 .NET Core 2.0 中,我有一个相当简单的 MassTransit 路由单,其中包含 2 个活动。这是在消费者中构建和执行的,并且都与自动状态机相关联。尽管需要进行一些最终的干净调整,但这一切都很好。
但是,我无法确定为我的消费者编写单元测试的最佳方式,因为它会构建路由单。我的消费者中有以下代码:
我创建了 SetupRoutingSlipActivities 方法,因为我认为它可以帮助我编写测试以确保添加了正确的活动,它看起来像:
我尝试使用 Moq 模拟构建器和 MassTransit InMemoryTestHarness 为 SetupRoutingSlipActivities 编写测试,但我发现 AddActivity 方法不是虚拟的,所以我无法验证它:
请忽略代码示例中的一些奇怪数据,因为我只是提供了一个简化版本。
有人对如何做到这一点有任何建议吗?我还想测试以确保创建了 RoutingSlipBuilder 但由于该实例是在 Consume 方法中创建的,所以我不知道该怎么做!我在网上和通过 MassTransit 存储库进行了很多搜索,但没有什么特别突出的。
split - Camel RoutingSlip 需要在 Split 中使用 end()
当使用拆分器和路由单将主体部分路由到不同的端点时,我发现.end()
需要一个以避免包含拆分块之外的任何内容。
所需的行为是拆分主体,使用路由表将每个部分路由到不同的端点。拆分块完成后,继续处理交换(和正文),就像拆分前一样。
测试代码有两条相同的路线,.end()
除了.routingSlip()
. 当测试运行时,您可以看到带有.end()
3 个内部处理器消息和一个外部处理器消息的那个。拆分块完成后,它还将具有正确的有效负载类型。而另一个使用没有 after 的第二条路由的测试将.end()
产生3routingSlip()
个交错的内部和外部处理器消息。
虽然我可能错过了文档中的某些内容,但我找不到任何以这种方式使用拆分器和 routingSlip 的示例,这会警告我我需要.end()
让它按照我的意图运行。如果这不是一个错误,我会建议这个问题的更明显的文档。我可能会更早找到它,但我的原始代码涉及一个自定义拆分器,这并不明显是问题所在,而不是我的代码。
我也不知道这个问题是否也适用于收件人列表或动态路由器。
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
c# - 是否可以将动态数据添加到 MassTransit 快递/路线单自定义事件?
我已配置并运行了 MassTransit 路由单。作为参考,路由单采用 MongoDB 数据库中项目的 ID,然后使用 EF Core 在 SQL 数据库中创建该文档的“版本”。活动(作为命令)是:
- 将文档迁移到 SQL
- 更新 MongoDB 文档中的审计信息
- 更新 MongoDB 文档状态(即已发布)
以上都是写命令。
我添加了一个新的第一步,它在运行迁移之前运行查询以确保 MongoDB 文档有效(例如,名称和描述字段已完成)。如果这一步失败,它会抛出一个自定义异常,进而触发一个失败的事件,然后由我的 saga 拾取和管理。下面是我的活动代码片段,后跟路由单生成器代码:
活动代码
路由单生成器代码
虽然所有这些都有效并且事件被我的传奇所接受,但理想情况下,我希望将 ModuleValidationMessages (即任何失败的验证消息)添加到返回的事件中,但我无法弄清楚如何或即使这是可能的(或更多基本上,如果这样做是正确的)。
值得注意的是,这是最后的检查,并且验证是由客户端在尝试迁移之前检查的,所以更糟糕的情况是我可以让它有“有验证问题”,但理想情况下我想将脱轨包含在响应失败。
c# - MassTransit - 等待所有活动完成,然后继续处理
如果我有很多活动,是否会导致资源阻塞或请求超时?
这是我的场景:
我有一个向消费者发送订单请求的 api 控制器;我使用 Request/Response 模式从消费者那里接收ErrorMessage属性,并基于该属性响应返回,如果它为 null 我想返回OK()
,否则返回BadRequest
或Ok
但带有如下消息:Product out of stock to notify to the client。
在我的消费者中,我建立了一个包含 2 个活动的路由单:
- CreateOrderActivity:创建带有订单详细信息的订单。
ReserveProductActivity:这减少了库存产品的数量,
/li>if product quantity < 0
我将向消费者发布一条带有ErrorMessage的消息并补偿之前的活动。
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)) ...
这种方法有问题吗?我怎样才能实现这样的目标?
谢谢
masstransit - 状态机中路由单的发件箱?
在我的一个状态机操作中,我创建了一个路由单以执行一系列命令。这是通过调用
但有时由于并发问题,saga 提交失败。是否有类似“发件箱”的机制来推迟将路由单发送到总线,直到成功提交传奇?
c# - MassTransit:同步运行执行路由睡眠
我正在寻找如何以routing-sleep
阻塞方式执行。
我需要从http
请求中运行 routing-sleep,而不是从公共交通中运行request/response
,并且在所有活动都完成的情况下返回成功,在活动失败的情况下返回失败。
我知道路由睡眠构建器的订阅。IPublishEndpoint.Execute
到达第一个活动端点后立即解决的问题。
我跟着这个答案。就我而言,它说我需要masstransit
从 ASP.Net 控制器向自己发布请求。
有没有更好的方法来确保所有活动都可以在哪里完成?