RocketMQ消费者

前言

在RocketMQ中通常有两种获取消息的方式,一个是拉(pull) 消费者主动去broker拉取,一个是推(push) broker主动推送给消费者

push方式里,consumer把轮询过程封装了,并注册MessageListener监听器,取到消息后,唤醒MessageListener的consumeMessage()来消费,对用户而言,感受消息是被推送过来的。

pull方式里,取消息的过程须要用户本身写,首先经过打算消费的Topic拿到MessageQueue的集合,遍历MessageQueue集合,而后针对每一个MessageQueue批量取消息,一次取完后,记录该队列下一次要取的开始offset,直到取完了,再换另外一个MessageQueue。

从下面这张简单的示意图也能够大体看出其中的差异,push的方式是:消息发送到broker后,若是是push,则broker会主动把消息推送给consumer即topic中,而pull的方式是:消息投递到broker后,消费端须要主动去broker上拉消息,即须要手动写代码实现,
在这里插入图片描述
2种方式的优缺点对比:

push:实时性高,但增长服务端负载,消费端能力不一样,若是push的速度过快,消费端会出现不少问题函数

pull:消费者从server端拉消息,主动权在消费端,可控性好,可是时间间隔很差设置,间隔过短,则空请求会多,浪费资源,间隔太长,则消息不能及时处理fetch

RocketMQ生产者顶级接口是MQConsumer,他有2个子类DefaultMQPullConsumer和DefaultMQPushConsumer

public interface MQConsumer extends MQAdmin {
    @Deprecated
    void sendMessageBack(final MessageExt msg, final int delayLevel) throws ...;
    void sendMessageBack(final MessageExt msg, final int delayLevel, final String brokerName)throws ...;
    Set<MessageQueue> fetchSubscribeMessageQueues(final String topic) throws MQClientException;
}

DefaultMQPullConsumer将在2022年被删除,建议使用更好的实现DefaultLitePullConsumer
在这里插入图片描述

一、MQPushConsumer
1.1 开启和关闭
void start() throws MQClientException;
void shutdown();
1.2 注册监听器
@Deprecated
void registerMessageListener(MessageListener messageListener);
void registerMessageListener(final MessageListenerConcurrently messageListener);
void registerMessageListener(final MessageListenerOrderly messageListener);
1.3 消息的订阅
void subscribe(final String topic, final String subExpression) throws MQClientException;
@Deprecated
void subscribe(final String topic, final String fullClassName,final String filterClassSource) throws...;
void subscribe(final String topic, final MessageSelector selector) throws MQClientException;
void unsubscribe(final String topic);
1.4 动态更新使用者线程池大小
void updateCorePoolSize(int corePoolSize);
1.6 消费的暂停和恢复
void suspend();//暂停消费的
void resume();//恢复消费
1.7 子类DefaultMQPushConsumer
public DefaultMQPushConsumer()public DefaultMQPushConsumer(final String consumerGroup)public DefaultMQPushConsumer(final String namespace, final String consumerGroup)public DefaultMQPushConsumer(RPCHook rpcHook)public DefaultMQPushConsumer(final String consumerGroup, boolean enableMsgTrace)public DefaultMQPushConsumer(final String namespace, final String consumerGroup, RPCHook rpcHook)public DefaultMQPushConsumer(final String consumerGroup, 
									RPCHook rpcHook,
									AllocateMessageQueueStrategy  allocateMessageQueueStrategy)public DefaultMQPushConsumer(final String namespace, 
							final String consumerGroup, 
							      RPCHook rpcHook,
							      AllocateMessageQueueStrategy allocateMessageQueueStrategy)public DefaultMQPushConsumer(final String consumerGroup, 
                                  boolean enableMsgTrace, 
	                         final String customizedTraceTopic)public DefaultMQPushConsumer(final String consumerGroup, 
							       RPCHook rpcHook,
							       AllocateMessageQueueStrategyallocateMessageQueueStrategy, 
							       boolean enableMsgTrace, 
							final String customizedTraceTopic)public DefaultMQPushConsumer(final String namespace, 
							final String consumerGroup, 
							      RPCHook rpcHook,
							      AllocateMessageQueueStrategy allocateMessageQueueStrategy,
							boolean enableMsgTrace, 
							final String customizedTraceTopic)
二、LitePullConsumer

在这里插入图片描述

2.1 开启和关闭
void start() throws MQClientException;
void shutdown();
boolean isRunning();//判断改消费者是否在运行
2.2 消息的订阅
void subscribe(final String topic, final String subExpression) throws MQClientException;
void subscribe(final String topic, final MessageSelector selector) throws MQClientException;
void unsubscribe(final String topic);
2.3 消息的获取
List<MessageExt> poll();
List<MessageExt> poll(long timeout);
Collection<MessageQueue> fetchMessageQueues(String topic) throws MQClientException;
2.4 注册监听器
void registerTopicMessageQueueChangeListener(String topic,TopicMessageQueueChangeListener topicMessageQueueChangeListener) throws MQClientException;
2.5 指定pull的消息队列
//手动将消息队列列表分配给此使用者
void assign(Collection<MessageQueue> messageQueues);
2.6 消费的暂停和恢复
//暂停从请求的消息队列中提取
void pause(Collection<MessageQueue> messageQueues);
//恢复使用暂停的指定消息队列。
void resume(Collection<MessageQueue> messageQueues);
2.7 偏移量
boolean isAutoCommit();//是否启用自动提交消耗偏移量.
void setAutoCommit(boolean autoCommit);//设置是否启用自动提交消耗偏移量.
void seek(MessageQueue messageQueue, long offset) throws MQClientException;
Long offsetForTimestamp(MessageQueue messageQueue, Long timestamp) throws MQClientException;
void commitSync();//手动提交消耗偏移量
Long committed(MessageQueue messageQueue) throws MQClientException;//获取给定消息队列的最后提交偏移量.
void seekToBegin(MessageQueue messageQueue)throws MQClientException;
void seekToEnd(MessageQueue messageQueue)throws MQClientException;
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值