【发布时间】:2012-02-14 00:11:28
【问题描述】:
我工作的地方是试图建立一些基本规则,而我们现在的争论是本地库与 Web 服务的代码重用。 Web 服务似乎是大多数公司的热门选择,这也是这里的大多数开发人员所倾向于的。
我只是不明白如何有效地使用 Web 服务进行任何严肃的工作。如果我不能使用事务,如何安全地执行多个服务调用?
假设我有一个 cron 作业,它从我们的数据库中抓取满足特定条件的客户,这些客户需要得到通知。他们会收到一份传真、一封电子邮件,并创建一张票以在内部跟踪问题。也就是说,for 循环中的每个客户都会发生 3 次不同的服务调用。
如果其中任何地方发生错误,例如,可能会向客户发送传真和电子邮件,但未创建票证。或者更糟糕的是,这个 cron 作业可能包含一个错误,导致它每次都在同一点失败,并且它反复向同一个客户发送电子邮件。如果库都是本地的,那么一切都可以包装在事务中,而这一切都不会发生。但是我们在这个例子中使用了网络服务。
请注意,电子邮件和传真方法实际上将数据插入到电子邮件队列和传真队列中,而这又由 cron 作业处理。因此对“发送电子邮件”和“发送传真”服务方法的调用可以安全回滚。
一种选择是将整个代码块放在 Web 服务本身中,这样 Web 服务本身就会在事务中调用电子邮件、传真和票证创建方法。但是我们正在创建一个仅用于事务的 Web 服务方法;除了这个 cron 脚本之外,我们没有任何正当理由需要从任何地方调用此方法。
您一般会如何处理这种方法?
【问题讨论】:
标签: web-services service soa