Apache RocketMQ官网翻译(四)

RocketMQ分布式消息系统 rocketmq介绍 阅读详情

事务例子

什么是事务消息?

可以认为是两阶段提交的消息实现,以确保在分布式系统中的最终一致性。事务消息确保了以原子的方式执行本地事务的执行和消息的发送。

使用限制

(1)事务消息不支持延迟和批量操作。
(2)为了避免单个消息被检查太多次而导致过半的队列消息累积,我们默认限制了检查单个消息15次,但是用户可以通过在broker的配置中修改“transactionCheckMax"参数来改变这个限制。如果一个消息被检查超过了”transactionCheckMax"次,默认broker将会丢弃该消息并同时打印失败日志。用户可以通过重写AbstractTransactionCheckListener类来更改这种操作。
(3)一个事务性的消息会在一个时间后被检查,这个时长是通过在broker的配置文件中transactionTimeout参数设置的。当然用户也可以在发送消息时候设置用户的属性(property)“CHCEK_IMMUNITY_TIME_IN_SECONDS"更改这个限制,这个限制会更优先于“transactionTimeout”参数。
(4)一个事务消息可能会被检查和消费多次。
(5)重新提交消息到目标topic可能会失败。当前这个依靠日志记录。rocketMQ自身的高可用机制确保了消息的高可用性。如果你还是想确保事务消息不会丢失和正确性,推荐使用同步双写的机制。
(6)事务消息的producer ID不能够被其他类型的消息的producer ID共享。与其他类型的消息不同,事务性消息是允许后向查询的。MQ服务是通过producer ID查询连接的客户端。

应用

1、事务状态

事务性消息有三种状态:
(1)TransactionStatus.CommitTransaction:提交事务,意味着允许消费者消费这个消息
(2)TransactionStatus.RollbackTransaction:回滚事务,意味着消息将会被删除且不允许被消费
(3)TransactionStatus.Unknown:中间态,意味着消息需要重新检查来决定状态

2、发送事务消息
(1)创建事务性生产者

使用TransactionMQProducer类创建生产者客户端,并定义一个唯一的生产者组别(producerGroup),设置一个自定义的线程池处理检查型请求。执行完本地事务后,需要将执行结果回复MQ,回复状态在上文有所描述。

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;
import java.util.List;

public class TransactionProducer {
    public static void main(String[] args) throws MQClientException, InterruptedException {
        TransactionListener transactionListener = new TransactionListenerImpl();
        TransactionMQProducer producer = new TransactionMQProducer("please_rename_unique_group_name");
        ExecutorService executorService = new ThreadPoolExecutor(2, 5, 100, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(2000), new ThreadFactory() {
            @Override
            public Thread newThread(Runnable r) {
                Thread thread = new Thread(r);
                thread.setName("client-transaction-msg-check-thread");
                return thread;
            }
        });

        producer.setExecutorService(executorService);
        producer.setTransactionListener(transactionListener);
        producer.start();

        String[] tags = new String[] {"TagA", "TagB", "TagC", "TagD", "TagE"};
        for (int i = 0; i < 10; i++) {
            try {
                Message msg =
                    new Message("TopicTest1234", tags[i % tags.length], "KEY" + i,
                        ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET));
                SendResult sendResult = producer.sendMessageInTransaction(msg, null);
                System.out.printf("%s%n", sendResult);

                Thread.sleep(10);
            } catch (MQClientException | UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }

        for (int i = 0; i < 100000; i++) {
            Thread.sleep(1000);
        }
        producer.shutdown();
    }
}
(2)实现TransactionListener接口

当消息发送成功一半时,"executeLocalTransaction"方法将被执行本地事务,并返回上文提到的三种事务状态中的一种。”checkLocalTransaction"方法检查本地事务状态并响应给MQ检查请求,也是返回上述的三种事务状态中的一种。

   import ...
   
   public class TransactionListenerImpl implements TransactionListener {
       private AtomicInteger transactionIndex = new AtomicInteger(0);
   
       private ConcurrentHashMap<String, Integer> localTrans = new ConcurrentHashMap<>();
   
       @Override
       public LocalTransactionState executeLocalTransaction(Message msg, Object arg) {
           int value = transactionIndex.getAndIncrement();
           int status = value % 3;
           localTrans.put(msg.getTransactionId(), status);
           return LocalTransactionState.UNKNOW;
       }
   
       @Override
       public LocalTransactionState checkLocalTransaction(MessageExt msg) {
           Integer status = localTrans.get(msg.getTransactionId());
           if (null != status) {
               switch (status) {
                   case 0:
                       return LocalTransactionState.UNKNOW;
                   case 1:
                       return LocalTransactionState.COMMIT_MESSAGE;
                   case 2:
                       return LocalTransactionState.ROLLBACK_MESSAGE;
               }
           }
           return LocalTransactionState.COMMIT_MESSAGE;
       }
   }
Apache启动失败AH00072:端口占用与Listen配置深度排障指南 在Linux系统中,Web服务器启动时出现‘无法绑定端口’错误,本质是socket资源竞争问题——操作系统内核拒绝重复注册同一IP:端口组合。该现象广泛存在于Apache、Nginx、Tomcat等服务中,核心原理源于TCP/IP协议栈的bind()系统调用机制。技术价值在于避免盲目重装或修改应用层配置,直击资源调度底层。典型应用场景包括开发环境多服务共存(如Docker容器与本地Apache冲突)、生产环境反向代理协同(Nginx+Apache端口分工),以及宝塔等面板用户因双Apache实例引发的默认站 阅读详情

相关推荐

Minitab正交试验设计:从入门到精通的完整指南

本文提供了一份使用Minitab进行正交试验设计的完整指南。从正交试验省时省力的原理讲起,详细介绍了在Minitab中创建正交表、填入数据、执行分析(包括解读ANOVA和P值)以及寻找最优参数组合的全流程。文章旨在帮助读者,特别是工艺优化和研发人员,快速掌握这一高效工具,从而用最少的实验次数锁定关键影响因素,提升工作效率与成果。

weixin_29201313的博客 464

RocketMQ的学习

​ RocketMQ的官网地址: http://rocketmq.apache.org ,github地址是 https://github.com/apache/rocketmq ,最新版本的RocketMQ可以到官网上进行下载。历史版本需要到Github仓库中下载。下载地址:https://github.com/apache/rocketmq/releases。NameServer : 提供轻量级的Broker路由服务。 Broker:实际处理消息存储、转发等服务的核心组件。 Producer:消息生产者

qq_45003354的博客 1095

K-近邻算法: k-nearest neighbor classification (kNN) 详细介绍

@创建于:2020.04.09 @修改于:2020.04.09,2024.06.22 文章目录1、kNN介绍2、k近邻法的三要素详解2.1 距离度量2.2 k值的选择2.3 分类决策规则3、k近邻法的实现:kd树4、Python实现过程5、优缺点6、常见问题 1、kNN介绍 kNN是一个基本而简单的分类算法,作为监督学习,那么KNN模型需要的是有标签的训练数据,对于新样本的类别由与新样本距离最近的k个训练样本点按照分类...

chenhepg的博客 9万+

RocketMQ安装和测试(Windows)

RocketMQ安装和测试(windows)

重生之我不会写代码 4613

飞塔防火墙和paloalto防火墙构建ipsec

一、配置fortigate防火墙1.防火墙配置上网功能1.1配置fortigate的wan1接口IP为100.100.100.2/24VLAN交换internal,IP地址为192.168.156.99/24。开启DHCP分配IP地址范围为192.168.156.110-192.168.156.2101.2配置访问互联网的缺省路由1.3配置访问互联网的安全策略2.配置与Paloalto防火墙的IPSECVPN。

weixin_44675999的博客 3739

轴承故障诊断——领域知识

幅域分析、频域分析及轴承方面的领域知识

qq_58516607的博客 3532

rocketmq官网和其它资料

rocketmq官网: http://rocketmq.apache.org/ rocketmq的其它项目 https://github.com/apache/rocketmq-externals

涂作权的博客 1万+

VCS HVP与验证计划planner:数字IC验证环境搭建与收敛实践

在数字IC验证中,VCS 是广泛使用的编译型仿真器,HVP 通常指面向硬件验证平台的高性能编译选项集,用于开启 SystemVerilog 类、随机约束和 NTB 等能力;planner 则指验证计划管理,核心是把功能点与测试用例、覆盖点建立映射。理解 VCS 先编译后仿真的原理,有助于优化增量编译、调试访问和覆盖率采集,提升回归收敛效率。规划驱动让激励不再散落,设计改版时能快速定位受影响用例,交接和覆盖率收敛更有依据。无论是 UVM 环境搭建、编译参数选择,还是验证计划表维护,都需要把工具选项与规划方法结

weixin_42543046的博客 338

Apache RocketMQ官网翻译(一)

翻译来自:https://rocketmq.apache.org/docs/motivation/ 背景 在早期,我们的分布式消息中间件都是建立在ActiveMQ 5.x(prior to 5.3)之上。我们通过其作为异步消息通信、搜索、社交网络信息流、数据管道甚至在交易处理上,为我们的复杂多样的业务服务。但是随着我们业务交易的吞吐量上升,消息集群的压力也变得越来越大。 Why RocketM...

jerryJavaCoding的博客 406

UNSW-NB15数据集:网络流量分析与恶意攻击检测实战指南

本文提供了UNSW-NB15数据集在网络流量分析与恶意攻击检测领域的实战指南。详细介绍了该数据集的构成、核心特征解析、特征工程处理、机器学习模型训练与评估方法,并探讨了模型部署及持续优化的挑战与思路,帮助读者构建高效的网络攻击检测系统。

weixin_29193359的博客 258

黑猫带你学UFS协议第1篇:全网最全UFS协议中文详讲,这份学习框架图,你值得拥有!!!(持续更新中...)

本文由黑猫学长撰写,深入解析UFS协议,覆盖从基础概念到高级特性的全方位教程。适合存储芯片行业从业者和嵌入式开发者,旨在帮助读者快速掌握UFS协议,适用于高端智能手机、平板等智能设备。预计15万字,涵盖UFS 3.1协议,讲解UFS协议栈、物理层、链路层、传输层等内容。

黑猫奥利奥的博客 3696

Apache RocketMQ官网翻译(二)

简单消息例子 使用rocketMQ发送消息会有三种模式:可靠同步、可靠异步和单向三种传输 使用rocketMQ消费消息 1、添加依赖包 maven: <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client&l...

jerryJavaCoding的博客 249

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Apache RocketMQ官网翻译(三)

有序消息 rocketMQ提供了FIFO的顺序消息。 以下例子演示了发送/接收全局和部分的有序消息 发送消息的简单代码 public class OrderedProducer { public static void main(String[] args) throws Exception { //Instantiate with a producer group nam...

jerryJavaCoding的博客 249

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RocketMQ介绍及集群部署

RocketMQ介绍 Apache RocketMQ是一个分布式消息传递和流媒体平台,具有低延迟、高性能和可靠性、万亿级别的容量和灵活的可伸缩性。 GitHub:https://github.com/apache/rocketmq 官网:http://rocketmq.apa...

chuhou4381的博客 607

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

RocketMQ中文文档

主要是从官方文档入手,开始学习rocketmq。对RocketMQ 官方文档做翻译吧。 Qucik Start(快速开始) This quick start guide is a detailed instruction of setting up RocketMQ messaging system on your local machine to send and receive messag...

不准动我的小老弟 8127

Spring集成RocketMQ以及应用实例代码

背景 Apache RocketMQ™是一个统一的消息传递引擎,轻量级的数据处理平台。根据我们的研究,在使用越来越多的队列和虚拟主题的情况下,ActiveMQ IO模块遇到了瓶颈。我们尽力通过节流,断路器或降级来解决此问题,但效果不佳。因此,我们那时开始关注流行的消息传递解决方案Kafka。不幸的是,Kafka不能满足我们的要求,特别是在低延迟和高可靠性方面。在这种情况下,我们决定发明一个新的消息...

zhangbinch的博客 6234

RocketMQ常备知识汇总

基础篇 阿里巴巴开源 参考kafka实现 应用场景:应用解耦,流量削峰,数据分发 源码地址:https://github.com/apache/rocketmq 中文文档:https://github.com/apache/rocketmq/tree/master/docs/cn 商业版:https://www.aliyun.com/product/rocketmq 官网翻译:http://www.itmuch.com/books/rocketmq/ FAQ:http://rocketmq.apach

起而行动,方能平定心中的惶恐 387

RocketMQ基础架构

基于官方文档进行翻译 文章目录概览代理服务集群生产者集群消费者集群命名服务代理服务 概览 Apache RocketMQ是一个分布式消息和流平台,它的特性包括低延迟,高性能,高可靠性,万亿级容量和弹性扩展。它的架构主要包括四部分:命名服务(name servers),代理服务(brokers),生产者(Producers),消费者(Consumers)。其中每个部分都是可以水平扩展从而避免单点...

陈晨_软件五千言 394

RocketMQ、ActiveMQ 、Kafka对比

参考:Rocket官网文档:http://rocketmq.apache.org/docs/motivation/ 原版Excel翻译奉上: https://download.youkuaiyun.com/download/superit401/11263669

透明大脑 565

rocketmq-简单入门例子

1、环境搭建快速开始 本章节主要详细介绍如何在本地计算机上设置RocketMQ消息系统以发送和接收消息. 在本章节 前置条件 下载发行版本并构建 启动NAME SERVER服务 启动BROKE服务 发送并接收消息 关闭服务 前置条件 假定安装了以下软件: 推荐64bit OS, Linux/Unix/Mac系统; 64bit JDK 1.8+; Maven 3.2.x ...

奋斗不息 2450

01-RocketMQ整体理解与快速实战

MQ:MessageQueue,消息队列。队列,是一种FIFO 先进先出的数据结构。消息由生产者发送到MQ进行排队,然后按原来的顺序交由消息的消费者进行处理。QQ和微信就是典型的MQ。异步例子:快递员发快递,直接到客户家效率会很低。引入菜鸟驿站后,快递员只需要把快递放到菜鸟驿站,就可以继续发其他快递去了。客户再按自己的时间安排去菜鸟驿站取快递。异步能提高系统的响应速度、吞吐量。解耦。

weixin_40461030的博客 220

RocketMQ整体理解

test01

weixin_40426261的博客 153

【消息中间件JMS java message service】RocketMQ踩坑记录

Exception in thread “main” org.apache.rocketmq.client.exception.MQClientException 巨坑问题。 特别坑的注意点就是:你用的rocketMQ版本,一定要和你引用的pom文件同一个版本 除了看官网的FAQ: This happens when you are trying to send messages to a topic whose routing info is not available to the producer.

一只狮的专栏 700

Apache SkyWalking 分布式追踪与监控的快速入门

文章目录Apache SkyWalking 分布式追踪与监控的快速入门APM系统概述主流的开源APM产品Skywalking概述Skywalking优势Skywalking主要概念介绍SkyWalking 环境搭建Skywalking基础Agent的使用Spring Boot中使用参考源码参考 Apache SkyWalking 分布式追踪与监控的快速入门 本人能力有限,所以本篇文章只是对SkyWalking进行简单的介绍和演示。 APM系统概述 APM (Application Performance

C. 1630
上一篇: Apache RocketMQ官网翻译(三)
下一篇: Apache Kafka简介
@云师兄
博客等级 码龄10年 10粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值