寻找合适的设计模式来实现单线程机制

问题描述:

我在我的WebSite应用程序中有第三方支付解决方案。就像贝宝一样。
用户在第三方网站上付款后,我需要去“服务器到服务器”基础API并检查是否存款成功。寻找合适的设计模式来实现单线程机制

我想要做的是写一个静态单例会员有人出去存款的事件。

我将在后面运行一个单线程并检查是否已完成某些存款。
如果成功或失败,请调用某种方法。如果根本没有关于特定用户的结果,则在一小时后杀死该线程。

在底线,只有当我有存款请求时,线程才需要运行。
一旦结果在提供者服务器上,线程将被销毁。

有什么样的设计模式来实现这样的事件?
您对这种机制有何看法?

感谢

你最好不要依赖于低级别的功能(如线程创建)来实现您的结算功能。

更好的解决方案是将指示支付意向的条目存储到数据库,并且安排一些cron任务来检查付款是否已完成。

此外,与贝宝你不需要检查付款是否由自己完成; IIRC,你只是从服务器发送同步HTTP请求到贝宝(在用户从贝宝网站用所有适当的令牌返回给你)之后,贝宝的回应将包含付款是否成功的信息。所以即使没有任何长寿命的对象,例如数据库条目或系统线程,也可以实现贝宝整合。

+0

这不是贝宝,但从来没有少,70%的外出到第三方存款的人不会点击“返回商户”。我正在使用C#,在这里有一个线程执行有什么问题?谢谢 – SexyMF 2012-02-21 05:54:19

+0

我的观点是,使用paypal(至少在我的API已经使用过的情况下)“返回给商家”是付款流程的必需部分。控制流程如下:当客户按下网站上的“结账”按钮时,他们被重定向到PayPal网站,在那里提示他们输入凭证并显示订单描述和金额;经过授权,PayPal将客户重定向回您的网站,并在其中获得订单确认按钮以及其他信息;当他们按下这个按钮时,你的服务器向PayPal发送一个同步请求, – penartur 2012-02-21 06:11:21

+0

提交事务(如果可能),响应事务是否成功,并且你正在同一个工作线程中同步处理这个请求你处理用户按钮按/表单提交。 – penartur 2012-02-21 06:12:30

如果您有另一个定期检查付款的过程,那么您可以更好地分离关注点。让用户将其付款发布到第三方网站,并让另一个流程实际处理付款。此过程可以在您的业务案例的任何时间间隔内定期运行。分配某种唯一标识符,以便识别用户和付款。

启动线程执行检查并没有任何好处。这只会导致更多潜在的问题(想想如果IIS决定回收或者您的数据中心被淹没了会发生什么?)。这类问题出现难以重现,并可能导致数小时的生产力损失和头痛,这就意味着成本。