SpingBoot 整合 RocketMQ 使用事务

依赖

<dependency>
	<groupId>org.apache.rocketmq</groupId>
	<artifactId>rocketmq-spring-boot-starter</artifactId>
	<version>2.2.0</version>
</dependency>

配置

rocketmq.name-server=127.0.0.1:9876
rocketmq.producer.group=my-producer-group

发送消息

@Autowired
private RocketMQTemplate rocketMQTemplate;

public void rocketMQTemplateTest(){

    //topic -- 消息要发送的地址; body -- 具体的消息
    String body = UUID.randomUUID().toString();
    org.springframework.messaging.Message<String> message = MessageBuilder.withPayload(body)
            .setHeader(RocketMQHeaders.TRANSACTION_ID, "MYKEY").build();
    //发送消息
    rocketMQTemplate.convertAndSend("mytopic",body);
    //创建事务
    rocketMQTemplate.sendMessageInTransaction("mytopic",message,null);
    //有回调的发送
    rocketMQTemplate.asyncSend("mytopic", body, new SendCallback() {
        @Override
        public void onSuccess(SendResult sendResult) {
            System.out.println("发送成功");
        }
        @Override
        public void onException(Throwable throwable) {
            System.out.println("发送成功");
        }
    });
}

接收消息

@RocketMQTransactionListener(rocketMQTemplateBeanName = "rocketMQTemplate")
public class TransactionListenerImpl implements RocketMQLocalTransactionListener {
    //执行本地事务
    @Override
    public RocketMQLocalTransactionState executeLocalTransaction(Message message, Object o) {
        System.out.println("开始事务");
        try {
            Thread.sleep(1000 * 100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return RocketMQLocalTransactionState.COMMIT;
    }

    //broker端回调,检查事务
    @Override
    public RocketMQLocalTransactionState checkLocalTransaction(Message message) {
        System.out.println("检查事务");
        return RocketMQLocalTransactionState.UNKNOWN;
    }
}
posted @ 2022-03-07 18:03  叕叕666  阅读(85)  评论(0)    收藏  举报