@Target(value=METHOD)
@Retention(value=RUNTIME)
@Documented
public @interface RocketMqOrderedConsumer
RocketMQ 顺序消费者
注意!!! 消费者必须保证幂等性! 任何一条消息都有可能被重复消费!
https://github.com/shepherdviolet/slate/blob/master/docs/rocketmq/guide.md
顺序消费有两个前提, 生产者必须将消息放进同一个队列(可以将某个TAG的消息放进同一个队列), 消费者必须消费同一个队列(订阅那个TAG). MQ只保证同一个队列中的消息的顺序. 消费者如果是集群, 队列会被全局锁定(同时只有一个消费者可以消费消息), 每个消费者同时只有一个 线程在消费消息.
@RocketMqOrderedConsumer(
consumerGroup = "consumer-b",
topic = "test-ordered-topic",
subExpression = "tag-a || tag-b || tag-c"
)
public boolean test(MessageExt message){
logger.info("Received MessageExt: {}", message);
return true;
}
| 限定符和类型 | 必需的元素和说明 |
|---|---|
java.lang.String |
consumerGroup
消费组名
|
java.lang.String |
topic
Topic
|
| 限定符和类型 | 可选元素和说明 |
|---|---|
java.lang.String |
charset
字符集, 默认UTF-8
|
ConsumeWay |
consumeFromWhere
选择消息从队列头还是队列尾开始消费
|
java.lang.String |
nameServer
指定NameServer地址.
|
boolean |
reconsumeWhenException
true 抛出异常时重新消费消息(SUSPEND_CURRENT_QUEUE_A_MOMENT), 默认false
|
java.lang.String |
subExpression
订阅表达式, 例如: TagA || TagB || TagC, 默认全订阅.
|
public abstract java.lang.String subExpression
public abstract ConsumeWay consumeFromWhere