2010-09-02 26 views
1

请在以下几点建议:事务执行器重试?

我正在使用ThreadPoolTask​​Executor来执行缓慢的外部任务,如发送电子邮件。

我需要改进: 1)当一个任务被传递给执行器时,它必须等待执行它,直到至少传递操作的事务完成。 例子:当订单处理失败时,我没有任何意义发送电子邮件,并产生承诺时发生的异常

2)当任务失败时,会使用一些重试机制再次尝试任务。 示例:发送邮件失败时,将在5,10分钟后重试,然后抛出异常。

如何处理这些问题?应我只是集成一些队列,提供这项功能..

埃德

回答

1

我会说:是在消息传递基础结构使用的队列。

就我个人而言,我会使用骆驼为此,因为我完全被骆驼打败,并会使用它,如果我会重新编程我的烤面包机在早餐时烤面包片金棕色。

既然你要发邮件,它将是基于消息的,所以使用基于消息的系统已经可以减少阻抗不匹配。

现在,作为事务处理,重试以及将信息停放在死信队列中的事情就成为这些事情的标准。这很好,因为当电子邮件服务器发生灾难时,您可以通过重新提交来自死信队列的消息来避免麻烦。

集成ActiveMQ或Camel只是在弹簧配置中添加了一些依赖关系和5-10行。

一旦它在那里,它是美丽的组织后台处理,通知远程系统,自动化电子邮件响应,通知系统管理员即将厄运,...你发送一条消息,继续你在做什么,回应客户,而在后台轮子转动。

好的,对不起:我被带走了,太抒情了。

+0

感谢您的快速响应。因此bascially我不需要启动一个“单独”的排队服务器,而是只需添加一些jar的,它会自动启动......我的意思是:我喜欢它,我只需要启动Spring,而不是其他的东西,并继续测试简单... – edbras 2010-09-02 14:56:33

+0

是的。对于测试,这些东西都是直接模拟的接口的实现。发送电子邮件是Camel的标准组件,因此不需要进行单元测试,只需要通过测试来验证它是否已正确配置。 – 2010-09-02 15:15:10

+0

只有一件事:我读了骆驼路由流量非常好。除了电子邮件,我还希望执行代码(以命令模式捕获),它将使HTTP连接检索必须放入本地数据库的一些信息。骆驼是否也非常适合这类作业?所以基本上:使这些操作不同步,让他们在发生故障时重试... – edbras 2010-09-02 18:04:36