13.2. JMS URI


13.2.1. 개요

Cryostat/JMS를 사용하는 경우 JMS URI가 끝점의 대상 대상을 지정하는 데 사용됩니다. JMS URI는 URI에 하나 이상의 옵션을 추가하여 JMS 연결을 구성하는 데도 사용할 수 있습니다. 이러한 옵션은 IETF 표준, Java Message Service 1.0의 URI 스키마에 자세히 설명되어 있습니다. JNDI 시스템, 응답 대상, 사용할 전달 모드 및 기타 JMS 속성을 구성하는 데 사용할 수 있습니다.

13.2.2. 구문

예 13.4. “JMS URI 옵션 구문” 에 표시된 대로 물음표(?)를 사용하여 대상 주소와 분리하여 JMS URI 끝에 하나 이상의 옵션을 추가할 수 있습니다. 여러 옵션은 앰퍼샌드(& )로 구분됩니다. 예 13.4. “JMS URI 옵션 구문” 은 JMS URI에서 여러 옵션을 사용하는 구문을 보여줍니다.

예 13.4. JMS URI 옵션 구문

jms:variant:jmsAddress?option1=value1&option2=value2&_optionN_=valueN

13.2.3. JMS 속성

표 13.2. “URI 옵션으로 JMS 속성 설정 가능” 은 JMS 전송 계층에 영향을 주는 URI 옵션을 표시합니다.

표 13.2. URI 옵션으로 JMS 속성 설정 가능
속성기본설명

conduitIdSelectorPrefix

 

[선택 사항] conduit에서 생성하는 모든 상관 ID에 접두어가 붙은 문자열 값입니다. 선택기는 응답을 수신 대기하는 데 사용할 수 있습니다.

deliveryMode

PERSISTENT

JMS PERSISTENT 또는 NON_PERSISTENT 메시지 의미 체계 사용 여부를 지정합니다. PERSISTENT 전달 모드의 경우 JMS 브로커는 메시지를 승인하기 전에 영구 스토리지에 저장합니다. 반면 NON_PERSISTENT 메시지는 메모리에만 유지됩니다.

durableSubscriptionClientID

 

[optional] 연결에 대한 클라이언트 ID를 지정합니다. 이 속성은 공급자를 대신하여 유지 관리하는 상태와 연결을 연결하는 데 사용됩니다. 이를 통해 동일한 ID를 가진 후속 구독자는 이전 구독자가 서브스크립션을 종료한 상태에서 서브스크립션을 재개할 수 있습니다.

durableSubscriptionName

 

[선택 사항] 서브스크립션의 이름을 지정합니다.

messageType

byte

CXF에서 사용하는 JMS 메시지 유형을 지정합니다. 유효한 값은 다음과 같습니다.

  • byte
  • text
  • 바이너리

암호

 

[optional] 연결을 생성하기 위한 암호를 지정합니다. 이 속성을 URI에 추가하는 것은 권장되지 않습니다.

priority

4

0(가장 낮음)에서 9(가장 높음)까지의 JMS 메시지 우선 순위를 지정합니다.

receiveTimout

60000

요청/응답 교환이 사용될 때 클라이언트가 응답을 대기할 시간을 지정합니다.

reconnectOnException

true

[CXF 3.0에서 더 이상 사용되지 않음] 예외가 발생할 때 전송이 다시 연결해야 하는지 여부를 지정합니다.

3.0부터 예외가 발생할 때 전송이 항상 다시 연결됩니다.

replyToName

 

[optional] 큐 메시지의 응답 대상을 지정합니다. reply 대상은 JMSReplyTo 헤더에 표시됩니다. 이 속성을 설정하면 JMS 공급자가 지정되지 않은 경우 임시 응답 큐를 할당하므로 요청별 의미 체계가 있는 애플리케이션에 권장됩니다.

이 속성의 값은 JMS URI에 지정된 변형에 따라 해석됩니다.

  • JNDI 변형 - JNDI로 확인되는 대상 큐의 이름입니다.
  • 변형 - JMS를 사용하여 확인된 대상 큐의 이름입니다.

sessionTransacted

false

트랜잭션 유형을 지정합니다. 유효한 값은 다음과 같습니다.

  • true-리소스 로컬 트랜잭션
  • False-JTA 트랜잭션

timeToLive

0

JMS 공급자가 메시지를 삭제하는 시간(밀리초)을 지정합니다. 값이 0이면 무한 수명입니다.A value of 0 indicates an infinite lifetime.

topicReplyToName

 

[선택 사항] 주제 메시지에 대한 응답 대상을 지정합니다. 이 속성의 값은 JMS URI에 지정된 변형에 따라 해석됩니다.

  • JNDI-topic- JNDI로 확인되는 대상 주제의 이름입니다.
  • topic- JMS에서 해결한 대상 주제의 이름입니다.

useConduitIdSelector

true

conduit의 UUID가 모든 상관관계 ID의 접두사로 사용되는지 여부를 지정합니다.

모든 Conduits에는 고유한 UUID가 할당되므로 이 속성을 true 로 설정하면 여러 끝점이 JMS 큐 또는 주제를 공유할 수 있습니다.

사용자 이름

 

[optional] 연결을 만드는 데 사용할 사용자 이름을 지정합니다.

13.2.4. JNDI 속성

표 13.3. “URI 옵션으로 JNDI 속성 설정 가능” 에는 이 엔드포인트에 대한 JNDI를 구성하는 데 사용할 수 있는 URI 옵션이 표시됩니다.

표 13.3. URI 옵션으로 JNDI 속성 설정 가능
속성설명

jndiConnectionFactoryName

JMS 연결 팩토리의 JNDI 이름을 지정합니다.

jndiInitialContextFactory

JNDI 공급자의 정규화된 Java 클래스 이름을 지정합니다(Java x.jms.InitialContextFactory 유형). java.naming.factory.initial Java 시스템 속성을 설정하는 것과 동일합니다.

jndiTransactionManagerName

Spring, 블루프린트 또는 JNDI에서 검색할 JTA 트랜잭션 관리자의 이름을 지정합니다. 트랜잭션 관리자가 발견되면 JTA 트랜잭션이 활성화됩니다. session#159ed JMS 속성을 참조하십시오.

jndiURL

JNDI 공급자를 초기화하는 URL을 지정합니다. java.naming.provider.url Java 시스템 속성을 설정하는 것과 동일합니다.

13.2.5. 추가 JNDI 속성

속성인 java.naming.factory.initialjava.naming.provider.url 은 JNDI 공급자를 초기화하는 데 필요한 표준 속성입니다. 그러나 경우에 따라 JNDI 공급자가 표준 속성 외에도 사용자 지정 속성을 지원할 수 있습니다. 이 경우 jndi-PropertyName 형식의 URI 옵션을 설정하여 임의의 JNDI 속성을 설정할 수 있습니다.

예를 들어, SUN's LDAP implementation of JNDI를 사용하는 경우 예 13.5. “JMS URI에서 JNDI 속성 설정” 에 표시된 대로 JMS URI에서 JNDI 속성인 java.naming.factory.control 을 설정할 수 있습니다.

예 13.5. JMS URI에서 JNDI 속성 설정

jms:queue:FOO.BAR?jndi-java.naming.factory.control=com.sun.jndi.ldap.ResponseControlFactory

13.2.6. 예

JMS 공급자가 아직 구성되지 않은 경우 옵션을 사용하여 URI에 필요한 JNDI 구성 세부 정보를 제공할 수 있습니다( 표 13.3. “URI 옵션으로 JNDI 속성 설정 가능”참조). 예를 들어 Apache ActiveMQ JMS 공급자를 사용하도록 끝점을 구성하고 test.cxf.jmstransport.queue 라는 큐에 연결하려면 예 13.6. “JNDI 연결을 구성하는 JMS URI” 에 표시된 URI를 사용합니다.

예 13.6. JNDI 연결을 구성하는 JMS URI

jms:jndi:dynamicQueues/test.cxf.jmstransport.queue
?jndiInitialContextFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactory
&jndiConnectionFactoryName=ConnectionFactory
&jndiURL=tcp://localhost:61616

13.2.7. 서비스 게시

Cryostat-WS 표준 publish() 메서드는 Cryostat/JMS 서비스를 게시하는 데 사용할 수 없습니다. 대신 예 13.7. “Cryostat/JMS 서비스 게시” 에 표시된 대로 Apache CXF의 JaxWsServerFactoryBean 클래스를 사용해야 합니다.

예 13.7. Cryostat/JMS 서비스 게시

String address = "jms:jndi:dynamicQueues/test.cxf.jmstransport.queue3"
    + "?jndiInitialContextFactory"
    + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
    + "&jndiConnectionFactoryName=ConnectionFactory"
    + "&jndiURL=tcp://localhost:61500";
Hello implementor = new HelloImpl();
JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
svrFactory.setServiceClass(Hello.class);
svrFactory.setAddress(address);
svrFactory.setTransportId(JMSSpecConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID);
svrFactory.setServiceBean(implementor);
svrFactory.create();

예 13.7. “Cryostat/JMS 서비스 게시” 의 코드는 다음을 수행합니다.

엔드포인트의 주소를 나타내는 JMS URI를 생성합니다.

JaxWsServerFactoryBean 을 인스턴스화하여 서비스를 게시합니다.

서비스의 JMS URI를 사용하여 팩토리 빈의 주소 필드를 설정합니다.

팩토리에서 생성한 서비스가 Cryostat/JMS 전송을 사용하도록 지정합니다.

13.2.8. 서비스 사용

표준 Cryostat-WS API는 Cryostat/JMS 서비스를 사용하는 데 사용할 수 없습니다. 대신 예 13.8. “Cryostat/JMS 서비스 사용” 에 표시된 대로 Apache CXF의 JaxWsProxyFactoryBean 클래스를 사용해야 합니다.

예 13.8. Cryostat/JMS 서비스 사용

// Java
public void invoke() throws Exception {
    String address = "jms:jndi:dynamicQueues/test.cxf.jmstransport.queue3"
        + "?jndiInitialContextFactory"
        + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
        + "&jndiConnectionFactoryName=ConnectionFactory&jndiURL=tcp://localhost:61500";
    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
    factory.setAddress(address);
    factory.setTransportId(JMSSpecConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID);
    factory.setServiceClass(Hello.class);
    Hello client = (Hello)factory.create();
    String reply = client.sayHi(" HI");
    System.out.println(reply);
}

예 13.8. “Cryostat/JMS 서비스 사용” 의 코드는 다음을 수행합니다.

엔드포인트의 주소를 나타내는 JMS URI를 생성합니다.

JaxWsProxyFactoryBean 을 인스턴스화하여 프록시를 생성합니다.

서비스의 JMS URI를 사용하여 팩토리 빈의 주소 필드를 설정합니다.

팩토리에서 생성한 프록시가 Cryostat/JMS 전송을 사용하도록 지정합니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.