(请参阅下面的幻灯片链接)我正在尝试创建与审计能力的请求和响应服务,该服务与远程Web服务交互。我在确定我的方法的正确实现方面遇到了一些麻烦。基本上,我需要实现如何工作如下。
请求者应用程序(A)将生成请求XML并将其添加到请求“队列”。一个 然后,请求处理器将从“队列”中获取未处理的记录 将其发布到具有唯一ID的远程Web服务(X),如果请求不成功请求保留/(requestComplete flag = 0)在请求'队列'中重试晚点。
如果请求 成功,则会保留/(requestComplete flag = 1)并且不会重试
稍后,Receiver Web服务(B)会收到来自请求中调用的“X”服务的响应。
'B'然后搜索请求记录以查找原始请求并关联'A'请求和'X'响应(使用唯一ID进行匹配)。
对响应进行了一些额外的处理,“队列”中的记录更新为已完成。
通过这种方式,可以获得从请求到响应的完整审计跟踪。我可以看到原始请求何时发出,如果通过查看“队列”记录而发出请求错误。同样的响应,我可以看到它何时被收到。
我有两种方法可以实现这一点。
只是几点说明:
如果任何人对处理上述情景的最佳做法有任何建议或指导,任何评论或任何知识,那将是非常有益的。
答案 0 :(得分:1)
我建议看一辆带有传奇的服务巴士(我的偏好是Rhino Service Bus,但NServiceBus也有很多牵引力,还有Mass Transit)
基本上,服务总线将处理排队(也称为发送)消息和出队(也称为接收和处理它们)的管道。然后,一个传奇将协助维持对话的状态(对话由多个消息组成)。
以后重试的问题可以非常优雅地处理Rhino Service Bus中的延迟消息,以及NServiceBus中的超时(我没有Mass Transit的经验)。
我会将结果日志存储在数据库中,以便于查询和查询。报告。我还宁愿使用带有MSMQ(或任何其他队列)的servicebus,而不是使用数据库表作为“队列” - 前者是为您的场景精确设计的,而后者是处理许多不同场景的更通用的产品。因此它不会像队列实现那样有效(例如MSMQ)(虽然它可以做到 - 但缩放变得更难)。