簡體   English   中英

在 Spring 引導框架中使用 Apache Camel 的 ActiveMQ 生產者的性能設置

[英]Performance settings for ActiveMQ producer using Apache Camel in Spring boot framework

我們有一個 spring 引導應用程序,我們使用 apache camel 作為消息處理框架。 我們正在嘗試最好地優化我們的應用程序設置,以使 ActiveMQ 隊列上的消息排隊速度更快,隊列另一端的 Logstash 作為消費者接收這些消息。

文檔分散在很多地方,可用的配置太多。

例如, spring 引導的駱駝鏈接指定了 102 個選項。 同樣, activemq apache 駱駝鏈接詳細說明了這些內容。

這是我們當前配置的:

應用程序屬性:

################################################
# 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 駱駝

.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
  1. 是的,您需要使用 pooledConnectionFactory。 尤其是駱駝+彈簧靴。 或者看看使用 camel-sjms 組件。 罪魁禍首是 Spring 的 JMSTemplate。 超高延遲。

  2. 發送 NON_PERSISTENT 和 AUTO_ACK,同時在連接工廠上開啟 sendAsync

  3. 當生產者流控制啟動(又名隊列或代理已滿)時,您需要在路由中捕獲 javax.jms.ResourceAllocationException 以進行重試

  4. ActiveMQ 根據字節而不是消息計數進行大小調整。 請參閱Producer Flow Control文檔和Per-Destination Policies策略中的 SystemUsage 設置,以根據字節限制隊列大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM