Loading...
Spring Framework Reference Documentation 7.0.2의 JMS Namespace Support의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Spring은 JMS 설정을 단순화하기 위한 XML 네임스페이스를 제공합니다. JMS 네임스페이스 element를 사용하려면, 다음 예제와 같이 JMS 스키마를 reference해야 합니다:
1<?xml version="1.0" encoding="UTF-8"?> 2<beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:jms="http://www.springframework.org/schema/jms" (1) 5 xsi:schemaLocation=" 6 http://www.springframework.org/schema/beans 7 https://www.springframework.org/schema/beans/spring-beans.xsd 8 http://www.springframework.org/schema/jms 9 https://www.springframework.org/schema/jms/spring-jms.xsd"> 10 11 <!-- bean definitions here --> 12 13</beans>
| 1 | JMS 스키마를 reference합니다. |
이 네임스페이스는 세 개의 top-level element로 구성됩니다: <annotation-driven/>, <listener-container/> 그리고 <jca-listener-container/>. <annotation-driven/>는 annotation-driven listener endpoints 의 사용을 가능하게 합니다.
<listener-container/>와 <jca-listener-container/> 는 shared listener 컨테이너 설정을 정의하며 <listener/> child element를 포함할 수 있습니다. 다음 예제는 두 개의 listener에 대한 기본 설정을 보여줍니다:
1<jms:listener-container> 2 3 <jms:listener destination="queue.orders" ref="orderService" method="placeOrder"/> 4 5 <jms:listener destination="queue.confirmations" ref="confirmationLogger" method="log"/> 6 7</jms:listener-container>
앞의 예제는 Using MessageListenerAdapter에 나와 있는 것처럼 두 개의 개별 listener 컨테이너 bean 정의와 두 개의 개별 MessageListenerAdapter bean 정의를 생성하는 것과 동일합니다. 앞의 예제에 표시된 attribute 외에도, listener element는 여러 개의 선택적 attribute를 포함할 수 있습니다.
다음 표는 사용 가능한 모든 attribute를 설명합니다:
| Attribute | Description |
|---|---|
id | hosting listener 컨테이너에 대한 bean 이름입니다. 지정하지 않으면 bean 이름이<br>자동으로 생성됩니다. |
destination (required) | 이 listener에 대한 destination 이름으로, DestinationResolver<br>strategy를 통해 resolve됩니다. |
ref (required) | handler 객체의 bean 이름입니다. |
method | 호출할 handler 메서드의 이름입니다. ref attribute가 MessageListener<br>또는 Spring SessionAwareMessageListener를 가리키는 경우 이 attribute를 생략할 수 있습니다. |
response-destination | response 메시지를 보내기 위한 기본 response destination의 이름입니다. 이는<br>JMSReplyTo 필드를 포함하지 않는 request 메시지의 경우에 적용됩니다.<br>이 destination의 타입은 listener-container의<br>response-destination-type attribute에 의해 결정됩니다. 이는 return 값이 있는 listener 메서드에만 적용된다는 점에 유의하십시오.<br>해당 메서드의 각 result 객체는 response 메시지로 변환됩니다. |
subscription | 존재하는 경우 durable subscription의 이름입니다. |
selector | 이 listener에 대한 선택적 message selector입니다. |
concurrency | 이 listener에 대해 시작할 concurrent 세션 또는 consumer의 수입니다. 이 값은<br>최대 수를 나타내는 단순한 숫자(예: 5)이거나 하한과 상한을 모두 나타내는 범위(예: 3-5)일 수 있습니다.<br>지정된 최소값은 단지 힌트일 뿐이며 runtime에 무시될 수 있습니다. 기본값은 컨테이너에서 제공하는 값입니다. |
Table 1. Attributes of the JMS <listener> element
<listener-container/> element도 여러 개의 선택적 attribute를 허용합니다. 이를 통해 taskExecutor와 destinationResolver 같은 다양한 strategy뿐만 아니라 기본 JMS 설정과 resource reference를 customization할 수 있습니다.
이러한 attribute를 사용하면 네임스페이스의 편의성을 유지하면서도 매우 custom된 listener 컨테이너를 정의할 수 있습니다.
factory-id attribute를 통해 노출할 bean의 id를 지정함으로써 이러한 설정을 JmsListenerContainerFactory로 자동으로 노출할 수 있습니다. 다음 예제는 이를 보여줍니다:
1<jms:listener-container connection-factory="myConnectionFactory" 2 task-executor="myTaskExecutor" 3 destination-resolver="myDestinationResolver" 4 transaction-manager="myTransactionManager" 5 concurrency="10"> 6 7 <jms:listener destination="queue.orders" ref="orderService" method="placeOrder"/> 8 9 <jms:listener destination="queue.confirmations" ref="confirmationLogger" method="log"/> 10 11</jms:listener-container>
다음 표는 사용 가능한 모든 attribute를 설명합니다. 개별 프로퍼티에 대한 자세한 내용은 AbstractMessageListenerContainer 의 class-level javadoc과 그 concrete subclass를 참조하십시오.
javadoc에는 transaction 선택 및 message redelivery 시나리오에 대한 논의도 포함되어 있습니다.
| Attribute | Description |
|---|---|
container-type | 이 listener 컨테이너의 타입입니다. 사용 가능한 옵션은 default, simple,<br>default102, 또는 simple102입니다 (기본 옵션은 default입니다). |
container-class | fully qualified 클래스 이름으로 지정된 custom listener 컨테이너 implementation 클래스입니다.<br>기본값은 container-type attribute에 따라 Spring의 표준 DefaultMessageListenerContainer 또는<br>SimpleMessageListenerContainer입니다. |
factory-id | 이 element에 의해 정의된 설정을 지정된 id를 가진 JmsListenerContainerFactory로 노출하여<br>다른 endpoint에서 재사용할 수 있도록 합니다. |
connection-factory | JMS ConnectionFactory bean에 대한 reference입니다 (기본 bean 이름은<br>connectionFactory입니다). |
task-executor | JMS listener invoker에 대한 Spring TaskExecutor reference입니다. |
destination-resolver | JMS Destination 인스턴스를 resolve하기 위한 DestinationResolver strategy에 대한 reference입니다. |
message-converter | JMS 메시지를 listener 메서드 argument로 변환하기 위한 MessageConverter strategy에 대한 reference입니다.<br>기본값은 SimpleMessageConverter입니다. |
error-handler | MessageListener 실행 중에 발생할 수 있는 처리되지 않은 예외를 처리하기 위한<br>ErrorHandler strategy에 대한 reference입니다. |
destination-type | 이 listener에 대한 JMS destination 타입입니다: queue, topic, durableTopic, sharedTopic,<br>또는 sharedDurableTopic. 이는 컨테이너의 pubSubDomain, subscriptionDurable<br>및 subscriptionShared 프로퍼티를 활성화할 수 있습니다. 기본값은 queue입니다 (이는<br>이 세 가지 프로퍼티를 비활성화합니다). |
response-destination-type | response에 대한 JMS destination 타입입니다: queue 또는 topic. 기본값은<br>destination-type attribute의 값입니다. |
client-id | 이 listener 컨테이너에 대한 JMS client ID입니다. durable subscription을 사용할 때는<br>이를 지정해야 합니다. |
cache | JMS resource에 대한 cache level입니다: none, connection, session, consumer, 또는<br>auto. 기본값(auto)에서는 cache level이 효과적으로 consumer이지만,<br>external transaction manager가 지정된 경우에는 효과적인 기본값이 none이 됩니다 (주어진<br>ConnectionFactory가 XA-aware 풀인 Jakarta EE 스타일 transaction management를 가정). |
acknowledge | native JMS acknowledge 모드입니다: auto, client, dups-ok, 또는 transacted. transacted 값은<br>locally transacted Session을 활성화합니다. 대안으로, 나중에 표에서 설명하는<br>transaction-manager attribute를 지정할 수 있습니다. 기본값은 auto입니다. |
transaction-manager | external PlatformTransactionManager (일반적으로 Spring의 JtaTransactionManager와 같은 XA 기반<br>transaction coordinator)에 대한 reference입니다. 지정하지 않으면<br>native acknowledging이 사용됩니다 (acknowledge attribute 참조). |
concurrency | 각 listener에 대해 시작할 concurrent 세션 또는 consumer의 수입니다. 이는<br>최대 수를 나타내는 단순 숫자(예: 5)이거나 하한과 상한을 모두 나타내는 범위(예: 3-5)일 수 있습니다.<br>지정된 최소값은 단지 힌트일 뿐이며 runtime에 무시될 수 있습니다. 기본값은 1입니다.<br>topic listener의 경우나 queue ordering이 중요한 경우에는 concurrency를 1로 제한해야 합니다.<br>일반적인 queue의 경우에는 이를 높이는 것을 고려하십시오. |
prefetch | 단일 세션에 load할 메시지의 최대 수입니다. 이 숫자를 높이면<br>concurrent consumer의 starvation을 초래할 수 있다는 점에 유의하십시오. |
receive-timeout | receive 호출에 사용할 timeout(밀리초)입니다. 기본값은 1000 (1<br>초)입니다. -1은 timeout이 없음을 나타냅니다. |
back-off | recovery 시도 사이의 간격을 계산하기 위해 사용할 BackOff 인스턴스를 지정합니다.<br>BackOffExecution 구현이 BackOffExecution#STOP을 반환하면,<br>listener 컨테이너는 더 이상 recovery를 시도하지 않습니다. 이 프로퍼티가 설정되면<br>recovery-interval 값은 무시됩니다. 기본값은 interval이 5000 밀리초(즉, 5초)인<br>FixedBackOff입니다. |
recovery-interval | recovery 시도 사이의 간격(밀리초)을 지정합니다. 이는 지정된 interval을 가진<br>FixedBackOff를 생성하는 편리한 방법을 제공합니다. 더 많은 recovery<br>옵션이 필요하면 대신 BackOff 인스턴스를 지정하는 것을 고려하십시오. 기본값은 5000 밀리초<br>(즉, 5초)입니다. |
phase | 이 컨테이너가 시작 및 중지되어야 하는 lifecycle phase입니다. 값이 낮을수록<br>컨테이너가 더 일찍 시작되고 더 늦게 중지됩니다. 기본값은<br>Integer.MAX_VALUE로, 컨테이너가 가능한 한 늦게 시작되고 가능한 한 빨리 중지됨을 의미합니다. |
Table 2. Attributes of the JMS <listener-container> element
jms 스키마 지원을 사용하여 JCA 기반 listener 컨테이너를 설정하는 것은 다음 예제와 같이 매우 유사합니다:
1<jms:jca-listener-container resource-adapter="myResourceAdapter" 2 destination-resolver="myDestinationResolver" 3 transaction-manager="myTransactionManager" 4 concurrency="10"> 5 6 <jms:listener destination="queue.orders" ref="myMessageListener"/> 7 8</jms:jca-listener-container>
다음 표는 JCA variant에 대한 사용 가능한 configuration option을 설명합니다:
| Attribute | Description |
|---|---|
factory-id | 이 element에 의해 정의된 설정을 지정된 id를 가진 JmsListenerContainerFactory로 노출하여<br>다른 endpoint에서 재사용할 수 있도록 합니다. |
resource-adapter | JCA ResourceAdapter bean에 대한 reference입니다 (기본 bean 이름은<br>resourceAdapter입니다). |
activation-spec-factory | JmsActivationSpecFactory에 대한 reference입니다. 기본값은 JMS<br>provider와 그 ActivationSpec 클래스를 자동 감지하는 것입니다 (DefaultJmsActivationSpecFactory 참조). |
destination-resolver | JMS Destinations를 resolve하기 위한 DestinationResolver strategy에 대한 reference입니다. |
message-converter | JMS 메시지를 listener 메서드 argument로 변환하기 위한 MessageConverter strategy에 대한 reference입니다.<br>기본값은 SimpleMessageConverter입니다. |
destination-type | 이 listener에 대한 JMS destination 타입입니다: queue, topic, durableTopic, sharedTopic.<br>또는 sharedDurableTopic. 이는 컨테이너의 pubSubDomain, subscriptionDurable,<br>및 subscriptionShared 프로퍼티를 활성화할 수 있습니다. 기본값은 queue입니다 (이는<br>이 세 가지 프로퍼티를 비활성화합니다). |
response-destination-type | response에 대한 JMS destination 타입입니다: queue 또는 topic. 기본값은<br>destination-type attribute의 값입니다. |
client-id | 이 listener 컨테이너에 대한 JMS client ID입니다. durable subscription을 사용할 때는<br>이를 지정해야 합니다. |
acknowledge | native JMS acknowledge 모드입니다: auto, client, dups-ok, 또는 transacted. transacted 값은<br>locally transacted Session을 활성화합니다. 대안으로, 나중에 설명되는<br>transaction-manager attribute를 지정할 수 있습니다. 기본값은 auto입니다. |
transaction-manager | 각 incoming 메시지에 대해 XA transaction을 시작하기 위한 Spring JtaTransactionManager 또는<br>jakarta.transaction.TransactionManager에 대한 reference입니다. 지정하지 않으면 native acknowledging이 사용됩니다<br>(acknowledge attribute 참조). |
concurrency | 각 listener에 대해 시작할 concurrent 세션 또는 consumer의 수입니다. 이는<br>최대 수를 나타내는 단순 숫자(예: 5)이거나 하한과 상한을 모두 나타내는 범위(예: 3-5)일 수 있습니다.<br>지정된 최소값은 단지 힌트일 뿐이며 JCA listener 컨테이너를 사용할 때는 runtime에<br>일반적으로 무시됩니다. 기본값은 1입니다. |
prefetch | 단일 세션에 load할 메시지의 최대 수입니다. 이 숫자를 높이면<br>concurrent consumer의 starvation을 초래할 수 있다는 점에 유의하십시오. |
Table 3. Attributes of the JMS <jca-listener-container/> element
Annotation-driven Listener Endpoints
JMX