[英]Message Queueing Scenario - Queueing and remote web service
(请参阅下面的幻灯片链接)我正在尝试创建与远程Web服务交互的,可审核的请求和响应服务。 我在为我的方法选择正确的实现时遇到一些麻烦。 基本上,我需要执行该工作的方式如下。
请求者应用程序(A)将生成请求XML,并将其添加到请求“队列”中。 然后,请求处理器将从“队列”中获取未处理的记录,并将其发布到具有唯一ID的远程Web服务(X),如果请求未成功,则请求将被保留/(requestComplete标志= 0) “队列”将在以后的时间重试。
如果请求成功它被保持/(requestComplete标志= 1),并且不重试
稍后,接收者Web服务(B)从请求中调用的“ X”服务接收响应。
然后,“ B”搜索请求记录以查找原始请求,并将“ A”请求和“ X”响应相关联(使用唯一ID进行匹配)。
响应会执行一些其他处理,并且来自“队列”的记录将更新为已完成。
这样,从请求到响应都有完整的审核跟踪。 通过查看“队列”记录,可以看到原始请求是何时发出的,如果请求有错误。 同样,通过响应,我可以看到何时收到响应。
我曾考虑过两种实现此方法的方法。
只是一些注意事项:
如果有人对采用哪种方法有任何建议或指导,对上述方案的最佳做法有任何意见或知识,那将是非常有益的。
我建议您查看带有sagas的服务总线(我的首选是Rhino Service Bus ,但NServiceBus也有很多吸引力,并且还有Mass Transit )
基本上,服务总线将处理排队(又称为发送)和出队(又称为接收和处理)的消息。 然后,传奇将帮助维护对话的状态(对话包含多个消息)。
Rhino Service Bus中的延迟消息和NServiceBus中的超时(我没有使用Mass Transit的经验)可以很好地处理稍后重试的问题。
我会将结果日志存储在数据库中,以使其更易于查询和报告。 我还宁愿将服务总线与MSMQ(或任何其他队列)一起使用,而不是将数据库表用作“队列”-前者是专门为您的情况设计的,而后者是一种更通用的产品,可以处理许多不同的情况,并且因此,它不会像队列实现(例如MSMQ)那样高效(尽管它可以做到-但扩展变得更加困难)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.