如何解决消息发送一致性
来源:互联网 发布:淘宝女装羊毛衫 编辑:程序博客网 时间:2024/05/22 06:05
消息发送一致性是什么?
是指产生消息的业务动作与消息发送的一致,就是说,如果业务操作成功了,那么对应的消息一定要发送出去,否则就丢失消息了。而另一方面,如果这个业务行为没有发生或者失败,那么就不应该把消息发出去。
消息发送一致性很难保证吗?
void test(){ //业务操作 //列如写数据库,调用服务等 //发送消息} void test(){ // 发送消息 //业务操作 //列如写数据库,调用服务等}
上面伪代码不管哪一步出现问题了,都很难保持一致性。虽然在实践中,第一种丢失消息的比例相对第二种是很低的。但是,要求保证一致性的场景,上面的两种方案都不能接受。
使用JMS可以实现消息一致性吗?
用过JMS的都知道,JMS的API种,有很多XA开头的接口。其实如果不实用XA系列的接口实现,那么我们就无法直接得到发送消息给消息中间件及业务操作这两个事情的事物保证,而JMS中定义的XA系列的接口就是为了实现分布式事务的支持(发送消息和业务操作很难做在一个本地事务中)。但是会有如下问题:
1.引入了分布式事务,这会带来一些开销并增加复杂性。
2.对于业务操作有限制,要求业务操作的资源必须支持XA协议,才能够与发送消息一起来做分布式事务。这会成为一个限制,因为并不是所有需要与发送消息一起做成分布式事务的业务操作都支持XA协议。
其他的办法?
JMS可以解决一致性问题,但是存在一些限制并且成本相对较高。那么有没有其他的办法呢?如图所示方案。
可能这个过程当中会出现很多异常,下面具体分析下。
那么如何了解业务操作的结果呢?
下面展示了这个过程。由消息中间件主动询问业务应用,获取待处理消息所对的业务操作的结果,然后业务应用需要对业务操作结果进行检查,并且把结果发送给消息中间件,然后根据这个结果,更新状态。
本文采用 http://creativecommons.org/licenses/by-sa/3.0/cn/‘>知识共享署名-相同方式共享 3.0 中国大陆许可协议,转载、引用前需联系作者,并署名作者且注明文章出处 。
- 如何解决消息发送一致性
- 如何发送WM_NOTIFY消息
- 分布式事务(1)消息发送一致性解决方案
- 如何解决Nginx的session一致性问题
- 如何向窗口发送消息
- 如何给线程发送消息
- 如何解决 您需要添加对方为好友,才能给对方发送会话消息
- 分布式事务解决方案之消息发送一致性(可靠消息的前提保障)
- tigase rest Api 发送消息 解决消息中文乱码问题
- 如何调用NetMessageBufferSend发送消息?(改编)
- 如何调用NetMessageBufferSend发送消息?(改编)
- VC++6.0中如何发送自定义消息
- 如何更改msn发送消息的快捷键
- 如何向CEDIT发送EN_CHANGE消息
- VC++6.0中如何发送自定义消息
- PushSharp如何向APNS发送消息
- QQ群如何发送匿名消息
- Hanlder SendMessage 如何发送字符串或消息
- Java编程时如何节省内存,效率高
- SkyLine_BS_二次开发_WMS服务加载
- session多服务器共享的方案梳理
- [疯狂Java]AWT:位图IO
- android 手势解锁的实现
- 如何解决消息发送一致性
- 高斯消元法理解关灯问题
- android Fragment TabHost 的使用
- openssl生成证书,双向验证
- 解决WIN10“系统和压缩内存”“ntoskrnl.exe”系统空闲时占用大量CPU
- 第2周项目 1到m的平方和
- Linux信号量详解
- Android Volley完全解析(三),定制自己的Request
- C# Devexpress gridControl 自定义编辑器 设置弹出框(弹出框包含gridLookUpEdit)