rocketmq想支持批量消費,于是便設置以下參數:
consumer
.setConsumeMessageBatchMaxSize(1000);
這樣是正確的,但由于業務要求,還想再設置大點,于是設置成這樣:
consumer
.setConsumeMessageBatchMaxSize(10000);
報錯了。直接不消費了。
錯誤原因寫的很明顯,這個consumeMessageBatchMaxSize只支持0到1024,超出范圍就直接啟動消費者失敗。
下面是報錯信息:
com
.alibaba
.rocketmq
.client
.exception
.MQClientException
: consumeMessageBatchMaxSize Out of range
[1, 1024]
See https
://github
.com
/alibaba
/RocketMQ
/issues
/73 for further details
.at com
.alibaba
.rocketmq
.client
.impl
.consumer
.DefaultMQPushConsumerImpl
.checkConfig(DefaultMQPushConsumerImpl
.java
:910) ~[rocketmq
-client
-3.2.2.R3
.FB
-20160704.105459-1.jar
:na
]at com
.alibaba
.rocketmq
.client
.impl
.consumer
.DefaultMQPushConsumerImpl
.start(DefaultMQPushConsumerImpl
.java
:695) ~[rocketmq
-client
-3.2.2.R3
.FB
-20160704.105459-1.jar
:na
]at com
.alibaba
.rocketmq
.client
.consumer
.DefaultMQPushConsumer
.start(DefaultMQPushConsumer
.java
:385) ~[rocketmq
-client
-3.2.2.R3
.FB
-20160704.105459-1.jar
:na
]at com
.yeahmobi
.dsp
.adconsumer
.helper
.AbstractPullConsumer2ForBatch
.afterPropertiesSet(AbstractPullConsumer2ForBatch
.java
:173) ~[dsp
-track
-consumer
-0.0.1-SNAPSHOT
.jar
:na
]at org
.springframework
.beans
.factory
.support
.AbstractAutowireCapableBeanFactory
.invokeInitMethods(AbstractAutowireCapableBeanFactory
.java
:1642) [spring
-beans
-4.3.3.RELEASE
.jar
:4.3.3.RELEASE
]at org
.springframework
.beans
.factory
.support
.AbstractAutowireCapableBeanFactory
.initializeBean(AbstractAutowireCapableBeanFactory
.java
:1579) [spring
-beans
-4.3.3.RELEASE
.jar
:4.3.3.RELEASE
]at org
.springframework
.beans
.factory
.support
.AbstractAutowireCapableBeanFactory
.doCreateBean(AbstractAutowireCapableBeanFactory
.java
:545) [spring
-beans
-4.3.3.RELEASE
.jar
:4.3.3.RELEASE
]at org
.springframework
.beans
.factory
.support
.AbstractAutowireCapableBeanFactory
.createBean(AbstractAutowireCapableBeanFactory
.java
:482) [spring
-beans
-4.3.3.RELEASE
.jar
:4.3.3.RELEASE
]at org
.springframework
.beans
.factory
.support
.AbstractBeanFactory$
1.getObject(AbstractBeanFactory
.java
:306) [spring
-beans
-4.3.3.RELEASE
.jar
:4.3.3.RELEASE
]at org
.springframework
.beans
.factory
.support
.DefaultSingletonBeanRegistry
.getSingleton(DefaultSingletonBeanRegistry
.java
:230) [spring
-beans
-4.3.3.RELEASE
.jar
:4.3.3.RELEASE
]at org
.springframework
.beans
.factory
.support
.AbstractBeanFactory
.doGetBean(AbstractBeanFactory
.java
:302) [spring
-beans
-4.3.3.RELEASE
.jar
:4.3.3.RELEASE
]at org
.springframework
.beans
.factory
.support
.AbstractBeanFactory
.getBean(AbstractBeanFactory
.java
:197) [spring
-beans
-4.3.3.RELEASE
.jar
:4.3.3.RELEASE
]at org
.springframework
.beans
.factory
.support
.DefaultListableBeanFactory
.preInstantiateSingletons(DefaultListableBeanFactory
.java
:751) [spring
-beans
-4.3.3.RELEASE
.jar
:4.3.3.RELEASE
]at org
.springframework
.context
.support
.AbstractApplicationContext
.finishBeanFactoryInitialization(AbstractApplicationContext
.java
:861) [spring
-context
-4.3.3.RELEASE
.jar
:4.3.3.RELEASE
]at org
.springframework
.context
.support
.AbstractApplicationContext
.refresh(AbstractApplicationContext
.java
:541) [spring
-context
-4.3.3.RELEASE
.jar
:4.3.3.RELEASE
]at org
.springframework
.boot
.SpringApplication
.refresh(SpringApplication
.java
:761) [spring
-boot
-1.4.1.RELEASE
.jar
:1.4.1.RELEASE
]at org
.springframework
.boot
.SpringApplication
.refreshContext(SpringApplication
.java
:371) [spring
-boot
-1.4.1.RELEASE
.jar
:1.4.1.RELEASE
]at org
.springframework
.boot
.SpringApplication
.run(SpringApplication
.java
:315) [spring
-boot
-1.4.1.RELEASE
.jar
:1.4.1.RELEASE
]
看源碼:
這個值默認是1,也就是rocketmq默認只能一條一條消費。
再看這段,直接判斷范圍,不在0到1024就報錯了。
問題很明顯,但仔細想想這是為什么呢?
為什么這個值不讓超過1024,也就是rocketmq的作者,不希望每批處理的條數超過1024條。
個人猜測
1、如果一批消費太多的話,量可能會有點太大,導致傳輸解析變慢。
2、如果失敗重試,這么多綁在一起,可能就因為某一條出錯,而導致整體重試,所以這個整體也不能太大,否則也是很麻煩的。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的[错误记录] --- rocketmq批量消费设置参数的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。