首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建@RabbitListener为幂等

如何创建@RabbitListener为幂等
EN

Stack Overflow用户
提问于 2017-09-20 06:28:02
回答 1查看 783关注 0票数 1

我们的配置是:1.n个具有共享数据库的消息接收者。邮件只应处理一次。

代码语言:javascript
运行
复制
   @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = "message-queue", durable = "true"),
            exchange = @Exchange(value = TOPIC_EXCHANGE, type = "topic", durable = "true"),
            key = MESSAGE_QUEUE1_RK)
    )
    public void receiveMessage(CustomMessage message) throws InterruptedException {
        System.out.println("I have been received = " + message);
    }

我们希望保证消息将被处理一次,我们有一个消息存储与id的消息已经处理。在receiveMessage之前可以挂起这张支票吗?我们试图使用带有MessagePostProcessor的rabbitTemplate,但似乎不起作用。

对怎么做有什么建议吗?我们尝试了一个MethodInterceptor,这是可行的,但很难看。谢谢

找到了解决方案--由于Gary创建了一个实现MessagePostProcessorInjectorSmartLifecycle,并且在启动时,我检查了每个容器,如果它是一个AbstractMessageListenerContainer,添加一个customer MessagePostProccesser和一个自定义ErrorHandler来查找某些类型的异常并删除它们(其他转发到defaultErrorHandler),因为我们使用DLQ时,我发现抛出异常或将其设置为null并不能真正工作。

我将在MPP之后发出一个忽略空消息的拉请求。

EN

回答 1

Stack Overflow用户

发布于 2017-09-29 07:14:22

当消息重复时,从ImmediateAcknowledgeAmqpException引发从DuplicateChecking MPP的postProcessMessage()扩展的异常也不会将消息传递给兔子侦听器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46314742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档