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