java—在SpringBoot框架中使用ApacheCamel的activemq生产者的性能设置

hjqgdpho  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(209)

我们有一个spring引导应用程序,我们使用apachecamel作为消息处理的框架。我们正在努力优化我们的应用程序设置,使activemq队列上的消息排队速度更快,队列另一端的logstash作为使用者接收消息。
文档分散在许多地方,并且有太多可用的配置。
例如,spring boot的camel链接指定了102个选项。类似地,activemqapachecamel链接更详细地描述了这些。
这是我们目前配置的:
应用程序属性:


################################################ 

# Spring Active MQ

################################################ 

spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.packages.trust-all=true
spring.activemq.user=admin
spring.activemq.password=admin

Apache Camel

.to("activemq:queue:"dataQueue"?messageConverter=#queueMessageConverter");

问题:
1-我们怀疑我们必须使用poolconnectionfactory,而不是默认的springjms模板bean,它以某种方式自动获取。
2-我们还希望这个过程是异步的。我们只想把消息放到队列中,不想等待activemq的任何确认,也不想做任何重试之类的事情。
3-我们只想在队列已满时等待重试。
4-我们应该在哪里设置activemq大小的设置?而且activemq正在把东西放到死信队列中,以防没有可用的消费者?我们想推翻这种行为,并希望保持信息在那里(是否必须在activemq中配置,而不是在我们的app/apache camel中配置
最新情况是,我们已经解决了一些更多的调查后,根据目前的反馈。注意:这不涉及重试,因为我们将尝试答案中建议的选项。
对于轿车队列:
制作人:

.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
xoefb8l8

xoefb8l81#

是的,您需要使用pooledconnectionfactory。尤其是 Camel +Spring Boot。或者使用camel sjms组件。罪魁祸首是spring的jmstemplate。超高延迟。
发送非永久和自动确认,同时在连接工厂上启用sendasync
您需要在路由中捕获javax.jms.resourceallocationexception,以便在生产者流控制启动时重试(又称队列或代理已满)
activemq不基于字节而不是消息计数来调整大小。有关基于字节限制队列大小的信息,请参阅生产者流控制文档和每个目标策略中的systemusage设置。

相关问题