首页 > 其他分享 >事务消息

事务消息

时间:2022-09-03 22:11:46浏览次数:40  
标签:事务 return RocketMQLocalTransactionState System String 消息 println out

    // 发送事务消息的实例
    public boolean sendMessageInTransaction( String msg)  {
        try {
            Message message = new Message();
            message.setKeys(msg);
            System.out.println("========sending message=========");
            TransactionSendResult transactionSendResult = rocketMQTemplate.sendMessageInTransaction("tx-group", "topic-tx", MessageBuilder.withPayload(message).build(), null);
            System.out.println("========finish send =========");
            
            //查看半消息状态
            LocalTransactionState localTransactionState = transactionSendResult.getLocalTransactionState();
            System.out.println(localTransactionState.name());
            return true;
        } catch (MessagingException e) {
            e.printStackTrace();
            return false;
        }
    }
@RocketMQTransactionListener(txProducerGroup = "tx-group")
public class TransactionMsgListener implements RocketMQLocalTransactionListener {

    @Reference
    GoodService goodService;

    @Autowired
    UserServiceImpl userServiceImpl;

    @Override
    public RocketMQLocalTransactionState executeLocalTransaction(org.springframework.messaging.Message message, Object o) {
        System.out.println("执行本地事务=====");
        String s = new String((byte[]) message.getPayload());
        System.out.println(s);
        JSONObject jsonObject = JSONObject.parseObject(s);
        String myinput = (String)jsonObject.get("keys");
        String[] split = myinput.split(":");


        String myUserId=split[0];
        int goodId=Integer.parseInt(split[1]);
        int count=Integer.parseInt(split[2]);
        GoodRequest goodRequest = new GoodRequest();
        goodRequest.setCount(count);
        goodRequest.setGoodId(goodId);

        try {
            GoodResponse goodResponse = goodService.reduceStock(goodRequest);
            if(goodResponse.isResult()){
                //扣库存成功
                System.out.println("成功");
                return RocketMQLocalTransactionState.COMMIT;
            } else{
                System.out.println("回滚");
                return RocketMQLocalTransactionState.ROLLBACK;
            }
        } catch (Exception e){
            e.printStackTrace();
            System.out.println("未知");
            return RocketMQLocalTransactionState.UNKNOWN;
        }
    }

    @Override
    public RocketMQLocalTransactionState checkLocalTransaction(org.springframework.messaging.Message message) {
        System.out.println("执行事务补偿======");
        //事务补偿提交
        return RocketMQLocalTransactionState.COMMIT;
        //事务补偿回滚
        //return RocketMQLocalTransactionState.ROLLBACK;
        //如果事务补偿过程还是UNKNOWN 就会一直进行事务补偿,60s一次
        //return RocketMQLocalTransactionState.UNKNOWN;
    }
}

标签:事务,return,RocketMQLocalTransactionState,System,String,消息,println,out
From: https://www.cnblogs.com/sjj123/p/16653815.html

相关文章

  • SQL Server事务隔离级别
    事务定义事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性和持久性(ACID)属性,只有这样才能成为一个事务。......
  • MySQL教程 - 事务(Transaction)
    更新记录转载请注明出处。2022年9月3日发布。2022年9月3日从笔记迁移到博客。事务说明事务(transaction)一种机制,用于执行成批的MySQL操作用以保证没有不完整的操......
  • python实现企业微信机器人自动发消息
    一)创建企业微信群机器人1)先创建一个测试用临时对话群操作步骤:先在手机端打开企业微信,点击右上角+按钮->发起群聊->联系人中选择2人点击确定,即可创建一个临时对话群2......
  • 深入RabbitMQ消息可靠性
    mandatory——处理不可路由消息在使用Basic.Publish发送一条消息并携带参数mandatory=True时,当消息是不可路由的时,RabbitMQ会发回一个Basic.Return方法帧。不可路由消息......
  • Spring事务传播机制理解
    REQUIRED:如果当前没有事务,则自己新建一个事务,如果当前存在事务,则加入这个事务。REQUIRES_NEW:主事务和里面的事务独。SUPPORTS:当前存在事务,则加入当前事务,如果当前没有事务,......
  • AI安防智能视频EasyCVR平台消息通知弹框的优化及新增关闭按钮
    EasyCVR是我们接入协议最广泛的视频管理平台,除了标准协议国标GB28181、RTSP/Onvif、RTMP等,还支持厂家的私有协议与SDK,如海康Ehome、海康SDK、大华SDK等。平台基于云边端一......
  • Spring(四)-声明式事务
    Spring-04声明式事务1、事务的定义事务就是由一组逻辑上紧密关联的多个工作单元(数据库操作)而合并成一个整体,这些操作要么都执行,要么都不执行。2、事务的特性:ACID1)原子......
  • MQ系列5:RocketMQ消息的发送模式
    MQ系列1:消息中间件执行原理MQ系列2:消息中间件的技术选型MQ系列3:RocketMQ架构分析MQ系列4:NameServer原理解析在之前的篇章中,我们学习了RocketMQ的原理,以及RocketMQ中......
  • 数据库连接和事务以及线程之间的关系
    数据库连接和事务以及线程之间的关系目录数据库连接和事务以及线程之间的关系一、概述二、事务1、什么是事务?3、为什么需要事务?4、事务本质5、事务是怎么做到同时成功,同时......
  • 轻量级消息队列 Django-Q 轻度体验
    前言最近做的这个项目(基于Django),需要做个功能,实现定时采集车辆定位。这让我想起来几年前那个OneCat项目,当时我用的是Celery这个很重的组件Celery实在是太重了,后来我做公......