11 springboot Consolidated rocketmq Implementation transaction message

Java1234Xiaofeng. 2021-09-15 09:17:20
springboot consolidated rocketmq implementation transaction


Le message de transaction estRocketMQUne caractéristique très importante offerte,In4.xOpen source après la version,Les transactions distribuées peuvent être facilement réalisées avec des messages de transaction.

RocketMQSur la base de sa définition de message,Deux concepts connexes ont été étendus aux messages transactionnels:

Half(Prepare) Message——Demi - message(Message de prétraitement)

Un demi - message est un type particulier de message,Le message de cet état ne peut pas être temporairementConsumerConsommation.Lorsqu'un message de transaction est envoyé avec succès àBrokerAllez.,MaisBrokerJe n'ai pas reçuProducerLors de la deuxième confirmation envoyée,Le message de transaction se trouve à"Ne pas consommer pour le moment"Statut,Le message de transaction pour cet état est appelé demi - message.

Message Status Check——Vérification de l'état du message

En raison de la nervosité du réseau、ProducerRedémarrage et autres raisons,Peut causerProducerVersBrokerLe message de confirmation secondaire envoyé n'a pas été livré avec succès.SiBrokerUn message de transaction a été détecté en demi - message pendant une longue période,Il va prendre l'initiative deProducerFin de l'opération de rappel,Demander ce message de transaction àProducerÉtat de la transaction à la fin(Commit Ou Rollback).Comme vous pouvez le voir,,Message Status CheckPrincipalement utilisé pour résoudre les problèmes de temporisation dans les transactions distribuées.

Exécution du processus:
(C:\Users\java1234\Desktop\RocketMQ\Didacticiels\RocketMQDidacticiels de mise en file d'attente de messages distribués.assets\image-20210829172408953.png)]

[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-DR4JAeSd-1631416355206)(C:\Users\java1234\Desktop\RocketMQ\Didacticiels\RocketMQDidacticiels de mise en file d'attente de messages distribués.assets\image-20210830182140491.png)]

  1. Lorsque le module d'application rencontre un scénario pour envoyer un message de transaction ,Envoyer d'abordprepareVoici le message.MQ.
  2. prepare Après l'envoi réussi du message , Le module application effectue des transactions de base de données (Services locaux).
  3. Résultats obtenus sur la base des transactions de la base de données ,Retour en arrièreCommitOuRollbackVoilà.MQ.
  4. Si ouiCommit,MQ Envoyez le message à ConsumerFin,Si ouiRollback, Supprimer directement prepareMessage.
  5. No3 Si le résultat de l'exécution de Step ne répond pas , Ou un délai , Démarrer la tâche programmée pour vérifier l'état de la transaction (Retry max15Une fois, Ce message a dépassé la valeur par défaut de rejet ), Les résultats du traitement sont les mêmes que ceux de 4Pas.
  6. MQ Les mécanismes de réussite de la consommation sont MQ Promis .

Exemples concrets :

AdoptionrocketMQTemplateDesendMessageInTransaction Méthode d'envoi des messages de transaction

/** * Envoyer un message de transaction */
public void sendTransactionMessage(){

// Message de construction
Message msg = MessageBuilder.withPayload("rocketmqMessage de transaction-01").build();
rocketMQTemplate.sendMessageInTransaction("java1234-transaction-rocketmq",msg,null);
}

Définir la classe de transaction locale ,RéalisationRocketMQLocalTransactionListenerInterface, Et plus @RocketMQTransactionListenerNotes, L'appel à cette méthode similaire est asynchrone ;

executeLocalTransactionMéthodes, Quand on aura fini les affaires , Selon le traitement des affaires , Retour à l'état d'exécution de la transaction ,Oui.bollback, commit or unknownTrois, Les transactions de ROLLBACK, respectivement , Commit transaction and Unknown ; Exécuter le processus à partir des messages de transaction ,Si vous revenezbollback, Alors jetez le message directement ;En cas de retourcommit, Alors le message de consommation ;Si ouiunknow,Continue d'attendre.,Puis appelezcheckLocalTransactionMéthodes,Retry max15Une fois, Ce message a dépassé la valeur par défaut de rejet ;

checkLocalTransactionMéthodes,Oui.MQ Server Non. MQ Réponse de l'expéditeur , Ou un délai d'attente , Ou la réponse est unknownSituation, Appelez cette méthode pour vérifier la confirmation , La valeur de retour est la même que la méthode ci - dessus ;

@RocketMQTransactionListener
class TransactionListenerImpl implements RocketMQLocalTransactionListener {

@Override
public RocketMQLocalTransactionState executeLocalTransaction(Message msg, Object arg) {

// ... local transaction process, return bollback, commit or unknown
System.out.println("executeLocalTransaction");
return RocketMQLocalTransactionState.UNKNOWN;
}
@Override
public RocketMQLocalTransactionState checkLocalTransaction(Message msg) {

// ... check transaction status and return bollback, commit or unknown
System.out.println("checkLocalTransaction");
return RocketMQLocalTransactionState.COMMIT;
}
}

Exécution:

[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-8ZwUmiyX-1631416355207)(C:\Users\java1234\Desktop\RocketMQ\Didacticiels\RocketMQDidacticiels de mise en file d'attente de messages distribués.assets\image-20210830234654676.png)]

Les deux méthodes du côté du producteur ont été appliquées à ,

[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-XvyLC4uq-1631416355208)(C:\Users\java1234\Desktop\RocketMQ\Didacticiels\RocketMQDidacticiels de mise en file d'attente de messages distribués.assets\image-20210830234719938.png)]

Le consommateur a aussi reçu le message ;

Exécuter comme suit:

Envoi côté producteur halfMessage àMQ-SERVER, Puis asynchrone executeLocalTransactionMéthodes,Retourunknown,MQ-SERVERReçuunknownAprès,Continue d'attendre.,Et ensuitecheckLocalTransactionConfirmation,Retourcommit,MQ-SERVERJe l'ai.commitAprès, Le consommateur peut consommer des messages ;

Description:C'est à Feng.RocketMQNotes de préparation,Attendez que la préparation soit terminée.,Les tutoriels vidéo correspondants sont publiés,Si nécessaire,Je peux commencer par Feng.WX:java1239 Bienvenue aux prostituées.
Pas de problème!!

Rechercher un numéro public sur WeChat【java1234】Attention à ce programmeur indiscipliné,Réponse après préoccupation【Information】J'ai préparé des documents d'entrevue pour l'examen écrit de première ligne et un modèle de curriculum vitae..

版权声明
本文为[Java1234Xiaofeng.]所创,转载请带上原文链接,感谢
https://javamana.com/2021/09/20210915091500511c.html

  1. 快速从 Windows 切换到 Linux 环境
  2. 五分钟向MySql数据库插入一千万条数据
  3. Java日期时间API系列42-----一种高效的中文日期格式化和解析方法
  4. 用Java实现红黑树
  5. 使用Redis Stream来做消息队列和在Asp.Net Core中的实现
  6. 海量列式非关系数据库HBase 架构,shell与API
  7. Architecture, Shell et API de base de données non relationnelle à grande échelle
  8. Mise en œuvre de l'arbre Rouge et noir en Java
  9. Java Date Time API Series 42 - - a efficient Chinese Date Format and Analysis Method
  10. 5 minutes pour insérer 10 millions de données dans la base de données MySQL
  11. Passage rapide de Windows à l'environnement Linux
  12. Notes on Java backend development of PostgreSQL (I)
  13. 海量列式非關系數據庫HBase 架構,shell與API
  14. Byte Jump the latest open source, the most Classic hashtap Graph details,
  15. L'interview Java de Byte Hopping Society, l'analyse super populaire de l'utilisation et du code source de countdownlatch,
  16. "Anti Mafia storm" Wang Zhifei's love history is really wonderful: he divorced Zhang Xinyi and married a 14-year-old wife
  17. In spring in the jade mansion, Jia Fengyuan was not moved by his brother's death. Why was su Yingxue changed? The reason is realistic
  18. Adam Oracle Oracle fully constructs Adam token incentive for ecological development
  19. 实战SpringCloud通用请求字段拦截处理,超过500人面试阿里,
  20. 宅家36天咸鱼翻身入职腾讯,Zookeeper一致性级别分析,
  21. The first starcoin & move hacksong source code analysis - P (a)
  22. Zhaijia 36 days Salt Fish turn into Tencent, Zookeeper Consistency level analysis,
  23. Traitement de l'interception des champs de demande communs de Spring Cloud, plus de 500 personnes interviewent Ali,
  24. About JavaScript modules
  25. Object oriented programming (2)
  26. Java日期时间API系列42-----一种高效的中文日期格式化和解析方法
  27. Java日期時間API系列42-----一種高效的中文日期格式化和解析方法
  28. 宅家36天鹹魚翻身入職騰訊,Zookeeper一致性級別分析,
  29. Java Date Time API Series 42 - - a efficient Chinese Date Format and Analysis Method
  30. 已成功拿下字节、腾讯、脉脉offer,7年老Java一次操蛋的面试经历,
  31. 小米Java社招面试,每次面试必问的二叉树的设计与编码,
  32. 小米Java校招面试,阿里、百度、美团、携程、蚂蚁面经分享,
  33. 小米Java校招面試,阿裏、百度、美團、攜程、螞蟻面經分享,
  34. Xiaomi Java School Recruitment interview, Ali, baidu, meituan, ctrip, ant Facebook Sharing,
  35. La conception et le codage de l'arbre binaire requis pour chaque entrevue d'embauche de la société Java millet;
  36. A remporté avec succès Byte, Tencent, Pulse offer, 7 ans Java une expérience d'entrevue de baise,
  37. 干货来袭,Java岗面试12家大厂成功跳槽,
  38. 常用Java框架面试题目,现在做Java开发有前途吗?
  39. 常用Java框架面試題目,現在做Java開發有前途嗎?
  40. Les questions d'entrevue couramment utilisées pour le cadre Java sont - elles prometteuses pour le développement Java?
  41. L'arrivée de marchandises sèches, l'entretien d'emploi Java 12 grandes usines ont réussi à changer d'emploi,
  42. Multiple postures for handling container time in k8s environment
  43. Echarts remove left Gap, Blank
  44. Hotspot Weekly | zoom $100 million, docker fees, $38 billion Data bricks
  45. JsonMappingException: No serializer found for class org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory...
  46. Java. Security. Securerandom source code analysis Java. Security. EGD = file: / dev /. / urandom
  47. When using IntelliJ idea, jump directly and quickly from the mapper interface to mapper.xml
  48. When idea writes SQL in mybatis XML, the solution to the problems of table name, field and red reporting
  49. Spring cloud integrates Nacos
  50. 应届毕业生Java笔试题目,2021大厂Java社招最全面试题,
  51. Liver explosion! Take you to understand Hadoop serialization
  52. linux系列之:告诉他,他根本不懂kill
  53. java版gRPC实战之三:服务端流
  54. RabbitMQ核心知识总结!
  55. linux系列之:告诉他,他根本不懂kill
  56. java版gRPC实战之三:服务端流
  57. RabbitMQ核心知识总结!
  58. 10天拿到字节跳动Java岗位offer,学习Java开发的步骤
  59. 10天拿到字节跳动Java岗位offer,Java知识点思维导图
  60. Résumé des connaissances de base de rabbitmq!