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

个人怎么做电影相关的网站呼和浩特百度公司

个人怎么做电影相关的网站,呼和浩特百度公司,农业网站开发的实验报告,济南网站建设优化这是本人学习的总结#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、分布式事务的难题2、解决方式2.1、半事务消息和事务回查2.2、代码样例2.2.1、TransactionListener2.2.2、TransactionMQProducer2.2.3、MessageListenerConcurrently2.2.4、流程图 1、分布…这是本人学习的总结主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、分布式事务的难题2、解决方式2.1、半事务消息和事务回查2.2、代码样例2.2.1、TransactionListener2.2.2、TransactionMQProducer2.2.3、MessageListenerConcurrently2.2.4、流程图 1、分布式事务的难题 现有两个系统A向B转钱。A系统扣钱和B系统加钱就应该属于同一个事务任何一个失败都要回滚。两个系统之间唯一的通信方式就是RocketMQ。 以最朴素的想法现在就有两个实现分布式事务的方案。但这两个都有比较大的不可靠性。 A系统先扣钱再发送MQ这样的弊端是无法确定消息有没有发送到MQ或者消息有没有被MQ保存。总之这做法缺少一些回查的机制。A系统先发送MQ再扣钱这样的弊端是发送消息后A系统可能出现错误回滚。而B收到了消息就正常消费完全不知道A那边出了问题。 2、解决方式 2.1、半事务消息和事务回查 半事务消息半事务消息是指向RocketMQ发送一条消息但这个消息只存放在CommitLog中并不在ConsumeQueue展示。也就是说该消息被RocketMQ接收了但是消费者却无法消费到这条消息。事务回查在半事务消息发送成功后。A系统执行事务如果成功则MQ将消息变成正常消息失败则不发送消息。这里如果业务太复杂还不能确定事务是否完成的话还可以发送UNKNOWN给MQ这样MQ就会有定时器去检查事务是否完成。 RocketMQ会向生产者询问是否可以把半事务变成正常的消息让消费者可以消费到。在这篇文章的例子就是询问A系统扣款有没有扣成功。如果成功了那就让B系统消费消息。 所以呢通过半事务消息和事务回查就能保证A系统和发送消息具有事务即扣款失败则不发送消息扣款成功则发送消息。所以半事务消息至少保证了生产者和MQ之间的原子性。MQ和消费者之间的原子性需要另外处理。 消费者需要保证幂等性失败后重试即使称为死信后也特殊处理等操作来保证事务。这个例子中B系统成功加钱的话那交易结束如果尝试多次后还是失败那就需要一个机制来通知A系统让他把扣掉的钱加回去。 2.2、代码样例 2.2.1、TransactionListener 一个接口规范我们需要实现这个接口来定义本地事务和事务回查。 就是本地事务具体执行成功后怎么办失败了怎么办。定时的事务回查如何检查事务有没有完成。这些东西都要定义在TransactionListener的实现中。 TransactionListener transactionListener new TransactionListener() {Overridepublic LocalTransactionState executeLocalTransaction(Message message, Object o) {// 执行本地事务A扣100块// 如果成功// return LocalTransactionState.COMMIT_MESSAGE;// 如果失败// return LocalTransactionState.ROLLBACK_MESSAGE;//或者业务比较复杂不想在这个阶段就关闭事务可以返回Unknown之后就需要MQ定时事务回查return LocalTransactionState.UNKNOW;}Override// 事务回查默认一分钟一次public LocalTransactionState checkLocalTransaction(MessageExt messageExt) {System.out.println(事务回查 new SimpleDateFormat(yyyyMMdd, HH:mm:ss).format(new Date()));// 如果成功// return LocalTransactionState.COMMIT_MESSAGE;// 如果失败// return LocalTransactionState.ROLLBACK_MESSAGE;// 业务比较长还不确定成功或失败返回unknown下次再查return LocalTransactionState.UNKNOW;}};2.2.2、TransactionMQProducer 半事务消息的生产者在DefaultMQProducer的基础上新增了一个重要的参数类型是ExecutorService。这个线程池是用来生产线程去完成事务回查。 但是事务回查的逻辑不需要定义在线程的run()方法中这一部分放在TransactionListener中。 TransactionMQProducer producer new TransactionMQProducer(transaction_producer);producer.setNamesrvAddr(localhost:9876);// build a thread pool used to for MQ to call back to check transactionExecutorService executorService new ThreadPoolExecutor(2, 5, 100, TimeUnit.MINUTES, new ArrayBlockingQueue(10), (r) - {Thread thread new Thread(r);thread.setName(client-transaction-msg-check-thread);return thread;});producer.setExecutorService(executorService);producer.setTransactionListener(transactionListener);producer.start();try{Message msg new Message(transaction_producer, null, A give B 100 dollar.getBytes());SendResult sendResult producer.sendMessageInTransaction(msg, null);}catch(Exception e) {// rollbackSystem.out.println(rollback);}producer.shutdown();2.2.3、MessageListenerConcurrently 消费者部分就比较简单只要listener是MessageListenerConcurrently就好。 DefaultMQPushConsumer consumer new DefaultMQPushConsumer(transaction_consumer); consumer.setNamesrvAddr(localhost:9876); consumer.subscribe(TransactionalTopic, *); consumer.registerMessageListener(new MessageListenerConcurrently() {Overridepublic ConsumeConcurrentlyStatus consumeMessage(ListMessageExt list, ConsumeConcurrentlyContext context) {try{for(MessageExt msg: list) {// simulate DB actionSystem.out.println(update B where transactionId msg.getTransactionId());System.out.println(Success consume msg: msg.getMsgId());}} catch (Exception e) {e.printStackTrace();System.out.println(Failed to consume meg, try more times);// means that failed to consume this msg. In next time will still consume this msg.return ConsumeConcurrentlyStatus.RECONSUME_LATER;}// means that success to consume this msg. In the next time will consume next msg.return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;} });consumer.start(); while(true){ }2.2.4、流程图
http://www.w-s-a.com/news/205788/

相关文章:

  • 提供做网站公司有哪些关键词优化诊断
  • 建站合肥网络公司seo免费建手机商城网站吗
  • 设计师投资做项目网站外贸网站建设工作室
  • 无聊的网站wordpress的alt属性插件
  • 个股期权系统网站开发小清新wordpress模板
  • 全中文网站开发建筑公司企业愿景文案
  • 广州网站建设正规公司建设银行信用卡中心网站
  • 哪个网站是专门做封面素材怎么制作app平台
  • 网站开发 平均工资商标注册在哪个部门申请
  • 做外贸需要自己的网站吗营销型网站建设市场分析
  • 绍兴网站制作推广wordpress 无法自动升级
  • 阿里云建站数据库用什么app制作开发费用多少
  • 中国住房和城乡建设部网站资质查询中小开网站
  • 交易所网站开发水果营销软文
  • 石家庄有什么好玩的地方2017织梦网站怎么做seo
  • wordpress项目插件seo的含义
  • 网站平台建设的作用电影宣传类网页界面设计
  • 户外网站模板国外优秀的平面设计网站
  • 家政网站怎么做网站机房建设方案
  • 学校网站建设运行情况2022年近期舆情热点话题
  • 做淘宝需要知道什么网站吗有没有做软件的网站
  • 安丘网站建设制作做网站和微信小程序
  • 京东网站的建设与发展前景黑龙江建设网官网登陆
  • soho的网站怎么做微网站平台建设方案
  • 网站开发下载阿里云oss做视频网站
  • 东莞营销网站制作做一个网站建设
  • 啥网站都能看的浏览器下载网站后台管理系统展望
  • 新建站点步骤汉中 wordpress联盟
  • 坪山网站设计的公司网站 seo 设置
  • 济南网站设计公司排名如何免费注册网站域名