有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Spring boot框架中使用Apache Camel的ActiveMQ producer的java性能设置

我们有一个spring boot应用程序,我们使用apache camel作为消息处理框架。我们正在努力优化我们的应用程序设置,以使ActiveMQ队列上的消息快速排队,队列另一端的日志存储作为使用者接收消息

文档分散在许多地方,而且有太多的配置可用

例如,camel link for spring boot指定了102个选项。类似地,activemq apache camel link详细介绍了这些内容

这是我们目前配置的:

应用程序。属性:

################################################
# 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,而不是默认的SpringJMS模板bean,它是自动获取的

2.我们还希望过程是异步的。我们只想把消息放到队列中,不想等待activemq的任何确认,也不想做任何重试之类的事情

3-我们只想在队列已满时等待重试

4-我们应该在哪里设置ActiveMq大小?而且activemq正在把东西放入死信队列,以防没有消费者?我们想推翻这种行为,并想把信息留在那里。(这是否必须在Activemq中配置,而不是在我们的应用程序/apache camel中配置)

更新 以下是我们经过进一步调查并根据目前的反馈意见解决的问题。注意:这不涉及重试,因此我们将尝试答案中建议的选项

对于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

共 (1) 个答案

  1. # 1 楼答案

    1. 是的,您需要使用pooledConnectionFactory。尤其是骆驼+弹簧靴。或者使用camel sjms组件。罪魁祸首是Spring的JMSTemplate。超高延迟

    2. 发送非持久和自动确认,同时在连接工厂上启用sendAsync

    3. 你需要抓住javax。jms。ResourceAllocationException在生产者流控制启动时执行重试的路由中(又名队列或代理已满)

    4. ActiveMQ根据字节而不是消息计数进行大小调整。有关基于字节限制队列大小的信息,请参见Producer Flow Control文档和Per-Destination Policies策略中的系统使用设置