우리는 스프링 부트 애플리케이션을 가지고 있으며 메시지 처리를위한 프레임 워크로 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