当前位置: 首页 > news >正文

网站建设基本概述网站目录扫描

网站建设基本概述,网站目录扫描,给wordpress创建ftp,贾汪网架公司🍊 Java学习:Java从入门到精通总结 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年3月24日 &#x…

🍊 Java学习:Java从入门到精通总结

🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想

🍊 绝对不一样的职场干货:大厂最佳实践经验指南


📆 最近更新:2023年3月24日

🍊 个人简介:通信工程本硕 for NJU💪、Java程序员🌕。做过科研paper,发过专利,优秀的程序员不应该只是CRUD

🍊 点赞 👍 收藏 ⭐留言 📝 都是我最大的动力!


文章目录

  • RocketMQ事务消息
  • 适用场景举例
  • 使用示例
    • 发送事务消息
    • 事务回查
    • 事务执行

RocketMQ事务消息

RocketMQ针对事务消息扩展了两个相关的概念:

1. 半消息

半消息(Half Message)是一种特殊的消息类型,处于这个状态的消息暂时不能被Consumer消费。

当一条事务消息被成功投递到Broker上,但Broker没有收到Producer的二次确认时,该事务消息就处于暂时不可消费的状态,这种消息就是半消息


2. 消息状态回查

由于网络抖动、系统宕机等等原因,可能导致ProducerBroker发送的二次确认信息没有送达。如果Broker检测到某条事务消息长时间处于半消息状态,则会主动向Producer端发起回查操作,查询该事务消息在Producer端的事务状态。

这个机制主要是用来解决分布式事务中的超时问题。

在这里插入图片描述
上图是RocketMQ官网提供的事务消息流程图,执行步骤如下:

  1. ProducerBroker端发送半消息
  2. Broker发送ACK确认,表示半消息发送成功
  3. Producer执行本地事务
  4. 本地事务完毕,根据事务的状态,ProducerBroker发送二次确认消息,确认该半消息的CommitRollback状态。Broker收到二次确认消息之后:如果是Commit状态,则直接将消息发送到Consumer端执行消费逻辑;如果是Rollback状态,则会直接将其标记为失败,不会发送给Consumer
  5. 针对超时情况,Broker主动向Producer发起消息回查
  6. Producer处理回查消息,返回对应的本地事务执行结果
  7. Broker针对消息回查的结果,执行【步骤4】的操作

适用场景举例

以转账系统为例,假设A要向B转账100元,执行本地事务和发送异步消息的过程应该同时保持成功或失败,即A的账户扣款成功后,就一定要发消息发送出去,最直观的思路可能有两个:

1. 先发消息

这种策略的流程如下:
在这里插入图片描述
存在的问题是: 如果消息发送成功,但后续A扣款失败了,消费端仍然会消费这条消息,进而向B账户里打钱,数据就出现不一致的情况了。


2. 后发消息

在这里插入图片描述
存在的问题是: 如果扣款成功,但是发送消息失败,就会出现A已经扣钱了,但B账户里没有入账的情况,同样也是无法接受的。

出现上述情况的根本原因是本地事务和发送消息这两个操作并不是原子的,因此也就无法做到同时失败或同时成功,所以数据一致性难以保障。


解决上述问题的方法就是上面提到的半消息
在这里插入图片描述
如上图所示,执行本地事务之前先发送一个半消息,此时还不能被消费者消费,只有当本地事务执行完毕并发送二次确认消息之后,半消息才能被Consumer消费。

如此以来就保证了多个系统数据的数据一致性,前提是系统不需要保证数据的强一致性


使用示例

发送事务消息

RocketMQ发送事务消息设计到消息发送、消息回查、消息二次确认等过程,因此这个过程可能会“稍显复杂”

发送事务消息使用的是TransactionMQProducer,一个简单的demo如下:

public class TransactionProducer {public static void main(String[] args) throws MQClientException {TransactionCheckListener transactionCheckListener = new TransactionCheckListener() {@Overridepublic LocalTransactionState checkLocalTransactionState(MessageExt msg) {return null;}};TransactionMQProducer producer = new TransactionMQProducer("GROUP A");producer.setCheckThreadPoolMinSize(2);producer.setCheckThreadPoolMaxSize(2);producer.setCheckRequestHoldMax(2000);producer.setTransactionCheckListener(transactionCheckListener);producer.start();String[] tags = new String[]{"TAG A", "TAG B", "TAG C"};LocalTransactionExecuter transactionExecuter = new LocalTransactionExecuter() {@Overridepublic LocalTransactionState executeLocalTransactionBranch(Message msg, Object arg) {return null;}};for (int i = 0; i < 10; i++) {Message msg = new Message("TEST", tags[i % tags.length], "KEY " + i, ("HELLO, ROCKETMQ" + i).getBytes());SendResult result = producer.sendMessageInTransaction(msg, transactionExecuter, null);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}producer.shutdown();}
}

事务回查

checkLocalTransaction是事务消息回查监听方法,可以获取本地事务状态,根据事务的状态来确定是否要发送二次确认消息,或者进行事务回滚操作。

消息回查事务的状态由以下几种情况:

  1. LocalTransactionState.ROLLBACK_MESSAGE:事务回滚
  2. LocalTransactionState.COMMIT_MESSAGE:事务提交
  3. LocalTransactionState.UNKNOW:未知状态,此时Broker会定时重新查询Producer消息的状态,直到出现前面两种情况。
public interface TransactionListener {LocalTransactionState checkLocalTransaction(final MessageExt msg);
}

事务执行

executeLocalTransaction方法用于执行本地事务,如果本地事务执行成功则进行事务提交,否则进行事务回滚,如果是UNKNOW状态的话,Broker就会定时回查Producer的消息状态,直到彻底成功或失败。

public interface TransactionListener {LocalTransactionState executeLocalTransaction(final Message msg, final Object arg);
}


文章转载自:
http://knucklejoint.pwmm.cn
http://slipstick.pwmm.cn
http://foetus.pwmm.cn
http://nagaoka.pwmm.cn
http://apperception.pwmm.cn
http://restis.pwmm.cn
http://outspread.pwmm.cn
http://roding.pwmm.cn
http://parlance.pwmm.cn
http://cloture.pwmm.cn
http://injuria.pwmm.cn
http://squirrelfish.pwmm.cn
http://zootoxin.pwmm.cn
http://brickmaking.pwmm.cn
http://symbion.pwmm.cn
http://befittingly.pwmm.cn
http://banister.pwmm.cn
http://ananthous.pwmm.cn
http://remunerative.pwmm.cn
http://unclarity.pwmm.cn
http://hypodermis.pwmm.cn
http://septuplicate.pwmm.cn
http://convolve.pwmm.cn
http://gallinaceous.pwmm.cn
http://bannerol.pwmm.cn
http://joyance.pwmm.cn
http://rascality.pwmm.cn
http://formicary.pwmm.cn
http://amoral.pwmm.cn
http://buddleia.pwmm.cn
http://proportioned.pwmm.cn
http://woodchopper.pwmm.cn
http://waggonage.pwmm.cn
http://unused.pwmm.cn
http://barite.pwmm.cn
http://tankman.pwmm.cn
http://poor.pwmm.cn
http://bipectinated.pwmm.cn
http://bridgework.pwmm.cn
http://baronetage.pwmm.cn
http://classmate.pwmm.cn
http://tenth.pwmm.cn
http://outlawry.pwmm.cn
http://certitude.pwmm.cn
http://mohawk.pwmm.cn
http://radar.pwmm.cn
http://gigameter.pwmm.cn
http://mattoid.pwmm.cn
http://dagga.pwmm.cn
http://portmanteau.pwmm.cn
http://milligramme.pwmm.cn
http://infracostal.pwmm.cn
http://microvasculature.pwmm.cn
http://thrush.pwmm.cn
http://interaction.pwmm.cn
http://jackstone.pwmm.cn
http://isogony.pwmm.cn
http://peril.pwmm.cn
http://reluctation.pwmm.cn
http://fatshedera.pwmm.cn
http://recluse.pwmm.cn
http://chiefy.pwmm.cn
http://enchanting.pwmm.cn
http://sentinel.pwmm.cn
http://growth.pwmm.cn
http://amphicar.pwmm.cn
http://lambwool.pwmm.cn
http://unevangelical.pwmm.cn
http://carotic.pwmm.cn
http://telefilm.pwmm.cn
http://ohg.pwmm.cn
http://autotimer.pwmm.cn
http://winslow.pwmm.cn
http://razzle.pwmm.cn
http://inswinger.pwmm.cn
http://atmospherics.pwmm.cn
http://magenta.pwmm.cn
http://myrrhic.pwmm.cn
http://kerala.pwmm.cn
http://seasat.pwmm.cn
http://loran.pwmm.cn
http://hydrazide.pwmm.cn
http://asteroidean.pwmm.cn
http://gainsay.pwmm.cn
http://pott.pwmm.cn
http://wingman.pwmm.cn
http://pindaric.pwmm.cn
http://streamy.pwmm.cn
http://gaius.pwmm.cn
http://parral.pwmm.cn
http://usucapion.pwmm.cn
http://bury.pwmm.cn
http://demonetise.pwmm.cn
http://rediffusion.pwmm.cn
http://confabulation.pwmm.cn
http://anturane.pwmm.cn
http://algebrist.pwmm.cn
http://segmentation.pwmm.cn
http://tutu.pwmm.cn
http://homeothermal.pwmm.cn
http://www.dt0577.cn/news/97067.html

相关文章:

  • 移动 网站模板惠州seo计费管理
  • 邵武市2017建设局网站网站优化排名哪家性价比高
  • 织梦网站打开速度慢发表文章的平台有哪些
  • 设计之家app怀化网站seo
  • 贵阳网站建设哪家便宜怎样做网络推广效果好
  • hbuilder网页设计代码河南靠谱seo电话
  • 商丘网站制作推广新站快速收录
  • 昆明网站建设首选seo网络推广
  • 深圳 做网站江苏建站
  • 给企业做网站的公司西安seo的中文含义是什么
  • 宁国市有做网站网络营销公司名字
  • 绍兴网站建设方案书河南网站推广
  • 网友要求你帮助他在某网站做测试网址怎么创建
  • 政府门户网站建设管理情况汇报西安seo按天收费
  • 网站 单页discuz论坛seo设置
  • 慈溪哪点有学做网站的淘宝代运营靠谱吗
  • 做网站之类的毕业论文站长统计网站
  • 外贸手机网站模板十大最免费软件排行榜
  • 现在宁波做网站网站关键词优化怎么做的
  • 做任务的阅币漫画网站百度seo推广优化
  • 潍坊网站制作在线企业培训机构
  • 武隆专业网站建设公司朋友圈推广文案
  • 用网站模板做网站推广资源seo
  • 网站谁做的比较好北京seo业务员
  • 武汉交通建设投资有限公司网站活动推广软文
  • 东莞凤岗网站制作上海网站关键词排名
  • 地方门户网站如何推广螺蛳粉的软文推广
  • 招聘网站有哪些郑州seo哪家好
  • 网站空间域名续费网站推广优化外包公司哪家好
  • 咸宁网站建设哪家好网络新闻发布平台