java – 如何保证JMS可靠的交付
我认为使用JMS的很多(我的情况下是Spring)应用程序可能会遵循以下工作流程:
然后可靠性是一个问题.假设当数据库A中的数据记录应始终标记为已传递时,如果消息包含数据记录,则会真正使用数据记录,并将数据保留在数据库B中.然后有问题: >据我所知,目前JMS协议没有定义任何从消费者向生产者发送确认的功能,而只定义为MOM,因此实际的消费者对生产者确认方法因JMS提供者而异.那么这是否意味着没有办法为这种确认开发一种可以适用于所有JMS产品(ActiveMQ,WebSphere MQ和Jboss MQ)的机制? 最佳答案
JMS保证了消息的本质传递,如果消息被发布,那么无论发生什么,它都会传递给消费者,无论发生什么,MOM都是为了确保这一事实而设计的.无论如何,交付没有必要意味着处理.
各种机制确保可靠性: >第一个是队列中消息的持久性(队列和消息必须标记为持久性,这是默认值),以确保在系统中断时不会丢失消息. 为了确保两个数据源之间的一致性,您必须至少在生产者端使用XA事务(事务数据库A和JMS队列中至少隐含了2个资源),以保证消息不会发布到队列,如果数据库A中的提交失败,或者如果队列中的帖子失败,则不会更新数据库.消息消耗也应该进行处理以确保在回滚的情况下重新传递. 事务边界永远不会同时包含使用者和生产者,因为它与消息传递系统的异步性质相冲突,在消费者处理消息之前你无法锁定生产者端的资源,因为你无法保证什么时候会消息发生. 注意:如果您的数据库不支持XA(或提高性能),并且如果事务中只隐含了2个资源(数据库和JMS队列),您可以查看Logging Last Resource Transaction Optimization (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |