文章目录

  • rocketmq:java类详解
  • 一、DefaultMQProducer类
  • 概述
  • 方法
  • 二、DefaultMQPushConsumer类
  • 概述
  • 字段
  • 重要字段
  • 重要方法
  • 三、Message类
  • 概述
  • 字段
  • 关键属性
  • 四、MessageExt类
  • 概述
  • 字段


rocketmq:java类详解

一、DefaultMQProducer类

概述

DefaultMQProducer类是应用发送消息使用的基类,封装一些通用的方法方便开发者在更多场景中使用。属于线程安全类,在配置并启动后可在多个线程间共享此对象。

可以通过无参构造方法快速创建一个生产者,通过getter/setter方法,调整发送者的参数。主要负责消息的发送,支持同步/异步/oneway的发送方式,这些发送方式均支持批量发送

方法

属性

内容

DefaultMQProducerImpl defaultMQProducerImpl;

生产者内部默认实现类

String producerGroup;

Producer组名, 默认值为DEFAULT_PRODUCER。多个Producer如果属于一个应用,发送同样的消息,则应该将它们归为同一组。

String createTopicKey;

自动创建测试的topic名称, 默认值为TBW102;在发送消息时,自动创建服务器不存在的topic,需要指定Key。broker必须开启isAutoCreateTopicEnable

int defaultTopicQueueNums;

创建默认topic的queue数量。默认4

int sendMsgTimeout;

发送消息超时时间,默认值3000,单位毫秒

int compressMsgBodyOverHowmuch;

消息体压缩阈值,默认为4k(Consumer收到消息会自动解压缩)

int retryTimesWhenSendFailed;

同步模式,返回发送消息失败前内部重试发送的最大次数。可能导致消息重复。默认2

int retryTimesWhenSendAsyncFailed;

异步模式,返回发送消息失败前内部重试发送的最大次数。可能导致消息重复。默认2

boolean retryAnotherBrokerWhenNotStoreOK;

声明发送失败时,下次是否投递给其他Broker,默认false

int maxMessageSize;

最大消息大小。默认4M; 客户端限制的消息大小,超过报错,同时服务端也会限制

TraceDispatcher traceDispatcher

消息追踪器,定义了异步传输数据接口。使用rcpHook来追踪消息

二、DefaultMQPushConsumer类

概述

DefaultMQPushConsumer类是rocketmq客户端消费者的实现,从名字上已经可以看出其消息获取方式为broker往消费端推送数据,其内部实现了流控,消费位置上报等等。DefaultMQPushConsumer是Push消费模式下的默认配置

字段

字段

内容

DefaultMQPushConsumerImpl defaultMQPushConsumerImpl;

消费者实现类,所有的功能都委托给DefaultMQPushConsumerImpl来实现

String consumerGroup;

消费者组名,必须设置,参数默认值是:DEFAULT_CONSUMER (需要注意的是,多个消费者如果具有同样的组名,那么这些消费者必须只消费同一个topic)

MessageModel messageModel;

消费的方式,支持以下两种 1、集群消费 2、广播消费。BROADCASTING 广播模式,即所有的消费者可以消费同样的消息CLUSTERING 集群模式,即所有的消费者平均来消费一组消息

ConsumeFromWhere consumeFromWhere;

消费者从那个位置消费,分别为:CONSUME_FROM_LAST_OFFSET:第一次启动从队列最后位置消费,后续再启动接着上次消费的进度开始消费 ;CONSUME_FROM_FIRST_OFFSET:第一次启动从队列初始位置消费,后续再启动接着上次消费的进度开始消费;CONSUME_FROM_TIMESTAMP:第一次启动从指定时间点位置消费,后续再启动接着上次消费的进度开始消费(以上所说的第一次启动是指从来没有消费过的消费者,如果该消费者消费过,那么会在broker端记录该消费者的消费位置,如果该消费者挂了再启动,那么自动从上次消费的进度开始)

AllocateMessageQueueStrategy allocateMessageQueueStrategy;

消息分配策略,用于集群模式下,消息平均分配给所有客户端;默认实现为AllocateMessageQueueAveragely

Map<String, String> subscription;

topic对应的订阅tag

MessageListener messageListener;

消息监听器 ,处理消息的业务就在监听里面。目前支持的监听模式包括:MessageListenerConcurrently,对应的处理逻辑类是MessageListener messageListener ;ConsumeMessageConcurrentlyServiceMessageListenerOrderly 对应的处理逻辑类是ConsumeMessageOrderlyService;两者使用不同的ACK机制。RocketMQ提供了ack机制,以保证消息能够被正常消费。发送者为了保证消息肯定消费成功,只有使用方明确表示消费成功,RocketMQ才会认为消息消费成功。中途断电,抛出异常等都不会认为成功——即都会重新投递。上面两个不同的监听模式使用的ACK机制是不一样的。

OffsetStore offsetStore;

offset存储实现,分为本地存储或远程存储 。集群消费:从远程Broker获取。广播消费:从本地文件获取。

重要字段

int consumeThreadMin = 20		线程池自动调整

	int consumeThreadMax = 64		线程池自动调整

	long adjustThreadPoolNumsThreshold = 100000 

	int consumeConcurrentlyMaxSpan = 2000
									单队列并行消费最大跨度,用于流控 

	int pullThresholdForQueue = 1000
									一个queue最大消费的消息个数,用于流控 

	long pullInterval = 0			检查拉取消息的间隔时间,由于是长轮询,所以为 0,但是如果应用为了流控,
									也可以设置大于 0 的值,单位毫秒,取值范围: [0, 65535]

	consumeMessageBatchMaxSize = 1	并发消费时,一次消费消息的数量,默认为1,
									假如修改为50,此时若有100条消息,那么会创建两个线程,每个线程分配50条消息。
									换句话说,批量消费最大消息条数,取值范围: [1, 1024]。默认是1
									
	pullBatchSize = 32				消费者去broker拉取消息时,一次拉取多少条。取值范围: [1, 1024]。默认是32 。可选配置

	boolean postSubscriptionWhenPull = false 

	boolean unitMode = false

重要方法

subscribe(String topic, String subExpression) 
									订阅某个topic,subExpression传*为订阅该topic所有消息 

	registerMessageListener(MessageListenerConcurrently messageListener) 
									注册消息回调,如果需要顺序消费,需要注册MessageListenerOrderly的实现 
	
	start 							启动消息消费

三、Message类

概述

Producer发送的消息定义为Message类,在org.apache.rocketmq.common.message包下

字段

字段

解释

String topic;

Message都有Topic这一属性,Producer发送指定Topic的消息,Consumer订阅Topic下的 消息。 通过Topic字段,Producer会获取消息投递的路由信息,决定发送给哪个Broker

int flag;

网络通信层标记。

Map<String, String> properties;

存储了Message其余各项参数,比如tag、key等关键的消息属性。RocketMQ预定义了一组内置属性,除了内置属性之外,还可以设置任意自定义属性。当然属性的数量也是有限的,消息序列化之后的大小不能超过预设的最大消息大小。系统内置属性定义于org.apache.rocketmq.common.message.MessageConst

byte[] body;

Producer要发送的实际消息内容,以字节数组形式进行存储。Message消息有一定大小限制

String transactionId;

RocketMQ 4.3.0引入的事务消息相关的事务编号

关键属性

属性

接口

用途

MessageConst.PROPERTY_TAGS

setTags

在消费消息时可以通过tag进行消息过滤判定

MessageConst.PROPERTY_KEYS

setKeys

可以设置业务相关标识,用于消费 处理判定,或消息追踪查询

MessageConst.PROPERTY_DELAY_TIME_LEVEL

setDelayTimeLevel

消息延迟处理级别,不同级别对应不同延迟时间

MessageConst.PROPERTY_WAIT_STORE_MSG_OK

setWaitStoreMsgOK

在同步刷盘情况下是否需要等待数 。据落地才认为消息发送成功

四、MessageExt类

概述

对于发送方来说,上述Message的定义以足够。但对于RocketMQ的整个处理流程来说, 还需要更多的字段信息用以记录一些必要内容,比如消息的id、创建时间、存储时间等 等。在同package下可以找到与之相关的其余类定义

字段

字段

用途

queueId

记录MessageQueue编号,消息会被发送到Topic下的MessageQueue

storeSize

记录消息在Broker存盘大小

queueOffset

记录在ConsumeQueue中的偏移

sysFlag

记录一些系统标志的开关状态,MessageSysFlag中定义了系统标识

bornTimestamp

消息创建时间,在Producer发送消息时设置

storeHost

记录存储该消息的Broker地址

msgId

消息Id

commitLogOffset

记录在Broker中存储便宜

bodyCRC

消息内容CRC校验值

reconsumeTimes

消息重试消费次数

preparedTransactionOffset

事务详细相关字段