카테고리 없음

Spring 부트 프레임 워크에서 Apache Camel을 사용하는 ActiveMQ 생산자에 대한 성능 설정

기록만이살길 2021. 2. 28. 23:04
반응형

Spring 부트 프레임 워크에서 Apache Camel을 사용하는 ActiveMQ 생산자에 대한 성능 설정

1. 질문(문제점):

우리는 스프링 부트 애플리케이션을 가지고 있으며 메시지 처리를위한 프레임 워크로 apache camel을 사용하고 있습니다. 우리는 큐의 다른 쪽 끝에있는 Logstash가 소비자로 수신하는 ActiveMQ 큐의 메시지를 빠르게 대기열에 넣을 수 있도록 애플리케이션 설정을 최적화하기 위해 최선을 다하고 있습니다.

문서가 여러 곳에 흩어져 있고 사용 가능한 구성이 너무 많습니다.

예를 들어, 스프링 부츠낙타 링크는 102 개의 옵션을 지정합니다. 유사하게, activemq apache camel 링크는 이것들을 훨씬 더 자세히 설명합니다.

이것은 현재 우리가 구성한 것입니다.

Application.properties :

################################################
# 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-자동으로 선택되는 기본 Spring JMS Template Bean이 아닌 poolConnectionFactory를 사용해야한다고 생각합니다.

2-또한 프로세스가 비동기 적이기를 원합니다. 우리는 메시지를 대기열에 넣고 activemq에서 ACK를 기다리거나 재시도 등을 수행하고 싶지 않습니다.

3-대기열이 가득 찬 경우에만 재 시도를 기다리고 싶습니다.

4-ActiveMq 크기에 대한 설정을 어디에서 설정해야합니까? 또한 activemq는 소비자를 사용할 수없는 경우를 대비하여 배달 못한 편지 대기열에 물건을 넣습니다. 우리는 그 행동을 무시하고 거기에 메시지를 유지하고 싶습니다. (이것은 우리의 app / apache camel이 아니라 Activemq에서 구성되어야합니까?)

업데이트 여기에 우리는 더 많은 조사를 거쳐 현재 피드백을 기반으로 해결했습니다. 참고 : 여기에는 재 시도가 포함되지 않으므로 답변에서 제안 된 옵션을 시도합니다.

Seda 대기열의 경우 :

생산자:

.to("seda:somequeue?waitForTaskToComplete=Never");

소비자:

.from("seda:somequeue?concurrentConsumers=20");

활성 MQ :

.to("activemq:queue:dataQueue?disableReplyTo=true);

Application.Properties :

#Enable poolconnection factory
spring.activemq.pool.enabled=true
spring.activemq.pool.blockIfFull=true
spring.activemq.pool.max-connections=50

2. 해결방안:

  1. 예, pooledConnectionFactory를 사용해야합니다. 특히 Camel + Spring Boot와 함께. 또는 camel-sjms 구성 요소를 사용하십시오. 범인은 Spring의 JMSTemplate입니다. 매우 높은 대기 시간.

  2. NON_PERSISTENT 및 AUTO_ACK를 보내고 연결 팩토리에서 sendAsync도 켜십시오.

  3. 생산자 흐름 제어가 시작될 때 재 시도를 수행하려면 경로에서 javax.jms.ResourceAllocationException을 포착해야합니다 (일명 대기열 또는 브로커가 가득 참).

  4. ActiveMQ는 메시지 개수가 아닌 바이트를 기준으로 크기를 조정합니다. 생산자 흐름 제어 문서 의 SystemUsage 설정 바이트를 기준으로 대기열 크기를 제한 하는 대상별 정책 정책을 참조하세요 .

65765514
반응형