spring-boot - SimpleMessageListenerContainer 使用 RetryOperationsInterceptor 订阅多个队列
问题描述
我正在使用订阅 3 个不同队列的 SimpleMessageListenerContainer。SimpleMessageListenerContainer 已经配置了具有指数退避策略的 RetryOperationsInterceptor。
我的 SimpleMessageListenerContainer 已配置:
container.addQueueNames("news.politics","news.science","news.tech");
container.setMaxConcurrentConsumers(10);
container.setAdviceChain(new Advice[]{retryInterceptor});
如果来自已消费的 3 个队列之一的消息进入错误状态导致异常,则消费者会按预期触发策略的指数返回。但是,我注意到消费者停止循环,以处理其他 2 个队列上的消息。我在想,由于消费者的“MaxConcurrentConsumer”设置为 10,消费者将开始产生消费者线程并循环其余队列。
- 这是 SimpleMessageListenerContainer 的正常行为吗?
- 这种行为可以调整吗?
- 对于我的用例,是否建议每个队列有一个 SimpleMessageListenerContainer 以保持它们隔离?也许想出一个装饰器 CompositeSimpleMessageListener 容器,它在每个队列内部都有一个 SimpleMessageListenerContainers 映射?
解决方案
增加消费者的算法有限;如果重试拦截器挂起消费者线程,它将阻止新消费者的启动。
要么增加concurrentConsumers
(至少 3)或切换到DirectMessageListenerContainer
. 请参阅选择容器。
推荐阅读
- ios - 在 Swift 上使用 AudioKit 反转 InputNode 上的音频相位
- python - Matplotlib 导航工具栏打破 PyQT5 布局中的垂直对齐
- javascript - 如何使用 imageToBase64 在节点中访问然后响应外部承诺
- python - 基于其他两个数据框构建数据框
- amazon-s3 - 当 OkHttp 与 Postman、Unirest 和 HttpURLConnection 一起使用时,使用 OkHttp 的请求出现 HTTP 403 错误,请求使用 AWS 签名签名
- delphi - Spring4D:在创建中使用所有者解析 TFrame
- python - 将 2 个 numpy 数组合并到字典中
- reactjs - 如何在下一个带有firebase的js中正确地进行注册流程?
- swagger - Swagger OpenAPI 数组文档作为响应
- javascript - 使用 Express 流式传输结果时获取连接超时