c# - NServiceBus - 基于内容的路由和审计 - 我的方法可以吗?

标签 c# .net architecture nservicebus nservicebus-distributor

在设计我们系统中的消息流时,我很难决定采用哪种方式。

由于我们业务流程的易变性(即计算运费),我们使用工作流框架来动态更改流程。

一般过程应该是这样的workflow handling process
该接口(interface)是一种服务,它通过客户提供的任何接口(interface)(web 服务、tcp 端点、数据库轮询、文件,随便你怎么说)连接到客户系统。然后将包含接收到的数据和要执行的工作流 ID 的命令发送到执行器。

第一个问题出现在我们想要在多个工作服务上分配负载的地方。
假设我们有不同的流程,例如打印包裹标签、计算价格、发送通知邮件。打印标签应该永远不会因为执行了大量的邮寄工作流而被延迟。因此,我们希望能够根据他们所做的工作将命令路由到不同的工作人员。

因为所有命令都像“执行工作流 XY”,所以我们需要实现我们自己的基于内容的路由。 NServicebus 不支持开箱即用,大多数时候是因为它是一种反模式。

当您无法使用不同的消息类型来路由消息时,是否有更好的方法来做到这一点?

第二个问题出现在我们想要添加监控的时候。因为端点只能为每种消息类型订阅一个队列,所以我们不能让所有执行者只发布一条“我完成了一个工作流”消息。当前的解决方案是将消息Bus.Send 发送到预先配置的审核端点。这对我来说有点像作弊;)

有没有更好的方法将多个worker发布的消息重新合并到一个queue中?如果没有问题 #1,我认为所有工作人员都可以使用相同的输入队列,但是在这种情况下这是不可能的。

最佳答案

您可以尝试让您的路由不是基于内容,而是基于 header ,这应该更容易。您对工作流程是否打印标签不感兴趣,您感兴趣的是此命令是否优先。所以您可以将此信息添加到邮件 header 中...

关于c# - NServiceBus - 基于内容的路由和审计 - 我的方法可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9149261/

相关文章:

c# - 来自不同地方的相同类型异常

c# - 使用现有API的.Net中事件的线程上下文是什么?

c# - 用户的账户余额应该存储在数据库中还是动态计算?

c# - 当只有我知道它的后代时,在 XPATH 中获取一个值?

android - Android 与其他 Linux 有何不同?

java - 我可以有一个接口(interface)实例吗

c# - Windows 身份验证在服务器上不起作用

c# - 如何将 xaml 转换为代码隐藏?

c# - 如何关闭打开的StorageFile?

c# - 取消 NamedPipeClientStream.Read 调用