我正在用C#开发应用程序。 我正在调用一个Web服务(让我们称之为WS1),并且希望将结果发送到1个或多个其他(外部)Web服务(例如WS2和WS3)。
如果其中一个接收Web服务(例如WS2)关闭,我想确保此呼叫不会丢失,并在以后的时间再次尝试。
要实现这一目标,有什么好的架构? 是否有人链接到描述此类架构的在线文档?
答案 0 :(得分:0)
在深入研究体系结构之前,您可能需要问一些问题。我假设WS1和WS2都属于您/您的团队。
简而言之,事件驱动方法最适合这里。也就是说,您可以在WS1和WS2之间有一个队列,以便WS1将消息发布到请求队列中,WS2在准备好后将其拾取并将响应放入WS1可以从中读取的响应队列中。 例。 AWS和Azure。
根据您回答先前查询的方式,此方法可能有效也可能无效。有时,最好将常规的基于REST的调用与重试策略一起使用(示例exponential back off策略)。借助此功能,您还可以更快地获得有关故障的反馈。如果以上问题的答案是
,则可以选择此选项注意,如果您使用基于事件的体系结构,则WS2可能不再是Web服务:)
答案 1 :(得分:0)
我认为,您的Web服务体系结构可能需要负载均衡器。 您可以使用树莓派pi或任何PC,安装linux并运行nginx作为负载均衡器,就像im正在做的事情一样。
您可以在以下位置阅读更多内容 How to configure Nginx as Load Balancer
答案 2 :(得分:-3)
如果我理解正确,那么您正在寻找一种事件驱动的体系结构,可以在其中重播请求。
SNS与SQS的架构解耦相似,可以是主题,也可以是队列。区别在于您是要轮询还是推送这些请求。
SNS用例: 您会将消息推送到SNS主题,该主题将在其中存储消息最多14天。然后,您可以安排SNS主题以将消息传递到其余端点。如果失败,则可以通过将消息放在DLQ(死信队列)上来处理。如果成功,则该消息将从主题中删除。
SQS用例: 您会将消息推送到SNS主题,该主题将在其中存储消息最多14天。然后,如果事件进程将其从队列中删除,则可以轮询队列中的事件。否则,您可以使用DLQ策略,或者只是将消息留在队列中。
一些不错的读物是SNS Fanout strategies