java - 在 Spring Boot 框架中使用 Apache Camel 的 ActiveMQ 生产者的性能设置
问题描述
我们有一个 spring boot 应用程序,我们使用 apache camel 作为消息处理的框架。我们正在尝试最好地优化我们的应用程序设置,以使 ActiveMQ 队列上的消息排队速度更快,队列另一端的 Logstash 作为消费者接收这些消息。
文档分散在很多地方,可用的配置太多。
比如spring boot的camel link指定了102个选项。同样,activemq apache camel 链接详细说明了这些内容。
这是我们当前配置的:
应用程序属性:
################################################
# Spring Active MQ
################################################
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.packages.trust-all=true
spring.activemq.user=admin
spring.activemq.password=admin
阿帕奇骆驼
.to("activemq:queue:"dataQueue"?messageConverter=#queueMessageConverter");
问题:
1 - 我们怀疑我们必须使用 poolConnectionFactory 而不是默认的 Spring JMS 模板 bean,它以某种方式自动获取。
2 - 我们还希望该过程是异步的。我们只想将消息放在队列中,不想等待来自 activemq 的任何 ACK 或执行任何重试或其他操作。
3 - 我们只想在队列已满时等待重试。
4 - 我们应该在哪里设置 ActiveMq 大小的设置?如果没有可用的消费者,activemq 还会将东西放入死信队列吗?我们希望覆盖该行为并希望将消息保留在那里。(这是否必须在 Activemq 中配置,而不是在我们的 app/apache 骆驼中)
更新 这里是我们经过更多调查并基于现在的反馈解决了这个问题。注意:这不涉及重试,因为我们将尝试答案中建议的选项。
对于 Seda 队列:
生产商:
.to("seda:somequeue?waitForTaskToComplete=Never");
消费者:
.from("seda:somequeue?concurrentConsumers=20");
活动 MQ:
.to("activemq:queue:dataQueue?disableReplyTo=true);
应用程序属性:
#Enable poolconnection factory
spring.activemq.pool.enabled=true
spring.activemq.pool.blockIfFull=true
spring.activemq.pool.max-connections=50
解决方案
是的,您需要使用 pooledConnectionFactory。尤其是骆驼+弹簧靴。或者看看使用 camel-sjms 组件。罪魁祸首是 Spring 的 JMSTemplate。超高延迟。
发送 NON_PERSISTENT 和 AUTO_ACK,同时在连接工厂上开启 sendAsync
当生产者流控制启动(又名队列或代理已满)时,您需要在路由中捕获 javax.jms.ResourceAllocationException 以进行重试
ActiveMQ 根据字节而不是消息计数进行大小调整。请参阅Producer Flow Control文档和Per-Destination Policies策略中的 SystemUsage 设置,以根据字节限制队列大小。
推荐阅读
- javascript - 如何解决odoo 12中缺少的依赖odoo js?
- ios - 使用变异函数重构大型 Swift 结构
- javascript - 仅使用 jQuery 验证器验证数字不起作用
- apache-spark-sql - Pyspark-SQL Sum Integer to Date (with sql)
- pdf - 仅当读者同意条款和条件时才能访问 PDF 中的其他页面
- javascript - 按钮无法启用
- api - 阅读和编辑时对 DTO 感到困惑。如何设计 DTO 以在 VUEjs 应用程序中填写表单?
- php - 如何使用手动方法重试 Laravel 事务?
- sql-server - 消息 8152,级别 16,状态 14,字符串或二进制数据将被截断
- c# - 用于 Azure Blob 管理的 Azure.Storage.Blobs 与 Microsoft.WindowsAzure.Storage.Blob dll