使用spring-data-redis,链接工厂使用lettuceConnectionFactory。配置如下@Bean
public StreamMessageListenerContainer> streamMessageListenerContainer(PlanStreamMessageListener planStreamMessageListener){
// 创建配置对象
StreamMessageListenerContainer.
StreamMessageListenerContainerOptions>
streamMessageListenerContainerOptions =
StreamMessageListenerContainer.
StreamMessageListenerContainerOptions
.builder()
// 一次性最多拉取多少条消息
.batchSize(1)
// 消息消费异常的handler
.errorHandler(e->{
log.error(e.getMessage(),e);
})
// 超时时间,设置为0,表示不超时(超时后会抛出异常)
.pollTimeout(Duration.ofSeconds(10))
// 序列化器
.serializer(new StringRedisSerializer())
.build();
// 根据配置对象创建监听容器对象
StreamMessageListenerContainer> streamMessageListenerContainer =
StreamMessageListenerContainer
.create(lettuceConnectionFactory, streamMessageListenerContainerOptions);
// 使用监听容器对象开始监听消费(使用的是手动确认方式)
streamMessageListenerContainer.receive(Consumer.from(redisAppProperties.getGroupId(),
redisAppProperties.getConsumerId()),
StreamOffset.create(redisAppProperties.getReceiveStreamKey(), ReadOffset.lastConsumed()), planStreamMessageListener);
return streamMessageListenerContainer;
}@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
event
.getApplicationContext()
// 相当于返回js中的闭包函数,函数式编程思想,主要式方便链式调用,在这里并不能延迟初始化
.getBeanProvider(StreamMessageListenerContainer.class)
.ifAvailable(Lifecycle::start);
}
监听方式使用的时listener的方式,异常已经在方法内被捕获。
在使用的时候出现了问题:2020-12-18 09:38:38.408 ERROR 236524 --- [SimpleA