在我们的系统中设计消息流时,我很难决定采用哪种方式。
由于我们的业务流程(即计算运费)的易变性质,我们使用工作流框架能够即时更改流程。
一般过程应该是这样
的 接口是一个服务,它通过客户提供的任何接口(webservices、tcp 端点、数据库轮询、文件,你命名它)连接到客户系统。然后向执行器发送一个命令,其中包含接收到的数据和要执行的工作流的 id。
第一个问题出现在我们想要在多个工作服务上分配负载的地方。
假设我们有不同的流程,例如打印包裹标签、计算价格、发送通知邮件。打印标签永远不应延迟,因为执行了大量的邮寄工作流程。所以我们希望能够根据他们所做的工作将命令路由到不同的工作人员。
因为所有命令都类似于“执行工作流 XY”,所以我们需要实现我们自己的基于内容的路由。NServicebus 不支持这个开箱即用,大多数时候是因为它是一种反模式。
当您无法使用不同的消息类型来路由消息时,是否有更好的方法来做到这一点?
当我们要添加监控时,第二个问题就出现了。因为端点只能为每种消息类型订阅一个队列,我们不能让所有执行者只发布“我完成了工作流”消息。当前的解决方案是将Bus.Send
消息发送到预配置的审计端点。这对我来说有点像欺骗;)
有没有更好的方法将多个工作人员的已发布消息再次合并到一个队列中?如果没有问题#1,我认为所有工作人员都可以使用相同的输入队列,但是在这种情况下这是不可能的。