在设计系统中的消息流时,我在决定选择哪种方式时遇到了一些小麻烦。
由于业务流程的不稳定性(即计算运费),我们使用工作流框架来动态更改流程。
一般的过程应该是这样的

接口是一个服务,它通过客户提供的任何接口( you服务、tcp端点、数据库轮询、文件,您可以命名)连接到客户系统。然后,将一个命令发送给执行者,其中包含要执行的工作流的接收数据和id。
第一个问题出现在我们想要在多个工作服务上分配负载的时候。
比如说,我们有不同的程序,比如打印包裹标签,计算价格,发送通知邮件。如果不会因为大量邮件工作流的执行而延迟打印标签,那么就永远不会延迟。因此,我们希望能够根据不同的工人所做的工作将命令路由到不同的员工。
因为所有命令都类似于“执行工作流XY”,所以我们需要实现自己的基于内容的路由。NServicebus不支持这一点,大多数时候是因为它是反模式的。
当您无法使用不同的消息类型来路由您的消息时,是否有更好的方法来做到这一点?
第二个问题是在我们想要添加监视时出现的。因为端点只能为每种消息类型订阅一个队列,所以不能让所有执行者只发布一条“我完成了一个工作流”消息。当前的解决方案是将消息Bus.Send到预先配置的审计端点。这对我来说有点像欺骗;)
是否有更好的方法再次将多个工作人员发布的消息合并到一个队列中?如果没有问题#1,我认为所有工作人员都可以使用相同的输入队列,但是在这个场景中这是不可能的。
发布于 2012-02-05 13:19:12
您可以尝试使您的路由不是基于内容的,而是基于头的,这应该容易得多。如果工作流是否要打印标签,则您不感兴趣,您感兴趣的是此命令是否具有优先级。所以你可以把这个信息添加到消息头中.
https://stackoverflow.com/questions/9149261
复制相似问题