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