28장. JMS
생산자 및 소비자 모두 지원
이 구성 요소를 사용하면 JMS Queue 또는 Topic으로 메시지를 보내거나(또는 사용)할 수 있습니다. 보낸 데 Spring의 JmsTemplate
및 사용할 MessageListenerContainer
를 포함하여 선언적 트랜잭션에 Spring의 JMS 지원을 사용합니다.
Maven 사용자는 이 구성 요소에 대해 pom.xml
에 다음 종속성을 추가해야 합니다.
ActiveMQ
Apache ActiveMQ 를 사용하는 경우 ActiveMQ에 최적화되었으므로 ActiveMQ 구성 요소를 선호해야 합니다. 이 페이지의 모든 옵션과 샘플은 ActiveMQ 구성 요소에도 유효합니다.
전송 및 캐싱은 JMS 와 트랜잭션을 사용하는 경우 성능에 영향을 줄 수 있으므로 아래의 트랜잭션 및 캐시 수준을 확인합니다.
Camel은 성능 및 클러스터형 환경에 대한다양한 옵션을 제공하므로 Camel에 대한 중요한 참고 사항을 보려면 이 페이지의 아래 JMS에 대한 Request-reply 섹션을 자세히 읽어 보십시오.
28.1. URI 형식 링크 복사링크가 클립보드에 복사되었습니다!
jms:[queue:|topic:]destinationName[?options]
jms:[queue:|topic:]destinationName[?options]
destinationName
은 JMS 대기열 또는 주제 이름입니다. 기본적으로 destinationName
은 대기열 이름으로 해석됩니다. 예를 들어, 큐에 연결하려면 FOO.BAR
을 사용합니다.
jms:FOO.BAR
jms:FOO.BAR
원하는 경우 선택적 queue:
접두사를 포함할 수 있습니다.
jms:queue:FOO.BAR
jms:queue:FOO.BAR
항목에 연결하려면 topic:
접두사를 포함해야 합니다. 예를 들어, topic, 10.0.0.1s .Prices
에 연결하려면 다음을 사용합니다.
jms:topic:Stocks.Prices
jms:topic:Stocks.Prices
다음 형식을 사용하여 URI에 쿼리 옵션을 추가합니다.
?option=value&option=value&…
28.1.1. ActiveMQ 사용 링크 복사링크가 클립보드에 복사되었습니다!
JMS 구성 요소는 메시지를 보내는 데 Spring 2의 JmsTemplate
을 재사용합니다. 이는 비J2EE 컨테이너에서 사용하기에 적합하지 않으며 일반적으로 성능 저하 를 방지하기 위해 JMS 공급자의 일부 캐싱이 필요합니다.
Apache ActiveMQ 를 메시지 브로커로 사용하려는 경우 다음 중 하나를 수행하는 것이 좋습니다.
- ActiveMQ 구성 요소를 사용하는데 이미 최적화된 ActiveMQ 구성 요소 사용
-
ActiveMQ에서
PoolingConnectionFactory
를 사용합니다.
28.1.2. 트랜잭션 및 캐시 수준 링크 복사링크가 클립보드에 복사되었습니다!
메시지를 사용하고 트랜잭션(transacted=true
)을 사용하는 경우 캐시 수준에 대한 기본 설정이 성능에 영향을 미칠 수 있습니다.
XA 트랜잭션을 사용하는 경우 XA 트랜잭션이 제대로 작동하지 않을 수 있으므로 캐시할 수 없습니다.
XA를 사용하지 않는 경우 cacheLevelName=CACHE_CONSUMER
설정과 같이 성능이 빨라지므로 캐싱을 고려해야 합니다.
cacheLevelName
의 기본 설정은 CACHE_AUTO
입니다. 이 기본 자동은 모드를 감지하고 그에 따라 캐시 수준을 설정합니다.
-
CACHE_CONSUMER
iftransacted=false
-
CACHE_NONE
iftransacted=true
따라서 기본 설정은 보수적이라고 할 수 있습니다. XA가 아닌 트랜잭션을 사용하는 경우 cacheLevelName=CACHE_CONSUMER
를 사용하는 것이 좋습니다.
28.1.3. 조정된 서브스크립션 링크 복사링크가 클립보드에 복사되었습니다!
지속성 주제 서브스크립션을 사용하려면 clientId
및 detect SubscriptionName
을 둘 다 지정해야 합니다. clientId
값은 고유해야 하며 전체 네트워크의 단일 JMS 연결 인스턴스에서만 사용할 수 있습니다. 이러한 제한을 피하기 위해 가상 주제를 대신 사용하는 것을 선호할 수 있습니다. 여기에서 중장성 메시지의 배경을 더 많이 볼 수 있습니다.
28.1.4. 메시지 헤더 매핑 링크 복사링크가 클립보드에 복사되었습니다!
메시지 헤더를 사용하는 경우 JMS 사양은 헤더 이름이 유효한 Java 식별자여야 함을 나타냅니다. 따라서 헤더의 이름을 유효한 Java 식별자로 지정합니다. 이 작업을 수행하는 한 가지 이점은 JMS 선택기 내에서 헤더를 사용할 수 있다는 것입니다(SQL92 구문에 헤더에 Java 식별자 구문이 필요한 경우).
헤더 이름을 매핑하기 위한 간단한 전략이 기본적으로 사용됩니다. 전략은 아래에 표시된 대로 헤더 이름의 점과 하이픈을 모두 교체하고 헤더 이름이 전선을 통해 전송된 JMS 메시지에서 복원될 때 교체를 되돌리는 것입니다. 이것은 무엇을 의미합니까? 더 이상 빈 구성 요소에서 호출할 메서드 이름 손실, 파일 구성 요소의 파일 이름 헤더가 손실되지 않습니다.
Camel에서 헤더 이름을 수락하는 현재 헤더 이름 전략은 다음과 같습니다.
- 점을 'DOT' 로 교체하고 Camel이 메시지를 사용할 때 교체가 반전됩니다.
- 하이픈이 'HYPHEN' 로 대체되고 Camel에서 메시지를 사용할 때 교체가 반전됩니다.
JMSConfiguration
개체의 속성에 매핑되는 JMS 끝점에서 다양한 속성을 구성할 수 있습니다.
Spring JMS
이러한 속성 중 대다수는 Camel이 메시지를 전송 및 수신하는 데 사용하는 Spring JMS의 속성에 매핑됩니다. 따라서 관련 Spring 문서를 참조하여 이러한 속성에 대한 자세한 정보를 얻을 수 있습니다.