본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

ActiveMQ 5.x 연동

원문 보기 위키 갱신

ActiveMQ 컴포넌트는 JMS 컴포넌트를 확장해서 Apache ActiveMQ 5.x 브로커에 바로 연결할 수 있게 미리 설정을 맞춰둔 컴포넌트예요. Camel 1.0부터 제공됐고, producer와 consumer를 모두 지원합니다. Artemis 브로커라면 JMS 컴포넌트를, ActiveMQ 6.x라면 camel-activemq6 컴포넌트를 쓰는 게 정확한 선택이에요.

출처: 문서

본문

Camel 1.0부터 지원

producer와 consumer 모두 지원

ActiveMQ 컴포넌트는 JMS 컴포넌트의 확장판으로, Apache ActiveMQ 5.x(Artemis 아님)를 쓰도록 미리 설정되어 있어요. Apache ActiveMQ Artemis 사용자는 JMS 컴포넌트를 쓰면 됩니다.

중요 camel-activemq 컴포넌트는 ActiveMQ 5.x 클래식 브로커에 맞춰져 있어요. ActiveMQ 6.x 브로커라면 대신 camel-activemq6 컴포넌트를 쓰세요.

팁 더 많은 문서

문서와 예시가 더 필요하면 JMS 컴포넌트를 참고하세요.

Maven 사용자는 이 컴포넌트를 쓰려면 pom.xml에 다음 의존성을 추가해야 해요:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-activemq</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

URI format

activemq:[queue:|topic:]destinationName[?options]

destinationName은 JMS 큐 또는 토픽 이름이에요. 기본적으로 destinationName은 큐 이름으로 해석됩니다. 예를 들어 foo 큐에 연결하려면 이렇게 써요:

activemq:foo

옵션 설정 방법

Camel 컴포넌트는 두 단계로 나눠 설정합니다:

  • 컴포넌트(component) 레벨

  • 엔드포인트(endpoint) 레벨

컴포넌트 옵션 설정

컴포넌트 레벨에서는 엔드포인트들이 물려받는 공통·일반 설정을 정해요. 설정 계층 중 가장 위에 해당합니다. 예를 들어 컴포넌트에는 보안 설정, 인증용 자격 증명, 네트워크 연결 URL 같은 것들이 들어가죠.

컴포넌트마다 옵션이 몇 개뿐인 경우도 있고 많은 경우도 있어요. 컴포넌트는 보통 널리 쓰는 기본값을 이미 갖고 있어서, 옵션을 몇 개만 설정하거나 아예 안 건드려도 되는 경우가 많습니다.

컴포넌트 설정 방법은 이렇게 있어요:

  • Component DSL.

  • 설정 파일(application.properties, *.yaml 파일 등).

  • Java 코드에서 직접.

엔드포인트 옵션 설정

엔드포인트는 옵션이 많아서 설정에 시간을 더 쓰게 됩니다. 이 옵션들로 엔드포인트가 어떻게 동작할지 원하는 대로 조정할 수 있어요. 옵션은 엔드포인트를 consumer(from)로 쓰는지, producer(to)로 쓰는지, 둘 다 쓰는지에 따라 나눠집니다.

엔드포인트 설정은 보통 엔드포인트 URI에 _path_와 query 파라미터로 직접 하는 경우가 많아요. Java에서 엔드포인트와 데이터 포맷을 _타입 세이프_하게 설정하려면 Endpoint DSL과 DataFormat DSL을 쓸 수도 있습니다. 옵션을 설정할 때 좋은 습관은 프로퍼티 플레이스홀더를 쓰는 거예요. 플레이스홀더를 쓰면 이런 점이 좋아요:

  • URL, 포트 번호, 민감한 정보 등을 코드에 하드코딩하는 걸 막아줘요.

  • 설정을 코드 밖으로 분리할 수 있어요.

  • 코드가 더 유연해지고 재사용하기 좋아집니다.

아래 두 섹션에서 모든 옵션을 컴포넌트 먼저, 그다음 엔드포인트 순으로 나열해요.

컴포넌트 옵션

ActiveMQ 5.x 컴포넌트가 지원하는 옵션은 아래와 같아요.

Name Description Default Type
brokerURL (common) ActiveMQ 연결에 쓸 브로커 URL을 지정해요. 설정이 없으면 기본값으로 localhost:61616을 쓰지만(환경 변수 설정으로 재정의할 수 있어요). String
clientId (common) 사용할 JMS 클라이언트 ID를 지정해요. 지정한다면 유일해야 하고 하나의 JMS 연결 인스턴스만 쓸 수 있어요. 보통 JMS 1.1의 durable 토픽 구독에서만 필요합니다. String
connectionFactory (common) 사용할 커넥션 팩토리예요. 커넥션 팩토리는 컴포넌트나 엔드포인트 둘 중 하나에 반드시 설정해야 합니다. ConnectionFactory
disableReplyTo (common) 메시지의 JMSReplyTo 헤더를 Camel이 무시할지 지정해요. true면 Camel은 JMSReplyTo 헤더가 가리키는 목적지로 응답을 보내지 않아요. 라우트에서 소비하면서 응답 메시지는 코드의 다른 컴포넌트가 처리하길 원할 때, 또는 서로 다른 브로커 사이에서 Camel을 프록시처럼 쓰면서 메시지를 한 시스템에서 다른 시스템으로 라우팅할 때 유용합니다. false boolean
durableSubscriptionName (common) durable 토픽 구독을 지정할 때 쓰는 durable 구독자 이름이에요. clientId 옵션도 함께 설정해야 합니다. String
embedded (common) 개발·테스트 용도로 메모리 내(비영속) 임베디드 ActiveMQ 브로커를 써요. classpath에 activemq-broker JAR이 있어야 합니다. false boolean
jmsMessageType (common) Camel에서 브로커로 JMS 메시지를 보낼 때(요청/응답에서도) 특정 jakarta.jms.Message 구현을 강제로 쓰게 해요. Camel이 메시지를 받을 때는 보낸 클라이언트가 정한 타입에 고정되므로 이 옵션이 적용되지 않아요. 기본적으로 Camel은 메시지 본문 타입에서 JMS 메시지 타입을 정하는데, 이 옵션으로 직접 지정할 수 있죠. 가능한 값: Bytes, Map, Object, Stream, Text. JmsMessageType
replyTo (common) 명시적인 ReplyTo 목적지를 지정해요(consumer에서 들어오는 Message.getJMSReplyTo() 값을 덮어씀). String
testConnectionOnStartup (common) 시작할 때 연결을 테스트할지 지정해요. 이렇게 하면 Camel 시작 시 모든 JMS consumer가 브로커와 유효한 연결을 갖는 게 보장돼요. 연결을 얻지 못하면 시작 중 예외를 던져서, 실패한 연결로 Camel이 시작되는 걸 막아줍니다. JMS producer도 함께 테스트해요. false boolean
usePooledConnection (common) PooledConnectionFactory 사용 여부를 켜고 꺼요. 켜면 메시지 소비 스레드 밖에서 ActiveMQ로 메시지를 보낼 때, 메시지마다 연결·세션·producer를 새로 만들고 닫는 Spring JmsTemplate 기본 동작 대신 풀링을 씁니다. 기본값은 true예요. true boolean
useSingleConnection (common) Spring SingleConnectionFactory 사용 여부를 켜고 꺼요. 켜면 메시지 소비 스레드 밖에서 ActiveMQ로 메시지를 보낼 때, 메시지마다 연결·세션·producer를 새로 만들고 닫는 Spring JmsTemplate 기본 동작 대신 풀링을 씁니다. 기본값은 false이고 기본으로 풀링 커넥션을 써요. false boolean
acknowledgementModeName (consumer) JMS 승인(acknowledgement) 이름이에요. SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE 중 하나입니다. AUTO_ACKNOWLEDGE String
artemisConsumerPriority (consumer) 컨슈머 우선순위를 쓰면 활성 상태인 우선순위 높은 컨슈머가 메시지를 받도록 보장할 수 있어요. 보통 큐에 연결된 활성 컨슈머들은 라운드 로빈 방식으로 메시지를 받습니다. 컨슈머 우선순위를 쓰면 같은 높은 우선순위의 활성 컨슈머가 여러 개일 때 라운드 로빈으로 전달되고, 높은 우선순위 컨슈머가 메시지를 받을 크레딧이 없거나 메시지 수락을 거절한 경우(예: 컨슈머의 셀렉터 조건에 맞지 않을 때)에만 낮은 우선순위 컨슈머에게 갑니다. int
asyncConsumer (consumer) JmsConsumer가 Exchange를 비동기로 처리할지 여부예요. 켜면 이전 메시지를 비동기로 처리하는 동안(비동기 라우팅 엔진이) JmsConsumer가 큐에서 다음 메시지를 미리 가져올 수 있어서, 메시지가 100% 엄격한 순서로 처리되지 않을 수 있어요. 끄면(기본) 이전 Exchange 처리가 끝나야 다음 메시지를 가져옵니다. transacted를 켰다면 트랜잭션은 동기로 실행해야 해서 asyncConsumer=true여도 비동기로 돌지 않아요. false boolean
autoStartup (consumer) consumer 컨테이너를 자동으로 시작할지 지정해요. true boolean
cacheLevel (consumer) 내부 JMS 리소스의 캐시 레벨을 ID로 지정해요. 자세한 건 cacheLevelName 옵션을 보세요. int
cacheLevelName (consumer) 내부 JMS 리소스의 캐시 레벨을 이름으로 지정해요. 기본 설정은 CACHE_AUTO예요. 자세한 내용은 Spring 문서와 트랜잭션 캐시 레벨(Transactions Cache Levels) 문서를 참고하세요. 가능한 값: CACHE_AUTO, CACHE_CONNECTION, CACHE_CONSUMER, CACHE_NONE, CACHE_SESSION. CACHE_AUTO String
concurrentConsumers (consumer) JMS에서 소비할 때의 기본 동시 consumer 수를 지정해요(JMS 위의 요청/응답 제외). 스레드를 동적으로 늘렸다 줄이는 건 maxMessagesPerTask 옵션으로 조절해요. JMS 위에서 요청/응답을 할 때는 replyToConcurrentConsumers 옵션으로 응답 메시지 리스너의 동시 consumer 수를 조절합니다. 1 int
maxConcurrentConsumers (consumer) JMS에서 소비할 때의 최대 동시 consumer 수를 지정해요(JMS 위의 요청/응답 제외). 스레드를 동적으로 늘렸다 줄이는 건 maxMessagesPerTask 옵션으로 조절해요. JMS 위에서 요청/응답을 할 때는 replyToMaxConcurrentConsumers 옵션으로 응답 메시지 리스너의 동시 consumer 수를 조절합니다. int
replyToDeliveryPersistent (consumer) 응답에 기본으로 영속(persistent) 전달을 쓸지 지정해요. true boolean
selector (consumer) 사용할 JMS 셀렉터를 지정해요. String
subscriptionDurable (consumer) 구독을 durable로 만들지 설정해요. 쓸 durable 구독 이름은 subscriptionName 프로퍼티로 지정할 수 있어요. 기본값은 false고, durable 구독을 등록하려면 true로 하되 보통 subscriptionName 값을 함께 지정하는 게 좋습니다(메시지 리스너 클래스 이름으로 충분하다면 없어도 돼요). 토픽(pub-sub 도메인)을 들을 때만 의미가 있어서 이 설정은 pubSubDomain 플래그도 함께 바꿔요. false boolean
subscriptionName (consumer) 만들 구독의 이름을 지정해요. 공유 또는 durable 구독을 쓰는 토픽(pub-sub 도메인)에 적용돼요. 구독 이름은 이 클라이언트의 JMS 클라이언트 ID 안에서 유일해야 하고, 기본값은 지정한 메시지 리스너의 클래스 이름입니다. 참고: 구독별로 동시 consumer는 1개만 허용되는데(JMS 2.0 공유 구독 제외), 이건 이 메시지 리스너 컨테이너의 기본값이에요. String
subscriptionShared (consumer) 구독을 공유(shared)로 만들지 설정해요. 쓸 공유 구독 이름은 subscriptionName 프로퍼티로 지정할 수 있어요. 기본값은 false고, 공유 구독을 등록하려면 true로 하되 보통 subscriptionName 값을 함께 지정하는 게 좋습니다(메시지 리스너 클래스 이름으로 충분하다면 없어도 돼요). 공유 구독은 durable일 수도 있어서 subscriptionDurable과 함께 쓰는 경우가 많아요. 토픽(pub-sub 도메인)을 들을 때만 의미가 있어서 이 설정은 pubSubDomain 플래그도 함께 바꿉니다. JMS 2.0 호환 브로커가 필요해요. false boolean
acceptMessagesWhileStopping (consumer (advanced)) consumer가 멈추는 동안에도 메시지를 받아들일지 지정해요. 런타임에 JMS 라우트를 시작하고 멈추는데 큐에 아직 메시지가 쌓여 있다면 이 옵션을 켜는 걸 고려해 보세요. false인 상태에서 JMS 라우트를 멈추면 메시지가 거부될 수 있고, 브로커는 재전송을 시도하다가 또 거부되고, 결국 브로커의 데드 레터 큐로 옮겨질 수도 있어요. 이걸 피하려면 이 옵션을 켜는 게 좋아요. false boolean
allowReplyManagerQuickStop (consumer (advanced)) 요청/응답 메시징의 reply manager가 쓰는 DefaultMessageListenerContainer가, JmsConfiguration#isAcceptMessagesWhileStopping이 켜져 있고 org.apache.camel.CamelContext가 멈추는 중일 때 runningAllowed 플래그로 퀵 스톱을 허용할지 여부예요. 이 퀵 스톱 기능은 일반 JMS consumer에는 기본으로 켜져 있고, reply manager에서 쓰려면 이 플래그를 켜야 합니다. false boolean
consumerType (consumer (advanced)) 쓸 consumer 타입이에요. 이 타입이 어떤 Spring JMS 리스너를 쓸지 결정해요. Default는 org.springframework.jms.listener.DefaultMessageListenerContainer를, Simple은 org.springframework.jms.listener.SimpleMessageListenerContainer를 씁니다. Custom을 지정하면 messageListenerContainerFactory 옵션으로 정의한 MessageListenerContainerFactory가 사용할 org.springframework.jms.listener.AbstractMessageListenerContainer를 결정해요. 값: Simple, Default, Custom. Default ConsumerType
defaultTaskExecutorType (consumer (advanced)) DefaultMessageListenerContainer에서 쓸 기본 TaskExecutor 타입을 지정해요. consumer 엔드포인트와 producer 엔드포인트의 ReplyTo consumer 둘 다에 적용됩니다. SimpleAsync는 Spring의 SimpleAsyncTaskExecutor를, ThreadPool은 최적 값의 Spring ThreadPoolTaskExecutor(캐시드 스레드 풀 비슷)를 써요. 설정하지 않으면 이전 동작이 기본인데, consumer 엔드포인트는 캐시드 스레드 풀, 응답 consumer는 SimpleAsync를 씁니다. 동시 consumer 수가 늘었다 줄었다 하는 탄력적 구성에서 스레드 낭비를 줄이려면 ThreadPool을 권장해요. 값: ThreadPool, SimpleAsync. DefaultTaskExecutorType
eagerLoadingOfProperties (consumer (advanced)) 메시지가 로드되자마자 JMS 프로퍼티와 페이로드를 미리 로드해요. JMS 프로퍼티가 필요 없을 때는 비효율적이지만, 때로는 JMS 프로바이더나 JMS 프로퍼티 사용의 문제를 일찍 잡아낼 수 있습니다. eagerPoisonBody 옵션도 참고하세요. false boolean
eagerPoisonBody (consumer (advanced)) eagerLoadingOfProperties가 켜져 있는데 JMS 메시지 페이로드(JMS 본문이나 프로퍼티)가 poison(읽거나 매핑할 수 없음)이면, 메시지를 처리할 수 있도록 이 텍스트를 본문으로 설정해요(poison 원인은 이미 Exchange의 예외로 저장돼 있습니다). eagerPoisonBody=false로 설정하면 끌 수 있어요. eagerLoadingOfProperties 옵션도 참고하세요. Poison JMS message due to ${exception.message} String
exposeListenerSession (consumer (advanced)) 메시지를 소비할 때 리스너 세션을 노출할지 지정해요. true boolean
replyToConsumerType (consumer (advanced)) 응답 consumer(요청/응답 시)의 consumer 타입이에요. 이 타입이 어떤 Spring JMS 리스너를 쓸지 결정해요. Default는 org.springframework.jms.listener.DefaultMessageListenerContainer를, Simple은 org.springframework.jms.listener.SimpleMessageListenerContainer를 씁니다. Custom을 지정하면 messageListenerContainerFactory 옵션으로 정의한 MessageListenerContainerFactory가 사용할 org.springframework.jms.listener.AbstractMessageListenerContainer를 결정해요. 값: Simple, Default, Custom. Default ConsumerType
replyToSameDestinationAllowed (consumer (advanced)) JMS consumer가 자신이 소비하는 것과 같은 목적지로 응답 메시지를 보내도록 허용할지 여부예요. 이렇게 하면 같은 메시지를 소비하고 다시 보내는 무한 루프를 막을 수 있습니다. false boolean
taskExecutor (consumer (advanced)) 메시지 소비에 쓸 커스텀 task executor를 지정할 수 있어요. TaskExecutor
deliveryDelay (producer) JMS 전송 호출에 쓸 지연(delivery delay)을 설정해요. 이 옵션은 JMS 2.0 호환 브로커가 필요합니다. -1 long
deliveryMode (producer) 사용할 전달 모드를 지정해요. 가능한 값은 jakarta.jms.DeliveryMode에 정의된 값들이에요. NON_PERSISTENT = 1, PERSISTENT = 2. Integer
deliveryPersistent (producer) 기본으로 영속(persistent) 전달을 쓸지 지정해요. true boolean
explicitQosEnabled (producer) 메시지를 보낼 때 deliveryMode, priority, timeToLive 같은 QoS 설정을 쓸지 지정해요. 이 옵션은 Spring JmsTemplate을 기반으로 하고, deliveryMode·priority·timeToLive 옵션은 현재 엔드포인트에 적용됩니다. 반면 preserveMessageQos 옵션은 메시지 단위로 동작하면서 QoS 프로퍼티를 Camel In 메시지 헤더에서만 읽어요. false Boolean
formatDateHeadersToIso8601 (producer) JMS 날짜 프로퍼티를 ISO 8601 표준 형식으로 표기할지 설정해요. false boolean
lazyStartProducer (producer) producer를 lazy(첫 메시지 시점)로 시작할지 여부예요. lazy 시작을 쓰면 producer가 시작 중 실패해서 라우트 시작이 실패하는 상황에서도 CamelContext와 라우트가 시작될 수 있고, 시작 실패 처리를 Camel의 라우팅 에러 핸들러로 넘길 수 있어요. 다만 첫 메시지 처리 시점에 producer를 만들고 시작하는 데 시간이 좀 걸려서 전체 처리 시간이 길어질 수 있는 점은 유의하세요. false boolean
preserveMessageQos (producer) 메시지에 지정된 QoS 설정으로 메시지를 보내고 싶다면 true로 하세요(JMS 엔드포인트의 QoS 설정 대신). 고려되는 세 헤더는 JMSPriority, JMSDeliveryMode, JMSExpiration이고, 전부 또는 일부만 줄 수 있어요. 주지 않으면 Camel은 엔드포인트 값을 대신 씁니다. 즉 이 옵션을 쓰면 헤더가 엔드포인트 값을 이기는 거예요. 반면 explicitQosEnabled 옵션은 엔드포인트에 설정된 값만 쓰고 메시지 헤더 값은 쓰지 않습니다. false boolean
priority (producer) 1보다 큰 값은 전송 시 메시지 우선순위를 지정해요(1이 가장 낮고 9가 가장 높음). 이 옵션이 효과를 내려면 explicitQosEnabled 옵션도 켜야 합니다. 값: 1, 2, 3, 4, 5, 6, 7, 8, 9. 4 int
replyToConcurrentConsumers (producer) JMS 위에서 요청/응답을 할 때의 기본 동시 consumer 수를 지정해요. 스레드를 동적으로 늘렸다 줄이는 건 maxMessagesPerTask 옵션으로 조절합니다. 1 int
replyToMaxConcurrentConsumers (producer) JMS 위에서 요청/응답을 할 때의 최대 동시 consumer 수를 지정해요. 스레드를 동적으로 늘렸다 줄이는 건 maxMessagesPerTask 옵션으로 조절합니다. int
replyToOnTimeoutMaxConcurrentConsumers (producer) JMS 위에서 요청/응답을 할 때 타임아웃이 발생해도 라우팅을 계속하는 데 쓸 최대 동시 consumer 수를 지정해요. 1 int
replyToOverride (producer) JMS 메시지에 명시적인 ReplyTo 목적지를 넣어서 replyTo 설정을 덮어써요. 메시지를 원격 큐로 포워딩하면서 응답은 ReplyTo 목적지에서 받고 싶을 때 유용합니다. String
replyToType (producer) JMS 위에서 요청/응답을 할 때 replyTo 큐에 어떤 전략을 쓸지 명시적으로 지정해요. 기본적으로 Camel은 임시 큐를 쓰고, replyTo가 설정돼 있으면 기본으로 Shared를 씁니다. 이 옵션으로 공유 큐 대신 전용(exclusive) 큐를 쓸 수 있어요. 자세한 건 Camel JMS 문서를 보되, 특히 클러스터 환경에서의 영향에 대한 설명과, Shared 응답 큐가 Temporary·Exclusive보다 성능이 낮다는 점을 참고하세요. 값: Temporary, Shared, Exclusive. ReplyToType
requestTimeout (producer) InOut 교환 패턴에서 응답을 기다리는 타임아웃(밀리초)이에요. 기본값은 20초입니다. CamelJmsRequestTimeout 헤더로 엔드포인트에 설정된 타임아웃 값을 메시지별로 따로 덮어쓸 수 있어요. requestTimeoutCheckerInterval 옵션도 참고하세요. 20000 long
timeToLive (producer) 메시지를 보낼 때 메시지의 time-to-live(밀리초)를 지정해요. -1 long
allowAdditionalHeaders (producer (advanced)) JMS 스펙상 유효하지 않은 값을 가질 수 있는 추가 헤더를 허용하는 옵션이에요. 예를 들어 WMQ 같은 일부 메시징 시스템은 JMS_IBM_MQMD_ 접두사 헤더에 바이트 배열 등 잘못된 타입의 값을 넣곤 해요. 헤더 이름을 쉼표로 여러 개 지정할 수 있고, 접미사로 와일드카드 매칭도 됩니다. String
allowNullBody (producer (advanced)) 본문 없는 메시지 전송을 허용할지 여부예요. 이 옵션이 false인데 메시지 본문이 null이면 JMSException이 던져집니다. true boolean
alwaysCopyMessage (producer (advanced)) true면 Camel이 producer로 전송할 때 항상 JMS 메시지 복사본을 만들어요. replyToDestinationSelectorName이 설정된 경우 같은 상황에서 복사가 필요합니다(참고로 replyToDestinationSelectorName이 설정되면 Camel은 alwaysCopyMessage를 true로 바꿔요). false boolean
correlationProperty (producer (advanced)) InOut 교환 패턴에서 메시지 상관관계를 맺을 때 JMSCorrelationID JMS 프로퍼티 대신 이 JMS 프로퍼티를 써요. 설정하면 메시지가 오직 이 프로퍼티 값으로만 상관관계가 맺어지고, JMSCorrelationID 프로퍼티는 무시되며 Camel이 설정하지도 않습니다. String
disableTimeToLive (producer (advanced)) time to live를 강제로 끄는 옵션이에요. 예를 들어 JMS 위에서 요청/응답을 하면 Camel은 기본적으로 requestTimeout 값을 보내는 메시지의 time to live로 씁니다. 문제는 보내는 시스템과 받는 시스템의 시계가 맞아야 하는데, 이게 항상 쉽지 않아요. 그럴 때 disableTimeToLive=true로 보내는 메시지에 time to live를 설정하지 않으면, 받는 시스템에서 메시지가 만료되지 않아요. 자세한 내용은 아래 'About time to live' 섹션을 보세요. false boolean
forceSendOriginalMessage (producer (advanced)) mapJmsMessage=false를 쓸 때 라우트 도중 헤더를 건드리면(get 또는 set) Camel은 새 JMS 메시지를 만들어 새 JMS 목적지로 보내요. 이 옵션을 true로 하면 Camel이 받은 원본 JMS 메시지를 보내도록 강제합니다. false boolean
includeSentJMSMessageID (producer (advanced)) InOnly(fire and forget)로 JMS 목적지에 보낼 때만 적용돼요. 켜면 메시지를 JMS 목적지로 보낼 때 JMS 클라이언트가 실제로 쓴 JMSMessageID로 Camel Exchange를 풍부하게 해줍니다. false boolean
replyCorrelationProperty (producer (advanced)) InOut 교환 패턴에서 응답 메시지 상관관계를 맺을 때 JMSCorrelationID JMS 프로퍼티 대신 이 JMS 프로퍼티를 써요. 'correlationProperty'와의 차이는, 'correlationProperty'는 상관관계 id 값을 담는 요청 프로퍼티를 지정할 뿐 응답 셀렉터(JMSCorrelationID=)에는 영향을 주지 않지만, 'replyCorrelationProperty'는 상관관계 id 값을 담는 응답 프로퍼티를 지정하며 응답 셀렉터(=)에 영향을 준다는 점이에요. String
replyToCacheLevelName (producer (advanced)) JMS 위에서 요청/응답을 할 때 응답 consumer의 캐시 레벨을 이름으로 지정해요. 이 옵션은 고정 응답 큐(임시 큐 아님)를 쓸 때만 적용됩니다. Camel은 기본으로 exclusive 큐 또는 replyToSelectorName을 쓰는 shared 큐에는 CACHE_CONSUMER를, replyToSelectorName 없는 shared 큐에는 CACHE_SESSION을 써요. IBM WebSphere 같은 일부 JMS 브로커는 동작하려면 replyToCacheLevelName=CACHE_NONE을 설정해야 할 수 있습니다. 참고: 임시 큐를 쓸 때는 CACHE_NONE이 허용되지 않으니 CACHE_CONSUMER나 CACHE_SESSION 같은 더 높은 값을 써야 해요. 가능한 값: CACHE_AUTO, CACHE_CONNECTION, CACHE_CONSUMER, CACHE_NONE, CACHE_SESSION. String
replyToDestinationSelectorName (producer (advanced)) 고정 이름으로 JMS 셀렉터를 설정해요. 공유 큐를 쓸 때(임시 응답 큐를 안 쓸 때) 다른 사람의 응답 중 내 응답만 걸러 보려면 이걸 쓰면 됩니다. String
streamMessageTypeEnabled (producer (advanced)) StreamMessage 타입을 켤지 설정해요. 파일, InputStream 같은 스트리밍 페이로드는 BytesMessage 또는 StreamMessage로 보내는데, 이 옵션이 어느 쪽을 쓸지 정합니다. 기본인 BytesMessage는 페이로드 전체를 메모리로 읽어야 해요. 이 옵션을 켜면 페이로드를 청크 단위로 메모리에 읽고 각 청크를 더 이상 데이터가 없을 때까지 StreamMessage에 씁니다. false boolean
allowAutoWiredConnectionFactory (advanced) 커넥션 팩토리를 설정하지 않았을 때 레지스트리에서 ConnectionFactory를 자동으로 찾을지 여부예요. ConnectionFactory 인스턴스가 하나만 발견되면 그걸 씁니다. 기본으로 켜져 있어요. true boolean
allowAutoWiredDestinationResolver (advanced) destination resolver를 설정하지 않았을 때 레지스트리에서 DestinationResolver를 자동으로 찾을지 여부예요. DestinationResolver 인스턴스가 하나만 발견되면 그걸 씁니다. 기본으로 켜져 있어요. true boolean
allowSerializedHeaders (advanced) 직렬화된 헤더를 포함할지 제어해요. transferExchange가 true일 때만 적용되고, 객체가 직렬화 가능해야 합니다. Camel은 직렬화할 수 없는 객체는 빼고 WARN 레벨로 기록해요. false boolean
artemisStreamingEnabled (advanced) Apache Artemis 스트리밍 모드에 맞춰 최적화할지 여부예요. Artemis를 JMS StreamMessage 타입과 함께 쓸 때 메모리 오버헤드를 줄일 수 있습니다. Apache Artemis를 쓸 때만 켜야 해요. false boolean
asyncStartListener (advanced) 라우트 시작 시 JmsConsumer 메시지 리스너를 비동기로 시작할지 여부예요. 예를 들어 JmsConsumer가 원격 JMS 브로커에 연결하지 못하면 재시도나 페일오버하느라 블록될 수 있고, 그러면 Camel도 라우트 시작하느라 블록됩니다. 이 옵션을 true로 하면 JmsConsumer가 전용 스레드로 비동기 모드에서 브로커에 연결하는 동안 라우트는 시작될 수 있어요. 이 옵션을 쓸 때는 연결에 실패하면 WARN 레벨로 예외가 기록되고 consumer는 메시지를 받지 못한다는 점을 유의하세요. 이후 라우트를 재시작해서 재시도할 수 있습니다. false boolean
asyncStopListener (advanced) 라우트를 멈출 때 JmsConsumer 메시지 리스너를 비동기로 멈출지 여부예요. false boolean
autowiredEnabled (advanced) 오토와이어링 사용 여부예요. 레지스트리에서 일치하는 타입의 인스턴스가 하나만 있는지 찾아서 컴포넌트에 자동으로 설정하는(옵션이 autowired로 표시돼 있어야 함) 자동 오토와이어링에 쓰입니다. JDBC 데이터 소스, JMS 커넥션 팩토리, AWS 클라이언트 등을 자동 설정할 때 유용해요. true boolean
browseLimit (advanced) 브라우징용으로 메모리에 유지할 최대 메시지 수예요. 무제한은 0. 100 int
configuration (advanced) 공유 JMS 설정을 쓰려면 이걸 사용해요. JmsConfiguration
destinationResolver (advanced) org.springframework.jms.support.destination.DestinationResolver를 교체 가능하게 제공해요. 자신만의 리졸버를 쓸 수 있습니다(예: JNDI 레지스트리에서 실제 목적지를 조회). DestinationResolver
errorHandler (advanced) Message 처리 중 잡히지 않은 예외가 던져졌을 때 호출할 org.springframework.util.ErrorHandler를 지정해요. errorHandler를 설정하지 않으면 기본으로 WARN 레벨로 기록됩니다. errorHandlerLoggingLevel과 errorHandlerLogStackTrace 옵션으로 로그 레벨과 스택 트레이스 기록 여부를 설정할 수 있어서, 커스텀 errorHandler를 직접 만드는 것보다 훨씬 설정이 쉬워요. ErrorHandler
exceptionListener (advanced) 하부 JMS 예외 통지를 받을 JMS Exception Listener를 지정해요. ExceptionListener
idleConsumerLimit (advanced) 특정 시점에 유휴(idle) 상태로 있을 수 있는 consumer 수의 상한을 지정해요. 1 int
idleReceivesPerTaskLimit (advanced) 지정한 횟수의 유휴 수신(idle receive)에 도달하면 consumer를 유휴로 표시해요. 유휴 수신은 설정된 setReceiveTimeout이 지난 후 receiver가 null 메시지를 반환한 순간부터 세요. 이 값으로 유휴 태스크 수가 setIdleTaskExecutionLimit를 넘는지 확인해서 태스크를 재배치할지 판단하고, 그렇지 않으면 리소스를 아낄 수 있습니다. 이 설정은 setMaxMessagesPerTask와 달리, 이 한계에 도달하면 받은 메시지가 null이든 아니든 태스크를 반납하고 재배치해요. 태스크마다 충분히 큰 배치를 원하지만 처리할 메시지가 없어지는 즉시 빨리 반납되길 원한다면 이 설정 하나만으로는 유연하지 않을 수 있어요. setIdleTaskExecutionLimit와의 차이는, 이 설정은 유휴로 표시되는 반복이 몇 번이면 태스크를 반납할지를 결정한다는 점입니다. 예를 들어 setMaxMessagesPerTask='500', #setIdleReceivesPerTaskLimit='60', setReceiveTimeout='1000', setIdleTaskExecutionLimit='1'로 하면, 태스크마다 500개 메시지를 처리하다가 이후 60번의 유휴 수신이 이어지면 태스크가 유휴로 표시되고 반납돼요. 이는 마지막 메시지 처리 후 새 메시지가 안 오면 60초 후에 태스크가 반납된다는 뜻이기도 합니다. int
idleTaskExecutionLimit (advanced) 수신 태스크의 유휴 실행 횟수 상한을 지정해요. 실행 중 아무 메시지도 받지 못한 상태가 이 한계에 도달하면 태스크를 종료하고 수신을 다른 실행 중인 태스크에 맡깁니다(동적 스케줄링의 경우; maxConcurrentConsumers 설정 참고). Spring에서 제공하는 추가 문서도 있어요. 1 int
includeAllJMSXProperties (advanced) JMS에서 Camel Message로 매핑할 때 JMSX 접두사 프로퍼티를 모두 포함할지 여부예요. true로 하면 JMSXAppID, JMSXUserID 같은 프로퍼티가 포함됩니다. 참고: 커스텀 headerFilterStrategy를 쓰면 이 옵션은 적용되지 않아요. false boolean
includeCorrelationIDAsBytes (advanced) JMS consumer가 JMSCorrelationIDAsBytes를 Camel Message의 헤더로 포함할지 여부예요. true boolean
jmsKeyFormatStrategy (advanced) JMS 스펙에 맞도록 JMS 키를 인코딩·디코딩하는 교체 가능한 전략이에요. Camel은 default와 passthrough 두 구현을 기본 제공합니다. default 전략은 점과 하이픈(.과 -)을 안전하게 변환하고, passthrough 전략은 키를 그대로 둬요. JMS 헤더 키에 잘못된 문자가 있어도 신경 쓰지 않는 브로커에 쓸 수 있습니다. org.apache.camel.component.jms.JmsKeyFormatStrategy를 직접 구현해서 # 표기법으로 참조할 수도 있어요. JmsKeyFormatStrategy
mapJmsMessage (advanced) 받은 JMS 메시지를 알맞은 페이로드 타입으로 자동 매핑할지 지정해요. 예: jakarta.jms.TextMessage를 String으로. true boolean
maxMessagesPerTask (advanced) 태스크당 메시지 수예요. -1은 무제한입니다. 동시 consumer에 범위(min max)를 쓰면 이 옵션을 예: 100 같은 값으로 설정해서, 할 일이 줄었을 때 consumer가 얼마나 빨리 줄어들지 조절할 수 있어요. -1 int
messageConverter (advanced) 커스텀 Spring org.springframework.jms.support.converter.MessageConverter를 써서 jakarta.jms.Message와의 매핑을 직접 제어할 수 있어요. MessageConverter
messageCreatedStrategy (advanced) Camel이 JMS 메시지를 보낼 때 jakarta.jms.Message 객체를 새로 만들 때마다 호출되는 MessageCreatedStrategy를 지정해요. MessageCreatedStrategy
messageIdEnabled (advanced) 전송 시 메시지 ID를 붙일지 지정해요. 이건 JMS 브로커에 주는 힌트일 뿐입니다. 프로바이더가 힌트를 받아들이면 메시지 ID는 null로 설정되어야 하고, 힌트를 무시하면 보통의 유일한 값으로 설정되어야 해요. true boolean
messageListenerContainerFactory (advanced) 어떤 org.springframework.jms.listener.AbstractMessageListenerContainer로 메시지를 소비할지 결정하는 MessageListenerContainerFactory의 레지스트리 ID예요. 이걸 설정하면 consumerType이 자동으로 Custom으로 바뀝니다. MessageListenerContainerFactory
messageTimestampEnabled (advanced) 전송 시 타임스탬프를 기본으로 켤지 지정해요. 이건 JMS 브로커에 주는 힌트일 뿐입니다. 프로바이더가 힌트를 받아들이면 타임스탬프는 0으로 설정되어야 하고, 힌트를 무시하면 보통의 값으로 설정되어야 해요. true boolean
objectMessageEnabled (advanced) JMS ObjectMessage 전송·수신을 켤지 여부예요. Java 객체 직렬화는 알려진 보안 취약점 원천이라 기본은 꺼져 있습니다. 메시지 출처를 신뢰하고 JMS로 Java 직렬화 객체를 주고받아야 할 때만 켜세요. 꺼져 있으면 Camel은 JMS ObjectMessage 인스턴스를 만들거나 읽는 걸 거부해요. transferExchange, transferException처럼 내부적으로 ObjectMessage에 의존하는 옵션은 이 옵션이 켜져 있어야 동작합니다. false boolean
pubSubNoLocal (advanced) 자기 연결이 발행한 메시지의 전달을 막을지 지정해요. false boolean
queueBrowseStrategy (advanced) 큐를 브라우징할 때 커스텀 QueueBrowseStrategy를 쓰려면 이걸 지정해요. QueueBrowseStrategy
receiveTimeout (advanced) 메시지 수신 타임아웃(밀리초)이에요. 1000 long
recoveryInterval (advanced) 복구 시도 사이의 간격, 즉 연결을 새로 고치는 간격(밀리초)이에요. 기본값은 5000ms, 즉 5초입니다. 5000 long
requestTimeoutCheckerInterval (advanced) JMS 위에서 요청/응답을 할 때 Camel이 타임아웃된 Exchange를 얼마나 자주 확인할지 설정해요. 기본은 초당 한 번이고, 타임아웃에 더 빨리 반응해야 하면 이 간격을 줄여서 더 자주 확인하면 돼요. 타임아웃 값은 requestTimeout 옵션으로 정해집니다. 1000 long
serviceLocationEnabled (advanced) 시작 시 JMS 브로커의 네트워크 주소 위치를 탐지할지 여부예요. 이 정보는 ConnectionFactory에 대한 리플렉션으로 모으며 벤더마다 다릅니다. 이 옵션으로 끌 수 있어요. true boolean
synchronous (advanced) 동기 처리를 엄격하게 쓸지 설정해요. false boolean
temporaryQueueResolver (advanced) 임시 큐 생성에 자신만의 리졸버를 쓸 수 있게 해주는 교체 가능한 TemporaryQueueResolver예요(일부 메시징 시스템은 임시 큐 생성에 특별한 요구사항이 있어요). TemporaryQueueResolver
transferException (advanced) 켜고 Request Reply(InOut) 메시징을 쓰는 중 consumer 쪽에서 Exchange가 실패하면, 발생한 예외가 jakarta.jms.ObjectMessage로 응답에 실려 돌아와요. 클라이언트가 Camel이면 돌아온 예외를 다시 던집니다. 이렇게 하면 Camel JMS를 라우팅의 브리지로 쓸 수 있어요(예: 영속 큐로 견고한 라우팅). transferExchange도 켜져 있으면 이 옵션이 우선합니다. 잡은 예외는 직렬화 가능해야 하고, consumer 쪽 원본 예외는 producer로 돌아올 때 org.apache.camel.RuntimeCamelException 같은 바깥 예외로 감싸일 수 있어요. 데이터가 Java 객체 직렬화를 쓰고 받는 쪽이 클래스 수준에서 역직렬화할 수 있어야 해서 producer와 consumer가 강하게 결합되므로, 신중하게 쓰세요! false boolean
transferExchange (advanced) 본문과 헤더만이 아니라 Exchange 전체를 와이어로 전송할 수 있어요. 전송되는 필드는: In body, Out body, Fault body, In headers, Out headers, Fault headers, exchange properties, exchange exception입니다. 객체가 직렬화 가능해야 하고, Camel은 직렬화할 수 없는 객체는 빼고 WARN 레벨로 기록해요. 이 옵션은 producer와 consumer 양쪽에서 켜야 합니다. 그래야 Camel이 페이로드가 일반 페이로드가 아니라 Exchange임을 알 수 있어요. 데이터가 Java 객체 직렬화를 쓰고 받는 쪽이 클래스 수준에서 역직렬화할 수 있어야 해서 producer와 consumer가 호환 Camel 버전을 써야 하므로, 신중하게 쓰세요! false boolean
trustAllPackages (advanced) 모든 Java 패키지를 신뢰할지 정해요(Java 객체 JMS 메시지 타입용). 네트워크로 Java 직렬화 객체를 보내는 건 권장되지 않는다는 점을 유의하세요. true로 하면 보안 위험이 노출될 수 있으니 신중하게 쓰세요. false boolean
useMessageIDAsCorrelationID (advanced) InOut 메시지에서 JMSMessageID를 항상 JMSCorrelationID로 쓸지 지정해요. false boolean
waitForProvisionCorrelationToBeUpdatedCounter (advanced) JMS 위에서 요청/응답을 하고 useMessageIDAsCorrelationID 옵션이 켜져 있을 때, 임시(provisional) 상관관계 id가 실제 상관관계 id로 갱신되기를 기다리는 횟수예요. 50 int
waitForProvisionCorrelationToBeUpdatedThreadSleepingTime (advanced) 임시 상관관계 id가 갱신되기를 기다리는 동안 매번 잠들 간격(밀리초)이에요. 100 long
waitForTemporaryReplyToToBeUpdatedCounter (advanced) JMS 위에서 요청/응답을 할 때 임시 replyTo 큐가 만들어져 준비되기를 기다리는 횟수예요. 200 int
waitForTemporaryReplyToToBeUpdatedThreadSleepingTime (advanced) 임시 replyTo 큐가 준비되기를 기다리는 동안 매번 잠들 간격(밀리초)이에요. 100 long
headerFilterStrategy (filter) Camel 메시지와 주고받는 헤더를 필터링할 커스텀 HeaderFilterStrategy를 쓰려면 이걸 지정해요. HeaderFilterStrategy
errorHandlerLoggingLevel (logging) 잡히지 않은 예외를 기록하는 기본 errorHandler의 로그 레벨을 설정할 수 있어요. 값: TRACE, DEBUG, INFO, WARN, ERROR, OFF. WARN LoggingLevel
errorHandlerLogStackTrace (logging) 기본 errorHandler가 스택 트레이스를 기록할지 제어할 수 있어요. true boolean
deserializationFilter (security) jakarta.jms.ObjectMessage.getObject()가 반환하는 본문 클래스에 심층 방어(defense-in-depth) 검사로 적용할 ObjectInputFilter 패턴(jdk.serialFilter 문법)을 설정해요. 이 패턴은 JMS 프로바이더가 페이로드를 역직렬화한 뒤에 평가되므로, 이 옵션만으로는 프로바이더의 ObjectInputStream 안에서 일어나는 가젯 체인 실행을 막을 수 없어요. 그런 공격을 막으려면 JMS 프로바이더 자체의 역직렬화 필터와(또는) JVM 전역 -Djdk.serialFilter도 함께 설정하세요. 이 옵션을 설정하지 않고 JVM 전역 필터도 없으면, java.net.은 거부하고 java., javax., org.apache.camel.은 허용하는 보수적인 기본 필터가 적용됩니다. String
password (security) ConnectionFactory에 쓸 비밀번호예요. username/password를 ConnectionFactory에 직접 설정할 수도 있습니다. String
username (security) ConnectionFactory에 쓸 사용자 이름이에요. username/password를 ConnectionFactory에 직접 설정할 수도 있습니다. String
transacted (transaction) 트랜잭션 모드를 쓸지 지정해요. false boolean
transactedInOut (transaction) InOut 동작(요청/응답)이 기본으로 트랜잭션 모드를 쓸지 지정해요. 이 플래그를 true로 하면 Spring JmsTemplate의 sessionTransacted가 true로 설정되고, InOut 동작에 쓰는 JmsTemplate의 acknowledgeMode도 transacted가 됩니다. Spring JMS 참고: JTA 트랜잭션 안에서는 createQueue, createTopic 메서드에 전달되는 파라미터가 반영되지 않아요. Java EE 트랜잭션 컨텍스트에 따라 컨테이너가 이 값들을 스스로 정합니다. 비슷하게 로컬 관리 트랜잭션 안에서도 이 파라미터는 반영되지 않는데, 이 경우 Spring JMS는 기존 JMS 세션으로 동작하기 때문이에요. 이 플래그를 true로 하면 관리 트랜잭션 밖에서는 짧은 로컬 JMS 트랜잭션을, 관리 트랜잭션(XA 트랜잭션 제외)이 있으면 동기화된 로컬 JMS 트랜잭션을 씁니다. 이러면 JMS 트랜잭션이 메인 트랜잭션(네이티브 JDBC 트랜잭션일 수 있음)과 함께 관리되고, JMS 트랜잭션은 메인 트랜잭션 직후에 커밋되는 효과가 있어요. false boolean
lazyCreateTransactionManager (transaction (advanced)) true면 transacted=true인데 주입된 transactionManager가 없을 때 Camel이 JmsTransactionManager를 만들어요. true boolean
transactionManager (transaction (advanced)) 사용할 Spring 트랜잭션 매니저예요. PlatformTransactionManager
transactionName (transaction (advanced)) 사용할 트랜잭션 이름이에요. String
transactionTimeout (transaction (advanced)) 트랜잭션 모드를 쓸 때의 트랜잭션 타임아웃 값(초)이에요. -1 int

엔드포인트 옵션

ActiveMQ 5.x 엔드포인트는 다음 URI 문법으로 설정해요:

activemq:destinationType:destinationName

다음 _path_와 query 파라미터를 씁니다:

Path 파라미터

Name Description Default Type
destinationType (common) 사용할 목적지 종류예요. 값: queue, topic, temp-queue, temp-topic. queue String
destinationName (common) 필수 목적지로 쓸 큐 또는 토픽 이름이에요. String

Query 파라미터

Name Description Default Type
clientId (common) 사용할 JMS 클라이언트 ID를 지정해요. 지정한다면 유일해야 하고 하나의 JMS 연결 인스턴스만 쓸 수 있어요. 보통 JMS 1.1의 durable 토픽 구독에서만 필요합니다. String
connectionFactory (common) 사용할 커넥션 팩토리예요. 커넥션 팩토리는 컴포넌트나 엔드포인트 둘 중 하나에 반드시 설정해야 합니다. ConnectionFactory
disableReplyTo (common) 메시지의 JMSReplyTo 헤더를 Camel이 무시할지 지정해요. true면 Camel은 JMSReplyTo 헤더가 가리키는 목적지로 응답을 보내지 않아요. 라우트에서 소비하면서 응답 메시지는 코드의 다른 컴포넌트가 처리하길 원할 때, 또는 서로 다른 브로커 사이에서 Camel을 프록시처럼 쓰면서 메시지를 한 시스템에서 다른 시스템으로 라우팅할 때 유용합니다. false boolean
durableSubscriptionName (common) durable 토픽 구독을 지정할 때 쓰는 durable 구독자 이름이에요. clientId 옵션도 함께 설정해야 합니다. String
jmsMessageType (common) Camel에서 브로커로 JMS 메시지를 보낼 때(요청/응답에서도) 특정 jakarta.jms.Message 구현을 강제로 쓰게 해요. Camel이 메시지를 받을 때는 보낸 클라이언트가 정한 타입에 고정되므로 이 옵션이 적용되지 않아요. 기본적으로 Camel은 메시지 본문 타입에서 JMS 메시지 타입을 정하는데, 이 옵션으로 직접 지정할 수 있죠. 가능한 값: Bytes, Map, Object, Stream, Text. JmsMessageType
replyTo (common) 명시적인 ReplyTo 목적지를 지정해요(consumer에서 들어오는 Message.getJMSReplyTo() 값을 덮어씀). String
testConnectionOnStartup (common) 시작할 때 연결을 테스트할지 지정해요. 이렇게 하면 Camel 시작 시 모든 JMS consumer가 브로커와 유효한 연결을 갖는 게 보장돼요. 연결을 얻지 못하면 시작 중 예외를 던져서, 실패한 연결로 Camel이 시작되는 걸 막아줍니다. JMS producer도 함께 테스트해요. false boolean
acknowledgementModeName (consumer) JMS 승인(acknowledgement) 이름이에요. SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE 중 하나입니다. AUTO_ACKNOWLEDGE String
artemisConsumerPriority (consumer) 컨슈머 우선순위를 쓰면 활성 상태인 우선순위 높은 컨슈머가 메시지를 받도록 보장할 수 있어요. 보통 큐에 연결된 활성 컨슈머들은 라운드 로빈 방식으로 메시지를 받습니다. 컨슈머 우선순위를 쓰면 같은 높은 우선순위의 활성 컨슈머가 여러 개일 때 라운드 로빈으로 전달되고, 높은 우선순위 컨슈머가 메시지를 받을 크레딧이 없거나 메시지 수락을 거절한 경우(예: 컨슈머의 셀렉터 조건에 맞지 않을 때)에만 낮은 우선순위 컨슈머에게 갑니다. int
asyncConsumer (consumer) JmsConsumer가 Exchange를 비동기로 처리할지 여부예요. 켜면 이전 메시지를 비동기로 처리하는 동안(비동기 라우팅 엔진이) JmsConsumer가 큐에서 다음 메시지를 미리 가져올 수 있어서, 메시지가 100% 엄격한 순서로 처리되지 않을 수 있어요. 끄면(기본) 이전 Exchange 처리가 끝나야 다음 메시지를 가져옵니다. transacted를 켰다면 트랜잭션은 동기로 실행해야 해서 asyncConsumer=true여도 비동기로 돌지 않아요. false boolean
autoStartup (consumer) consumer 컨테이너를 자동으로 시작할지 지정해요. true boolean
cacheLevel (consumer) 내부 JMS 리소스의 캐시 레벨을 ID로 지정해요. 자세한 건 cacheLevelName 옵션을 보세요. int
cacheLevelName (consumer) 내부 JMS 리소스의 캐시 레벨을 이름으로 지정해요. 기본 설정은 CACHE_AUTO예요. 자세한 내용은 Spring 문서와 트랜잭션 캐시 레벨(Transactions Cache Levels) 문서를 참고하세요. 가능한 값: CACHE_AUTO, CACHE_CONNECTION, CACHE_CONSUMER, CACHE_NONE, CACHE_SESSION. CACHE_AUTO String
concurrentConsumers (consumer) JMS에서 소비할 때의 기본 동시 consumer 수를 지정해요(JMS 위의 요청/응답 제외). 스레드를 동적으로 늘렸다 줄이는 건 maxMessagesPerTask 옵션으로 조절해요. JMS 위에서 요청/응답을 할 때는 replyToConcurrentConsumers 옵션으로 응답 메시지 리스너의 동시 consumer 수를 조절합니다. 1 int
maxConcurrentConsumers (consumer) JMS에서 소비할 때의 최대 동시 consumer 수를 지정해요(JMS 위의 요청/응답 제외). 스레드를 동적으로 늘렸다 줄이는 건 maxMessagesPerTask 옵션으로 조절해요. JMS 위에서 요청/응답을 할 때는 replyToMaxConcurrentConsumers 옵션으로 응답 메시지 리스너의 동시 consumer 수를 조절합니다. int
replyToDeliveryPersistent (consumer) 응답에 기본으로 영속(persistent) 전달을 쓸지 지정해요. true boolean
selector (consumer) 사용할 JMS 셀렉터를 지정해요. String
subscriptionDurable (consumer) 구독을 durable로 만들지 설정해요. 쓸 durable 구독 이름은 subscriptionName 프로퍼티로 지정할 수 있어요. 기본값은 false고, durable 구독을 등록하려면 true로 하되 보통 subscriptionName 값을 함께 지정하는 게 좋습니다(메시지 리스너 클래스 이름으로 충분하다면 없어도 돼요). 토픽(pub-sub 도메인)을 들을 때만 의미가 있어서 이 설정은 pubSubDomain 플래그도 함께 바꿔요. false boolean
subscriptionName (consumer) 만들 구독의 이름을 지정해요. 공유 또는 durable 구독을 쓰는 토픽(pub-sub 도메인)에 적용돼요. 구독 이름은 이 클라이언트의 JMS 클라이언트 ID 안에서 유일해야 하고, 기본값은 지정한 메시지 리스너의 클래스 이름입니다. 참고: 구독별로 동시 consumer는 1개만 허용되는데(JMS 2.0 공유 구독 제외), 이건 이 메시지 리스너 컨테이너의 기본값이에요. String
subscriptionShared (consumer) 구독을 공유(shared)로 만들지 설정해요. 쓸 공유 구독 이름은 subscriptionName 프로퍼티로 지정할 수 있어요. 기본값은 false고, 공유 구독을 등록하려면 true로 하되 보통 subscriptionName 값을 함께 지정하는 게 좋습니다(메시지 리스너 클래스 이름으로 충분하다면 없어도 돼요). 공유 구독은 durable일 수도 있어서 subscriptionDurable과 함께 쓰는 경우가 많아요. 토픽(pub-sub 도메인)을 들을 때만 의미가 있어서 이 설정은 pubSubDomain 플래그도 함께 바꿉니다. JMS 2.0 호환 브로커가 필요해요. false boolean
acceptMessagesWhileStopping (consumer (advanced)) consumer가 멈추는 동안에도 메시지를 받아들일지 지정해요. 런타임에 JMS 라우트를 시작하고 멈추는데 큐에 아직 메시지가 쌓여 있다면 이 옵션을 켜는 걸 고려해 보세요. false인 상태에서 JMS 라우트를 멈추면 메시지가 거부될 수 있고, 브로커는 재전송을 시도하다가 또 거부되고, 결국 브로커의 데드 레터 큐로 옮겨질 수도 있어요. 이걸 피하려면 이 옵션을 켜는 게 좋아요. false boolean
allowReplyManagerQuickStop (consumer (advanced)) 요청/응답 메시징의 reply manager가 쓰는 DefaultMessageListenerContainer가, JmsConfiguration#isAcceptMessagesWhileStopping이 켜져 있고 org.apache.camel.CamelContext가 멈추는 중일 때 runningAllowed 플래그로 퀵 스톱을 허용할지 여부예요. 이 퀵 스톱 기능은 일반 JMS consumer에는 기본으로 켜져 있고, reply manager에서 쓰려면 이 플래그를 켜야 합니다. false boolean
consumerType (consumer (advanced)) 쓸 consumer 타입이에요. 이 타입이 어떤 Spring JMS 리스너를 쓸지 결정해요. Default는 org.springframework.jms.listener.DefaultMessageListenerContainer를, Simple은 org.springframework.jms.listener.SimpleMessageListenerContainer를 씁니다. Custom을 지정하면 messageListenerContainerFactory 옵션으로 정의한 MessageListenerContainerFactory가 사용할 org.springframework.jms.listener.AbstractMessageListenerContainer를 결정해요. 값: Simple, Default, Custom. Default ConsumerType
defaultTaskExecutorType (consumer (advanced)) DefaultMessageListenerContainer에서 쓸 기본 TaskExecutor 타입을 지정해요. consumer 엔드포인트와 producer 엔드포인트의 ReplyTo consumer 둘 다에 적용됩니다. SimpleAsync는 Spring의 SimpleAsyncTaskExecutor를, ThreadPool은 최적 값의 Spring ThreadPoolTaskExecutor(캐시드 스레드 풀 비슷)를 써요. 설정하지 않으면 이전 동작이 기본인데, consumer 엔드포인트는 캐시드 스레드 풀, 응답 consumer는 SimpleAsync를 씁니다. 동시 consumer 수가 늘었다 줄었다 하는 탄력적 구성에서 스레드 낭비를 줄이려면 ThreadPool을 권장해요. 값: ThreadPool, SimpleAsync. DefaultTaskExecutorType
destinationOptions (consumer (advanced)) Destination Options는 JMS API를 확장하지 않고 JMS consumer에 확장 설정을 주는 방법이에요. 옵션은 consumer를 만들 목적지 이름에 URL 쿼리 문법으로 인코딩돼요. 자세한 내용은 https://activemq.apache.org/destination-options를 보세요. prefix가 destination인 multi-value 옵션입니다. Map
eagerLoadingOfProperties (consumer (advanced)) 메시지가 로드되자마자 JMS 프로퍼티와 페이로드를 미리 로드해요. JMS 프로퍼티가 필요 없을 때는 비효율적이지만, 때로는 JMS 프로바이더나 JMS 프로퍼티 사용의 문제를 일찍 잡아낼 수 있습니다. eagerPoisonBody 옵션도 참고하세요. false boolean
eagerPoisonBody (consumer (advanced)) eagerLoadingOfProperties가 켜져 있는데 JMS 메시지 페이로드(JMS 본문이나 프로퍼티)가 poison(읽거나 매핑할 수 없음)이면, 메시지를 처리할 수 있도록 이 텍스트를 본문으로 설정해요(poison 원인은 이미 Exchange의 예외로 저장돼 있습니다). eagerPoisonBody=false로 설정하면 끌 수 있어요. eagerLoadingOfProperties 옵션도 참고하세요. Poison JMS message due to ${exception.message} String
exceptionHandler (consumer (advanced)) consumer가 커스텀 ExceptionHandler를 쓰게 해요. bridgeErrorHandler 옵션이 켜져 있으면 이 옵션은 쓰이지 않습니다. 기본적으로 consumer는 예외를 직접 처리하는데, WARN이나 ERROR 레벨로 기록하고 무시해요. ExceptionHandler
exchangePattern (consumer (advanced)) consumer가 exchange를 만들 때의 교환 패턴을 설정해요. 값: InOnly, InOut. ExchangePattern
exposeListenerSession (consumer (advanced)) 메시지를 소비할 때 리스너 세션을 노출할지 지정해요. true boolean
replyToConsumerType (consumer (advanced)) 응답 consumer(요청/응답 시)의 consumer 타입이에요. 이 타입이 어떤 Spring JMS 리스너를 쓸지 결정해요. Default는 org.springframework.jms.listener.DefaultMessageListenerContainer를, Simple은 org.springframework.jms.listener.SimpleMessageListenerContainer를 씁니다. Custom을 지정하면 messageListenerContainerFactory 옵션으로 정의한 MessageListenerContainerFactory가 사용할 org.springframework.jms.listener.AbstractMessageListenerContainer를 결정해요. 값: Simple, Default, Custom. Default ConsumerType
replyToSameDestinationAllowed (consumer (advanced)) JMS consumer가 자신이 소비하는 것과 같은 목적지로 응답 메시지를 보내도록 허용할지 여부예요. 이렇게 하면 같은 메시지를 소비하고 다시 보내는 무한 루프를 막을 수 있습니다. false boolean
taskExecutor (consumer (advanced)) 메시지 소비에 쓸 커스텀 task executor를 지정할 수 있어요. TaskExecutor
deliveryDelay (producer) JMS 전송 호출에 쓸 지연(delivery delay)을 설정해요. 이 옵션은 JMS 2.0 호환 브로커가 필요합니다. -1 long
deliveryMode (producer) 사용할 전달 모드를 지정해요. 가능한 값은 jakarta.jms.DeliveryMode에 정의된 값들이에요. NON_PERSISTENT = 1, PERSISTENT = 2. Integer
deliveryPersistent (producer) 기본으로 영속(persistent) 전달을 쓸지 지정해요. true boolean
explicitQosEnabled (producer) 메시지를 보낼 때 deliveryMode, priority, timeToLive 같은 QoS 설정을 쓸지 지정해요. 이 옵션은 Spring JmsTemplate을 기반으로 하고, deliveryMode·priority·timeToLive 옵션은 현재 엔드포인트에 적용됩니다. 반면 preserveMessageQos 옵션은 메시지 단위로 동작하면서 QoS 프로퍼티를 Camel In 메시지 헤더에서만 읽어요. false Boolean
formatDateHeadersToIso8601 (producer) JMS 날짜 프로퍼티를 ISO 8601 표준 형식으로 표기할지 설정해요. false boolean
preserveMessageQos (producer) 메시지에 지정된 QoS 설정으로 메시지를 보내고 싶다면 true로 하세요(JMS 엔드포인트의 QoS 설정 대신). 고려되는 세 헤더는 JMSPriority, JMSDeliveryMode, JMSExpiration이고, 전부 또는 일부만 줄 수 있어요. 주지 않으면 Camel은 엔드포인트 값을 대신 씁니다. 즉 이 옵션을 쓰면 헤더가 엔드포인트 값을 이기는 거예요. 반면 explicitQosEnabled 옵션은 엔드포인트에 설정된 값만 쓰고 메시지 헤더 값은 쓰지 않습니다. false boolean
priority (producer) 1보다 큰 값은 전송 시 메시지 우선순위를 지정해요(1이 가장 낮고 9가 가장 높음). 이 옵션이 효과를 내려면 explicitQosEnabled 옵션도 켜야 합니다. 값: 1, 2, 3, 4, 5, 6, 7, 8, 9. 4 int
replyToConcurrentConsumers (producer) JMS 위에서 요청/응답을 할 때의 기본 동시 consumer 수를 지정해요. 스레드를 동적으로 늘렸다 줄이는 건 maxMessagesPerTask 옵션으로 조절합니다. 1 int
replyToMaxConcurrentConsumers (producer) JMS 위에서 요청/응답을 할 때의 최대 동시 consumer 수를 지정해요. 스레드를 동적으로 늘렸다 줄이는 건 maxMessagesPerTask 옵션으로 조절합니다. int
replyToOnTimeoutMaxConcurrentConsumers (producer) JMS 위에서 요청/응답을 할 때 타임아웃이 발생해도 라우팅을 계속하는 데 쓸 최대 동시 consumer 수를 지정해요. 1 int
replyToOverride (producer) JMS 메시지에 명시적인 ReplyTo 목적지를 넣어서 replyTo 설정을 덮어써요. 메시지를 원격 큐로 포워딩하면서 응답은 ReplyTo 목적지에서 받고 싶을 때 유용합니다. String
replyToType (producer) JMS 위에서 요청/응답을 할 때 replyTo 큐에 어떤 전략을 쓸지 명시적으로 지정해요. 기본적으로 Camel은 임시 큐를 쓰고, replyTo가 설정돼 있으면 기본으로 Shared를 씁니다. 이 옵션으로 공유 큐 대신 전용(exclusive) 큐를 쓸 수 있어요. 자세한 건 Camel JMS 문서를 보되, 특히 클러스터 환경에서의 영향에 대한 설명과, Shared 응답 큐가 Temporary·Exclusive보다 성능이 낮다는 점을 참고하세요. 값: Temporary, Shared, Exclusive. ReplyToType
requestTimeout (producer) InOut 교환 패턴에서 응답을 기다리는 타임아웃(밀리초)이에요. 기본값은 20초입니다. CamelJmsRequestTimeout 헤더로 엔드포인트에 설정된 타임아웃 값을 메시지별로 따로 덮어쓸 수 있어요. requestTimeoutCheckerInterval 옵션도 참고하세요. 20000 long
timeToLive (producer) 메시지를 보낼 때 메시지의 time-to-live(밀리초)를 지정해요. -1 long
allowAdditionalHeaders (producer (advanced)) JMS 스펙상 유효하지 않은 값을 가질 수 있는 추가 헤더를 허용하는 옵션이에요. 예를 들어 WMQ 같은 일부 메시징 시스템은 JMS_IBM_MQMD_ 접두사 헤더에 바이트 배열 등 잘못된 타입의 값을 넣곤 해요. 헤더 이름을 쉼표로 여러 개 지정할 수 있고, 접미사로 와일드카드 매칭도 됩니다. String
allowNullBody (producer (advanced)) 본문 없는 메시지 전송을 허용할지 여부예요. 이 옵션이 false인데 메시지 본문이 null이면 JMSException이 던져집니다. true boolean
alwaysCopyMessage (producer (advanced)) true면 Camel이 producer로 전송할 때 항상 JMS 메시지 복사본을 만들어요. replyToDestinationSelectorName이 설정된 경우 같은 상황에서 복사가 필요합니다(참고로 replyToDestinationSelectorName이 설정되면 Camel은 alwaysCopyMessage를 true로 바꿔요). false boolean
correlationProperty (producer (advanced)) InOut 교환 패턴에서 메시지 상관관계를 맺을 때 JMSCorrelationID JMS 프로퍼티 대신 이 JMS 프로퍼티를 써요. 설정하면 메시지가 오직 이 프로퍼티 값으로만 상관관계가 맺어지고, JMSCorrelationID 프로퍼티는 무시되며 Camel이 설정하지도 않습니다. String
disableTimeToLive (producer (advanced)) time to live를 강제로 끄는 옵션이에요. 예를 들어 JMS 위에서 요청/응답을 하면 Camel은 기본적으로 requestTimeout 값을 보내는 메시지의 time to live로 씁니다. 문제는 보내는 시스템과 받는 시스템의 시계가 맞아야 하는데, 이게 항상 쉽지 않아요. 그럴 때 disableTimeToLive=true로 보내는 메시지에 time to live를 설정하지 않으면, 받는 시스템에서 메시지가 만료되지 않아요. 자세한 내용은 아래 'About time to live' 섹션을 보세요. false boolean
forceSendOriginalMessage (producer (advanced)) mapJmsMessage=false를 쓸 때 라우트 도중 헤더를 건드리면(get 또는 set) Camel은 새 JMS 메시지를 만들어 새 JMS 목적지로 보내요. 이 옵션을 true로 하면 Camel이 받은 원본 JMS 메시지를 보내도록 강제합니다. false boolean
includeSentJMSMessageID (producer (advanced)) InOnly(fire and forget)로 JMS 목적지에 보낼 때만 적용돼요. 켜면 메시지를 JMS 목적지로 보낼 때 JMS 클라이언트가 실제로 쓴 JMSMessageID로 Camel Exchange를 풍부하게 해줍니다. false boolean
lazyStartProducer (producer (advanced)) producer를 lazy(첫 메시지 시점)로 시작할지 여부예요. lazy 시작을 쓰면 producer가 시작 중 실패해서 라우트 시작이 실패하는 상황에서도 CamelContext와 라우트가 시작될 수 있고, 시작 실패 처리를 Camel의 라우팅 에러 핸들러로 넘길 수 있어요. 다만 첫 메시지 처리 시점에 producer를 만들고 시작하는 데 시간이 좀 걸려서 전체 처리 시간이 길어질 수 있는 점은 유의하세요. false boolean
replyCorrelationProperty (producer (advanced)) InOut 교환 패턴에서 응답 메시지 상관관계를 맺을 때 JMSCorrelationID JMS 프로퍼티 대신 이 JMS 프로퍼티를 써요. 'correlationProperty'와의 차이는, 'correlationProperty'는 상관관계 id 값을 담는 요청 프로퍼티를 지정할 뿐 응답 셀렉터(JMSCorrelationID=)에는 영향을 주지 않지만, 'replyCorrelationProperty'는 상관관계 id 값을 담는 응답 프로퍼티를 지정하며 응답 셀렉터(=)에 영향을 준다는 점이에요. String
replyToCacheLevelName (producer (advanced)) JMS 위에서 요청/응답을 할 때 응답 consumer의 캐시 레벨을 이름으로 지정해요. 이 옵션은 고정 응답 큐(임시 큐 아님)를 쓸 때만 적용됩니다. Camel은 기본으로 exclusive 큐 또는 replyToSelectorName을 쓰는 shared 큐에는 CACHE_CONSUMER를, replyToSelectorName 없는 shared 큐에는 CACHE_SESSION을 써요. IBM WebSphere 같은 일부 JMS 브로커는 동작하려면 replyToCacheLevelName=CACHE_NONE을 설정해야 할 수 있습니다. 참고: 임시 큐를 쓸 때는 CACHE_NONE이 허용되지 않으니 CACHE_CONSUMER나 CACHE_SESSION 같은 더 높은 값을 써야 해요. 가능한 값: CACHE_AUTO, CACHE_CONNECTION, CACHE_CONSUMER, CACHE_NONE, CACHE_SESSION. String
replyToDestinationSelectorName (producer (advanced)) 고정 이름으로 JMS 셀렉터를 설정해요. 공유 큐를 쓸 때(임시 응답 큐를 안 쓸 때) 다른 사람의 응답 중 내 응답만 걸러 보려면 이걸 쓰면 됩니다. String
streamMessageTypeEnabled (producer (advanced)) StreamMessage 타입을 켤지 설정해요. 파일, InputStream 같은 스트리밍 페이로드는 BytesMessage 또는 StreamMessage로 보내는데, 이 옵션이 어느 쪽을 쓸지 정합니다. 기본인 BytesMessage는 페이로드 전체를 메모리로 읽어야 해요. 이 옵션을 켜면 페이로드를 청크 단위로 메모리에 읽고 각 청크를 더 이상 데이터가 없을 때까지 StreamMessage에 씁니다. false boolean
allowSerializedHeaders (advanced) 직렬화된 헤더를 포함할지 제어해요. transferExchange가 true일 때만 적용되고, 객체가 직렬화 가능해야 합니다. Camel은 직렬화할 수 없는 객체는 빼고 WARN 레벨로 기록해요. false boolean
artemisStreamingEnabled (advanced) Apache Artemis 스트리밍 모드에 맞춰 최적화할지 여부예요. Artemis를 JMS StreamMessage 타입과 함께 쓸 때 메모리 오버헤드를 줄일 수 있습니다. Apache Artemis를 쓸 때만 켜야 해요. false boolean
asyncStartListener (advanced) 라우트 시작 시 JmsConsumer 메시지 리스너를 비동기로 시작할지 여부예요. 예를 들어 JmsConsumer가 원격 JMS 브로커에 연결하지 못하면 재시도나 페일오버하느라 블록될 수 있고, 그러면 Camel도 라우트 시작하느라 블록됩니다. 이 옵션을 true로 하면 JmsConsumer가 전용 스레드로 비동기 모드에서 브로커에 연결하는 동안 라우트는 시작될 수 있어요. 이 옵션을 쓸 때는 연결에 실패하면 WARN 레벨로 예외가 기록되고 consumer는 메시지를 받지 못한다는 점을 유의하세요. 이후 라우트를 재시작해서 재시도할 수 있습니다. false boolean
asyncStopListener (advanced) 라우트를 멈출 때 JmsConsumer 메시지 리스너를 비동기로 멈출지 여부예요. false boolean
browseLimit (advanced) 브라우징용으로 메모리에 유지할 최대 메시지 수예요. 무제한은 0. 100 int
destinationResolver (advanced) org.springframework.jms.support.destination.DestinationResolver를 교체 가능하게 제공해요. 자신만의 리졸버를 쓸 수 있습니다(예: JNDI 레지스트리에서 실제 목적지를 조회). DestinationResolver
errorHandler (advanced) Message 처리 중 잡히지 않은 예외가 던져졌을 때 호출할 org.springframework.util.ErrorHandler를 지정해요. errorHandler를 설정하지 않으면 기본으로 WARN 레벨로 기록됩니다. errorHandlerLoggingLevel과 errorHandlerLogStackTrace 옵션으로 로그 레벨과 스택 트레이스 기록 여부를 설정할 수 있어서, 커스텀 errorHandler를 직접 만드는 것보다 훨씬 설정이 쉬워요. ErrorHandler
exceptionListener (advanced) 하부 JMS 예외 통지를 받을 JMS Exception Listener를 지정해요. ExceptionListener
headerFilterStrategy (advanced) Camel 메시지와 주고받는 헤더를 필터링할 커스텀 HeaderFilterStrategy를 쓰려면 이걸 지정해요. HeaderFilterStrategy
idleConsumerLimit (advanced) 특정 시점에 유휴(idle) 상태로 있을 수 있는 consumer 수의 상한을 지정해요. 1 int
idleReceivesPerTaskLimit (advanced) 지정한 횟수의 유휴 수신(idle receive)에 도달하면 consumer를 유휴로 표시해요. 유휴 수신은 설정된 setReceiveTimeout이 지난 후 receiver가 null 메시지를 반환한 순간부터 세요. 이 값으로 유휴 태스크 수가 setIdleTaskExecutionLimit를 넘는지 확인해서 태스크를 재배치할지 판단하고, 그렇지 않으면 리소스를 아낄 수 있습니다. 이 설정은 setMaxMessagesPerTask와 달리, 이 한계에 도달하면 받은 메시지가 null이든 아니든 태스크를 반납하고 재배치해요. 태스크마다 충분히 큰 배치를 원하지만 처리할 메시지가 없어지는 즉시 빨리 반납되길 원한다면 이 설정 하나만으로는 유연하지 않을 수 있어요. setIdleTaskExecutionLimit와의 차이는, 이 설정은 유휴로 표시되는 반복이 몇 번이면 태스크를 반납할지를 결정한다는 점입니다. 예를 들어 setMaxMessagesPerTask='500', #setIdleReceivesPerTaskLimit='60', setReceiveTimeout='1000', setIdleTaskExecutionLimit='1'로 하면, 태스크마다 500개 메시지를 처리하다가 이후 60번의 유휴 수신이 이어지면 태스크가 유휴로 표시되고 반납돼요. 이는 마지막 메시지 처리 후 새 메시지가 안 오면 60초 후에 태스크가 반납된다는 뜻이기도 합니다. int
idleTaskExecutionLimit (advanced) 수신 태스크의 유휴 실행 횟수 상한을 지정해요. 실행 중 아무 메시지도 받지 못한 상태가 이 한계에 도달하면 태스크를 종료하고 수신을 다른 실행 중인 태스크에 맡깁니다(동적 스케줄링의 경우; maxConcurrentConsumers 설정 참고). Spring에서 제공하는 추가 문서도 있어요. 1 int
includeAllJMSXProperties (advanced) JMS에서 Camel Message로 매핑할 때 JMSX 접두사 프로퍼티를 모두 포함할지 여부예요. true로 하면 JMSXAppID, JMSXUserID 같은 프로퍼티가 포함됩니다. 참고: 커스텀 headerFilterStrategy를 쓰면 이 옵션은 적용되지 않아요. false boolean
jmsKeyFormatStrategy (advanced) JMS 스펙에 맞도록 JMS 키를 인코딩·디코딩하는 교체 가능한 전략이에요. Camel은 default와 passthrough 두 구현을 기본 제공합니다. default 전략은 점과 하이픈(.과 -)을 안전하게 변환하고, passthrough 전략은 키를 그대로 둬요. JMS 헤더 키에 잘못된 문자가 있어도 신경 쓰지 않는 브로커에 쓸 수 있습니다. org.apache.camel.component.jms.JmsKeyFormatStrategy를 직접 구현해서 # 표기법으로 참조할 수도 있어요. JmsKeyFormatStrategy
mapJmsMessage (advanced) 받은 JMS 메시지를 알맞은 페이로드 타입으로 자동 매핑할지 지정해요. 예: jakarta.jms.TextMessage를 String으로. true boolean
maxMessagesPerTask (advanced) 태스크당 메시지 수예요. -1은 무제한입니다. 동시 consumer에 범위(min max)를 쓰면 이 옵션을 예: 100 같은 값으로 설정해서, 할 일이 줄었을 때 consumer가 얼마나 빨리 줄어들지 조절할 수 있어요. -1 int
messageConverter (advanced) 커스텀 Spring org.springframework.jms.support.converter.MessageConverter를 써서 jakarta.jms.Message와의 매핑을 직접 제어할 수 있어요. MessageConverter
messageCreatedStrategy (advanced) Camel이 JMS 메시지를 보낼 때 jakarta.jms.Message 객체를 새로 만들 때마다 호출되는 MessageCreatedStrategy를 지정해요. MessageCreatedStrategy
messageIdEnabled (advanced) 전송 시 메시지 ID를 붙일지 지정해요. 이건 JMS 브로커에 주는 힌트일 뿐입니다. 프로바이더가 힌트를 받아들이면 메시지 ID는 null로 설정되어야 하고, 힌트를 무시하면 보통의 유일한 값으로 설정되어야 해요. true boolean
messageListenerContainerFactory (advanced) 어떤 org.springframework.jms.listener.AbstractMessageListenerContainer로 메시지를 소비할지 결정하는 MessageListenerContainerFactory의 레지스트리 ID예요. 이걸 설정하면 consumerType이 자동으로 Custom으로 바뀝니다. MessageListenerContainerFactory
messageTimestampEnabled (advanced) 전송 시 타임스탬프를 기본으로 켤지 지정해요. 이건 JMS 브로커에 주는 힌트일 뿐입니다. 프로바이더가 힌트를 받아들이면 타임스탬프는 0으로 설정되어야 하고, 힌트를 무시하면 보통의 값으로 설정되어야 해요. true boolean
objectMessageEnabled (advanced) JMS ObjectMessage 전송·수신을 켤지 여부예요. Java 객체 직렬화는 알려진 보안 취약점 원천이라 기본은 꺼져 있습니다. 메시지 출처를 신뢰하고 JMS로 Java 직렬화 객체를 주고받아야 할 때만 켜세요. 꺼져 있으면 Camel은 JMS ObjectMessage 인스턴스를 만들거나 읽는 걸 거부해요. transferExchange, transferException처럼 내부적으로 ObjectMessage에 의존하는 옵션은 이 옵션이 켜져 있어야 동작합니다. false boolean
pubSubNoLocal (advanced) 자기 연결이 발행한 메시지의 전달을 막을지 지정해요. false boolean
receiveTimeout (advanced) 메시지 수신 타임아웃(밀리초)이에요. 1000 long
recoveryInterval (advanced) 복구 시도 사이의 간격, 즉 연결을 새로 고치는 간격(밀리초)이에요. 기본값은 5000ms, 즉 5초입니다. 5000 long
requestTimeoutCheckerInterval (advanced) JMS 위에서 요청/응답을 할 때 Camel이 타임아웃된 Exchange를 얼마나 자주 확인할지 설정해요. 기본은 초당 한 번이고, 타임아웃에 더 빨리 반응해야 하면 이 간격을 줄여서 더 자주 확인하면 돼요. 타임아웃 값은 requestTimeout 옵션으로 정해집니다. 1000 long
synchronous (advanced) 동기 처리를 엄격하게 쓸지 설정해요. false boolean
temporaryQueueResolver (advanced) 임시 큐 생성에 자신만의 리졸버를 쓸 수 있게 해주는 교체 가능한 TemporaryQueueResolver예요(일부 메시징 시스템은 임시 큐 생성에 특별한 요구사항이 있어요). TemporaryQueueResolver
transferException (advanced) 켜고 Request Reply(InOut) 메시징을 쓰는 중 consumer 쪽에서 Exchange가 실패하면, 발생한 예외가 jakarta.jms.ObjectMessage로 응답에 실려 돌아와요. 클라이언트가 Camel이면 돌아온 예외를 다시 던집니다. 이렇게 하면 Camel JMS를 라우팅의 브리지로 쓸 수 있어요(예: 영속 큐로 견고한 라우팅). transferExchange도 켜져 있으면 이 옵션이 우선합니다. 잡은 예외는 직렬화 가능해야 하고, consumer 쪽 원본 예외는 producer로 돌아올 때 org.apache.camel.RuntimeCamelException 같은 바깥 예외로 감싸일 수 있어요. 데이터가 Java 객체 직렬화를 쓰고 받는 쪽이 클래스 수준에서 역직렬화할 수 있어야 해서 producer와 consumer가 강하게 결합되므로, 신중하게 쓰세요! false boolean
transferExchange (advanced) 본문과 헤더만이 아니라 Exchange 전체를 와이어로 전송할 수 있어요. 전송되는 필드는: In body, Out body, Fault body, In headers, Out headers, Fault headers, exchange properties, exchange exception입니다. 객체가 직렬화 가능해야 하고, Camel은 직렬화할 수 없는 객체는 빼고 WARN 레벨로 기록해요. 이 옵션은 producer와 consumer 양쪽에서 켜야 합니다. 그래야 Camel이 페이로드가 일반 페이로드가 아니라 Exchange임을 알 수 있어요. 데이터가 Java 객체 직렬화를 쓰고 받는 쪽이 클래스 수준에서 역직렬화할 수 있어야 해서 producer와 consumer가 호환 Camel 버전을 써야 하므로, 신중하게 쓰세요! false boolean
useMessageIDAsCorrelationID (advanced) InOut 메시지에서 JMSMessageID를 항상 JMSCorrelationID로 쓸지 지정해요. false boolean
waitForProvisionCorrelationToBeUpdatedCounter (advanced) JMS 위에서 요청/응답을 하고 useMessageIDAsCorrelationID 옵션이 켜져 있을 때, 임시(provisional) 상관관계 id가 실제 상관관계 id로 갱신되기를 기다리는 횟수예요. 50 int
waitForProvisionCorrelationToBeUpdatedThreadSleepingTime (advanced) 임시 상관관계 id가 갱신되기를 기다리는 동안 매번 잠들 간격(밀리초)이에요. 100 long
waitForTemporaryReplyToToBeUpdatedCounter (advanced) JMS 위에서 요청/응답을 할 때 임시 replyTo 큐가 만들어져 준비되기를 기다리는 횟수예요. 200 int
waitForTemporaryReplyToToBeUpdatedThreadSleepingTime (advanced) 임시 replyTo 큐가 준비되기를 기다리는 동안 매번 잠들 간격(밀리초)이에요. 100 long
errorHandlerLoggingLevel (logging) 잡히지 않은 예외를 기록하는 기본 errorHandler의 로그 레벨을 설정할 수 있어요. 값: TRACE, DEBUG, INFO, WARN, ERROR, OFF. WARN LoggingLevel
errorHandlerLogStackTrace (logging) 기본 errorHandler가 스택 트레이스를 기록할지 제어할 수 있어요. true boolean
deserializationFilter (security) jakarta.jms.ObjectMessage.getObject()가 반환하는 본문 클래스에 심층 방어(defense-in-depth) 검사로 적용할 ObjectInputFilter 패턴(jdk.serialFilter 문법)을 설정해요. 이 패턴은 JMS 프로바이더가 페이로드를 역직렬화한 뒤에 평가되므로, 이 옵션만으로는 프로바이더의 ObjectInputStream 안에서 일어나는 가젯 체인 실행을 막을 수 없어요. 그런 공격을 막으려면 JMS 프로바이더 자체의 역직렬화 필터와(또는) JVM 전역 -Djdk.serialFilter도 함께 설정하세요. 이 옵션을 설정하지 않고 JVM 전역 필터도 없으면, java.net.은 거부하고 java., javax., org.apache.camel.은 허용하는 보수적인 기본 필터가 적용됩니다. String
password (security) ConnectionFactory에 쓸 비밀번호예요. username/password를 ConnectionFactory에 직접 설정할 수도 있습니다. String
username (security) ConnectionFactory에 쓸 사용자 이름이에요. username/password를 ConnectionFactory에 직접 설정할 수도 있습니다. String
transacted (transaction) 트랜잭션 모드를 쓸지 지정해요. false boolean
transactedInOut (transaction) InOut 동작(요청/응답)이 기본으로 트랜잭션 모드를 쓸지 지정해요. 이 플래그를 true로 하면 Spring JmsTemplate의 sessionTransacted가 true로 설정되고, InOut 동작에 쓰는 JmsTemplate의 acknowledgeMode도 transacted가 됩니다. Spring JMS 참고: JTA 트랜잭션 안에서는 createQueue, createTopic 메서드에 전달되는 파라미터가 반영되지 않아요. Java EE 트랜잭션 컨텍스트에 따라 컨테이너가 이 값들을 스스로 정합니다. 비슷하게 로컬 관리 트랜잭션 안에서도 이 파라미터는 반영되지 않는데, 이 경우 Spring JMS는 기존 JMS 세션으로 동작하기 때문이에요. 이 플래그를 true로 하면 관리 트랜잭션 밖에서는 짧은 로컬 JMS 트랜잭션을, 관리 트랜잭션(XA 트랜잭션 제외)이 있으면 동기화된 로컬 JMS 트랜잭션을 씁니다. 이러면 JMS 트랜잭션이 메인 트랜잭션(네이티브 JDBC 트랜잭션일 수 있음)과 함께 관리되고, JMS 트랜잭션은 메인 트랜잭션 직후에 커밋되는 효과가 있어요. false boolean
lazyCreateTransactionManager (transaction (advanced)) true면 transacted=true인데 주입된 transactionManager가 없을 때 Camel이 JmsTransactionManager를 만들어요. true boolean
transactionManager (transaction (advanced)) 사용할 Spring 트랜잭션 매니저예요. PlatformTransactionManager
transactionName (transaction (advanced)) 사용할 트랜잭션 이름이에요. String
transactionTimeout (transaction (advanced)) 트랜잭션 모드를 쓸 때의 트랜잭션 타임아웃 값(초)이에요. -1 int

메시지 헤더

ActiveMQ 5.x 컴포넌트가 지원하는 메시지 헤더는 아래와 같아요:

Name Description Default Type
CamelJmsDestination (producer) Constant: JMS_DESTINATION 목적지예요. Destination
CamelJmsDestinationName (producer) Constant: JMS_DESTINATION_NAME 목적지로 쓸 큐 또는 토픽의 이름이에요. String
CamelJMSDestinationProduced (common) Constant: JMS_DESTINATION_NAME_PRODUCED 메시지가 전송된 큐 또는 토픽의 이름이에요. String
JMSXGroupID (common) Constant: JMS_X_GROUP_ID JMS 그룹 ID예요. String
JMSMessageID (common) Constant: JMS_HEADER_MESSAGE_ID JMS 고유 메시지 ID예요. String
JMSCorrelationID (common) Constant: JMS_HEADER_CORRELATION_ID JMS 상관관계 ID예요. String
JMSCorrelationIDAsBytes (common) Constant: JMS_HEADER_CORRELATION_ID_AS_BYTES 바이트 형태의 JMS 상관관계 ID예요. byte[]
JMSDeliveryMode (common) Constant: JMS_HEADER_DELIVERY_MODE JMS 전달 모드예요. int
JMSDestination (common) Constant: JMS_HEADER_DESTINATION JMS 목적지예요. Destination
JMSExpiration (common) Constant: JMS_HEADER_EXPIRATION JMS 만료(expiration) 값이에요. long
JMSPriority (common) Constant: JMS_HEADER_PRIORITY JMS 우선순위예요(0이 가장 낮고 9가 가장 높아요). int
JMSRedelivered (common) Constant: JMS_HEADER_REDELIVERED JMS 메시지가 재전달됐는지 여부예요. boolean
JMSTimestamp (common) Constant: JMS_HEADER_TIMESTAMP JMS 타임스탬프예요. long
JMSReplyTo (common) Constant: JMS_HEADER_REPLY_TO JMS reply-to 목적지예요. Destination
JMSType (common) Constant: JMS_HEADER_TYPE JMS 타입이에요. String
JMSXUserID (common) Constant: JMS_HEADER_XUSER_ID XUser ID예요. String
CamelJmsMessageType (common) Constant: JMS_MESSAGE_TYPE 메시지 타입이에요. 값: Bytes, Map, Object, Stream, Text, Blob. JmsMessageType
CamelJmsRequestTimeout (producer) Constant: JMS_REQUEST_TIMEOUT InOut 교환 패턴에서 응답을 기다리는 타임아웃(밀리초)이에요. 20000 long

예시

아래 예시가 동작하려면 ActiveMQ 컴포넌트에 connectionFactory를 제공해야 해요.

Producer 예시

from("timer:mytimer?period=5000")
    .setBody(constant("HELLO from Camel!"))
    .to("activemq:queue:HELLO.WORLD");
<route>
  <from uri="timer:mytimer?period=5000"/>
  <setBody>
    <constant>HELLO from Camel!</constant>
  </setBody>
  <to uri="activemq:queue:HELLO.WORLD"/>
</route>
- route:
    from:
      uri: timer:mytimer
      parameters:
        period: 5000
      steps:
        - setBody:
            constant: "HELLO from Camel!"
        - to:
            uri: activemq:queue:HELLO.WORLD

Consumer 예시

from("activemq:queue:HELLO.WORLD")
    .log("Received a message - ${body}");
<route>
  <from uri="activemq:queue:HELLO.WORLD"/>
  <log message="Received a message - ${body}"/>
</route>
- route:
    from:
      uri: activemq:queue:HELLO.WORLD
      steps:
        - log:
            message: "Received a message - ${body}"

더 알아보기 (Learn more)

문서와 예시가 더 필요하면 JMS 컴포넌트 문서를 참고하세요. ActiveMQ 5.x 컴포넌트는 JMS 컴포넌트의 확장이라 설정 개념이 대부분 그대로 통해요. ActiveMQ 6.x 브로커를 쓴다면 camel-activemq6 컴포넌트 문서를 보세요.