7.2. PAX-JMS 구성 서비스 정보


mvn:org.ops4j.pax.jms/pax-jms-config/1.0.0 번들에서는 다음 세 가지 작업을 수행하는 관리형 서비스 Cryostat를 제공합니다.

  • org.ops4j.pax.jms.service.ConnectionFactoryFactory OSGi 서비스를 추적하여 해당 메서드를 호출합니다.

    public ConnectionFactory createConnectionFactory(Map<String, Object> properties);
    
    public XAConnectionFactory createXAConnectionFactory(Map<String, Object> properties);
  • 위의 방법에 필요한 속성을 수집하기 위해 org.ops4j.connection factory 팩토리 PID 를 추적합니다. 예를 들어 ${karaf.etc}/org.ops4j.connectionfactory-artemis.cfg 파일을 생성하여 구성 관리 서비스에 사용할 수 있는 방법을 사용하여 팩토리 구성을 생성하는 경우 최종 단계를 수행하여 브로커별 연결 팩토리를 노출할 수 있습니다.
  • javax.jms.ConnectionFactoryjavax.jms.XAConnectionFactory 서비스를 추적하여 JMS 연결 팩토리 풀링 내에서 래핑합니다.

자세한 내용은 다음 항목에 있습니다.

7.2.1. AMQ 7.1용 연결 팩토리 생성

다음은 Artemis 브로커에 대한 연결 요소를 만들기 위한 세부적이고 표준 적인 단계별 가이드입니다.

  1. pax-jms-artemis 기능 및 pax-jms-config 기능을 사용하여 Artemis 드라이버를 설치합니다.

    karaf@root()> feature:install pax-jms-artemis
    
    karaf@root()> bundle:services -p org.ops4j.pax.jms.pax-jms-config
    
    OPS4J Pax JMS Config (248) provides:
    ------------------------------------
    objectClass = [org.osgi.service.cm.ManagedServiceFactory]
    service.bundleid = 248
    service.id = 328
    service.pid = org.ops4j.connectionfactory
    service.scope = singleton
    
    karaf@root()> bundle:services -p org.ops4j.pax.jms.pax-jms-artemis
    
    OPS4J Pax JMS Artemis Support (247) provides:
    ---------------------------------------------
    objectClass = [org.ops4j.pax.jms.service.ConnectionFactoryFactory]
    service.bundleid = 247
    service.id = 327
    service.scope = singleton
    type = artemis
  2. 팩토리 구성 을 생성합니다.

    karaf@root()> config:edit --factory --alias artemis org.ops4j.connectionfactory
    karaf@root()> config:property-set type artemis
    karaf@root()> config:property-set osgi.jndi.service.name jms/artemis # "name" property may be used too
    karaf@root()> config:property-set connectionFactoryType ConnectionFactory # or XAConnectionFactory
    karaf@root()> config:property-set jms.url tcp://localhost:61616
    karaf@root()> config:property-set jms.user admin
    karaf@root()> config:property-set jms.password admin
    karaf@root()> config:property-set jms.consumerMaxRate 1234
    karaf@root()> config:update
    
    karaf@root()> config:list '(service.factoryPid=org.ops4j.connectionfactory)'
    ----------------------------------------------------------------
    Pid:            org.ops4j.connectionfactory.965d4eac-f5a7-4f65-ba1a-15caa4c72703
    FactoryPid:     org.ops4j.connectionfactory
    BundleLocation: ?
    Properties:
       connectionFactoryType = ConnectionFactory
       felix.fileinstall.filename = file:${karar.etc}/org.ops4j.connectionfactory-artemis.cfg
       jms.consumerMaxRate = 1234
       jms.password = admin
       jms.url = tcp://localhost:61616
       jms.user = admin
       osgi.jndi.service.name = jms/artemis
       service.factoryPid = org.ops4j.connectionfactory
       service.pid = org.ops4j.connectionfactory.965d4eac-f5a7-4f65-ba1a-15caa4c72703
       type = artemis
  3. pax-jms-configjavax.jms.ConnectionFactory 서비스로 구성을 처리했는지 확인합니다.

    karaf@root()> service:list javax.jms.ConnectionFactory
    [javax.jms.ConnectionFactory]
    -----------------------------
     connectionFactoryType = ConnectionFactory
     felix.fileinstall.filename = file:${karaf.etc}/org.ops4j.connectionfactory-artemis.cfg
     jms.consumerMaxRate = 1234
     jms.password = admin
     jms.url = tcp://localhost:61616
     jms.user = admin
     osgi.jndi.service.name = jms/artemis
     pax.jms.managed = true
     service.bundleid = 248
     service.factoryPid = org.ops4j.connectionfactory
     service.id = 342
     service.pid = org.ops4j.connectionfactory.965d4eac-f5a7-4f65-ba1a-15caa4c72703
     service.scope = singleton
     type = artemis
    Provided by :
     OPS4J Pax JMS Config (248)
    참고

    추가 Artemis 구성(특히 protocol=amqp )을 지정하는 경우 Artemis JMS 클라이언트 대신 QPID JMS 라이브러리가 사용됩니다. 그런 다음 amqp:// 프로토콜을 jms.url 속성에 사용해야 합니다.

  4. 연결을 테스트합니다.

이제 필요한 경우 삽입할 수 있는 브로커별(아직 풀링 없음) 연결 팩토리가 있습니다. 예를 들어 jms 기능의 Karaf 명령을 사용할 수 있습니다.

karaf@root()> feature:install -v jms
Adding features: jms/[4.2.0.fuse-000237-redhat-1,4.2.0.fuse-000237-redhat-1]
...
karaf@root()> jms:connectionfactories
JMS Connection Factory
──────────────────────
jms/artemis

karaf@root()> jms:info -u admin -p admin jms/artemis
Property │ Value
─────────┼──────────────────────────
product  │ ActiveMQ
version  │ 2.4.0.amq-711002-redhat-1

karaf@root()> jms:send -u admin -p admin jms/artemis DEV.QUEUE.1 "Hello Artemis"

karaf@root()> jms:browse -u admin -p admin jms/artemis DEV.QUEUE.1
Message ID                              │ Content       │ Charset │ Type │ Correlation ID │ Delivery Mode │ Destination                │ Expiration │ Priority │ Redelivered │ ReplyTo │ Timestamp
────────────────────────────────────────┼───────────────┼─────────┼──────┼────────────────┼───────────────┼────────────────────────────┼────────────┼──────────┼─────────────┼─────────┼──────────────────────────────
ID:2b6ea56d-574d-11e8-971a-7ee9ecc029d4 │ Hello Artemis │ UTF-8   │      │                │ Persistent    │ ActiveMQQueue[DEV.QUEUE.1] │ Never      │ 4        │ false       │         │ Mon May 14 10:02:38 CEST 2018

다음 목록은 프로토콜을 전환할 때 발생하는 상황을 보여줍니다.

karaf@root()> config:list '(service.factoryPid=org.ops4j.connectionfactory)'
----------------------------------------------------------------
Pid:            org.ops4j.connectionfactory.965d4eac-f5a7-4f65-ba1a-15caa4c72703
FactoryPid:     org.ops4j.connectionfactory
BundleLocation: ?
Properties:
   connectionFactoryType = ConnectionFactory
   felix.fileinstall.filename = file:${karaf.etc}/org.ops4j.connectionfactory-artemis.cfg
   jms.consumerMaxRate = 1234
   jms.password = fuse
   jms.url = tcp://localhost:61616
   jms.user = fuse
   osgi.jndi.service.name = jms/artemis
   service.factoryPid = org.ops4j.connectionfactory
   service.pid = org.ops4j.connectionfactory.965d4eac-f5a7-4f65-ba1a-15caa4c72703
   type = artemis

karaf@root()> config:edit org.ops4j.connectionfactory.312eb09a-d686-4229-b7e1-2ea38a77bb0f
karaf@root()> config:property-set protocol amqp
karaf@root()> config:property-delete user
karaf@root()> config:property-set username admin # mind the difference between artemis-jms-client and qpid-jms-client
karaf@root()> config:property-set jms.url amqp://localhost:61616
karaf@root()> config:update

karaf@root()> jms:info -u admin -p admin jms/artemis
Property │ Value
─────────┼────────────────
product  │ QpidJMS
version  │ 0.30.0.redhat-1

karaf@root()> jms:browse -u admin -p admin jms/artemis DEV.QUEUE.1
Message ID │ Content       │ Charset │ Type │ Correlation ID │ Delivery Mode │ Destination │ Expiration │ Priority │ Redelivered │ ReplyTo │ Timestamp
───────────┼───────────────┼─────────┼──────┼────────────────┼───────────────┼─────────────┼────────────┼──────────┼─────────────┼─────────┼──────────────────────────────
           │ Hello Artemis │ UTF-8   │      │                │ Persistent    │ DEV.QUEUE.1 │ Never      │ 4        │ false       │         │ Mon May 14 10:02:38 CEST 2018

7.2.2. IBM MQ 8 또는 IBM MQ 9용 연결 팩토리 생성

이 섹션에서는 IBM MQ 8 및 IBM MQ 9에 연결하는 방법을 설명합니다. pax-jms-ibmmq 가 관련 pax-jms 번들을 설치하더라도 라이센스로 인해 IBM MQ 드라이버가 설치되지 않습니다.

  1. https://developer.ibm.com/messaging/mq-downloads/으로 이동합니다.
  2. 로그인합니다.
  3. 설치할 버전을 클릭합니다(예: IBM MQ 8.0 Client 또는 IBM MQ 9.0 Client ).
  4. 표시되는 페이지의 다운로드 버전 표에서 원하는 버전을 클릭합니다.
  5. 다음 페이지에서 접미사 IBM-MQ-Install-Java-All 이 있는 최신 버전을 선택합니다. 예를 들어 8.0.0.10-WS-MQ-Install-Java-All 또는 9.0.0.4-IBM-Install-Java-All를 다운로드합니다.
  6. 다운로드한 JAR 파일의 내용을 추출합니다.
  7. bundle:install 명령을 실행합니다. 예를 들어 /home/Downloads 디렉터리에 콘텐츠를 추출한 경우 다음과 같은 명령을 입력합니다.

    `bundle:install -s wrap:file:////home/Downloads/9.0.0.4-IBM-MQ-Install-Java-All/ibmmq9/wmq/JavaSE/com.ibm.mq.allclient.jar`.
  8. 다음과 같이 연결 팩토리를 생성합니다.

    1. pax-jms-ibmmq 를 설치합니다.

      karaf@root()> feature:install pax-jms-ibmmq
      
      karaf@root()> bundle:services -p org.ops4j.pax.jms.pax-jms-ibmmq
      
      OPS4J Pax JMS IBM MQ Support (239) provides:
      --------------------------------------------
      objectClass = [org.ops4j.pax.jms.service.ConnectionFactoryFactory]
      service.bundleid = 239
      service.id = 346
      service.scope = singleton
      type = ibmmq
    2. 팩토리 구성 생성:

      karaf@root()> config:edit --factory --alias ibmmq org.ops4j.connectionfactory
      karaf@root()> config:property-set type ibmmq
      karaf@root()> config:property-set osgi.jndi.service.name jms/mq9 # "name" property may be used too
      karaf@root()> config:property-set connectionFactoryType ConnectionFactory # or XAConnectionFactory
      karaf@root()> config:property-set jms.queueManager FUSEQM
      karaf@root()> config:property-set jms.hostName localhost
      karaf@root()> config:property-set jms.port 1414
      karaf@root()> config:property-set jms.transportType 1 # com.ibm.msg.client.wmq.WMQConstants.WMQ_CM_CLIENT
      karaf@root()> config:property-set jms.channel DEV.APP.SVRCONN
      karaf@root()> config:property-set jms.CCSID 1208 # com.ibm.msg.client.jms.JmsConstants.CCSID_UTF8
      karaf@root()> config:update
      
      karaf@root()> config:list '(service.factoryPid=org.ops4j.connectionfactory)'
      ----------------------------------------------------------------
      Pid:            org.ops4j.connectionfactory.eee4a757-a95d-46b8-b8b6-19aa3977d863
      FactoryPid:     org.ops4j.connectionfactory
      BundleLocation: ?
      Properties:
         connectionFactoryType = ConnectionFactory
         felix.fileinstall.filename = file:${karaf.etc}/org.ops4j.connectionfactory-ibmmq.cfg
         jms.CCSID = 1208
         jms.channel = DEV.APP.SVRCONN
         jms.hostName = localhost
         jms.port = 1414
         jms.queueManager = FUSEQM
         jms.transportType = 1
         osgi.jndi.service.name = jms/mq9
         service.factoryPid = org.ops4j.connectionfactory
         service.pid = org.ops4j.connectionfactory.eee4a757-a95d-46b8-b8b6-19aa3977d863
         type = ibmmq
    3. pax-jms-configjavax.jms.ConnectionFactory 서비스로 구성을 처리했는지 확인합니다.

      karaf@root()> service:list javax.jms.ConnectionFactory
      [javax.jms.ConnectionFactory]
      -----------------------------
       connectionFactoryType = ConnectionFactory
       felix.fileinstall.filename = file:/data/servers/7.13.0.fuse-7_13_0-00012-redhat-00001/etc/org.ops4j.connectionfactory-ibmmq.cfg
       jms.CCSID = 1208
       jms.channel = DEV.APP.SVRCONN
       jms.hostName = localhost
       jms.port = 1414
       jms.queueManager = FUSEQM
       jms.transportType = 1
       osgi.jndi.service.name = jms/mq9
       pax.jms.managed = true
       service.bundleid = 237
       service.factoryPid = org.ops4j.connectionfactory
       service.id = 347
       service.pid = org.ops4j.connectionfactory.eee4a757-a95d-46b8-b8b6-19aa3977d863
       service.scope = singleton
       type = ibmmq
      Provided by :
       OPS4J Pax JMS Config (237)
    4. 연결을 테스트합니다.

      karaf@root()> feature:install -v jms
      Adding features: jms/[4.2.0.fuse-000237-redhat-1,4.2.0.fuse-000237-redhat-1]
      ...
      karaf@root()> jms:connectionfactories
      JMS Connection Factory
      ──────────────────────
      jms/mq9
      
      karaf@root()> jms:info -u app -p fuse jms/mq9
      Property │ Value
      ─────────┼────────────────────
      product  │ IBM MQ JMS Provider
      version  │ 8.0.0.0
      
      karaf@root()> jms:send -u app -p fuse jms/mq9 DEV.QUEUE.1 "Hello IBM MQ 9"
      
      karaf@root()> jms:browse -u app -p fuse jms/mq9 DEV.QUEUE.1
      Message ID                                          │ Content                     │ Charset │ Type │ Correlation ID │ Delivery Mode │ Destination          │ Expiration │ Priority │ Redelivered │ ReplyTo │ Timestamp
      ────────────────────────────────────────────────────┼─────────────────────────────┼─────────┼──────┼────────────────┼───────────────┼──────────────────────┼────────────┼──────────┼─────────────┼─────────┼──────────────────────────────
      ID:414d512046555345514d202020202020c940f95a038b3220 │ Hello IBM MQ 9              │ UTF-8   │      │                │ Persistent    │ queue:///DEV.QUEUE.1 │ Never      │ 4        │ false       │         │ Mon May 14 10:17:01 CEST 2018

IBM MQ Explorer 또는 웹 콘솔에서 메시지가 전송되었는지 확인할 수도 있습니다.

7.2.3. Apache Karaf에서 Fuse A-MQ 6.3 Client 사용

Fuse 소프트웨어 다운로드 페이지에서 Fuse 빠른 시작을 다운로드할 수 있습니다.

빠른 시작 zip 파일의 내용을 로컬 폴더(예: quickstarts 라는 폴더 )로 추출합니다.

OSGi 번들로 퀵스타트/camel/camel-jms 예제를 빌드하고 설치할 수 있습니다. 이 번들에는 JBoss A-MQ 6.3 JMS 큐로 메시지를 전송하는 Camel 경로에 대한 블루프린트 XML 정의가 포함되어 있습니다. JBoss A-MQ 6.3 브로커를 위한 연결 팩토리를 생성하는 절차는 다음과 같습니다.

7.2.3.1. 사전 요구 사항

  • Maven 3.3.1 이상을 설치했습니다.
  • 시스템에 Red Hat Fuse가 설치되어 있어야 합니다.
  • 시스템에 JBoss A-MQ Broker 6.3이 설치되어 있어야 합니다.
  • 고객 포털에서 Karaf 빠른 시작 zip 파일을 다운로드하여 추출했습니다.

7.2.3.2. 프로세스

  1. quickstarts/camel/camel-jms/src/main/resources/OSGI-INF/blueprint/ 디렉터리로 이동합니다.
  2. camel-context.xml 파일의 id="jms"로 다음 8080을 바꿉니다.

        <bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
            <property name="connectionFactory">
                <reference interface="javax.jms.ConnectionFactory" />
            </property>
            <property name="transactionManager" ref="transactionManager"/>
        </bean>

    다음 섹션에서는 JBoss A-MQ 6.3 연결 팩토리를 인스턴스화합니다.

    	<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
    	        <property name="connectionFactory" ref="activemqConnectionFactory"/>
    	        <property name="transactionManager" ref="transactionManager"/>
    	</bean>
    	<bean id="activemqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    		<property name="brokerURL" value="tcp://localhost:61616"/>
    		<property name="userName" value="admin"/>
    		<property name="password" value="admin"/>
    	</bean>

    JBoss A-MQ 6.3 연결 팩토리는 tcp://localhost:61616 에서 수신 대기하는 브로커에 연결하도록 구성되어 있습니다. 기본적으로 JBoss A-MQ는 IP 포트 값 61616 을 사용합니다. 연결 팩토리도 userName/password 인증 정보 admin/admin을 사용하도록 구성되어 있습니다. 이 사용자가 브로커 구도에서 활성화되어 있는지 확인하십시오 (또는 브로커 구성과 일치하도록 여기에서 이러한 설정을 사용자 지정할 수 있습니다).

  3. camel-context.xml 파일을 저장합니다.
  4. camel-jms 빠른 시작을 빌드합니다.

    $ cd quickstarts/camel/camel-jms
    $ mvn install
  5. 빠른 시작이 성공적으로 설치되면 $FUSE_HOME/ 디렉터리로 이동하여 다음 명령을 실행하여 Apache Karaf 서버에서 Fuse를 시작합니다.

    $ ./bin/fuse
  6. Fuse on Apache Karaf 인스턴스에서 activemq-client 기능 및 camel-jms 기능을 설치합니다.

    karaf@root()> feature:install activemq-client
    karaf@root()> feature:install camel-jms
  7. camel-jms 빠른 시작 번들을 설치합니다.

    karaf@root()> install -s mvn:org.jboss.fuse.quickstarts/camel-jms/{$fuseversion}

    여기서 {$fuseversion} 을 방금 빌드한 Maven 아티팩트의 실제 버전으로 바꿉니다( camel-jms quickstart README 파일을 구성).

  8. JBoss A-MQ 6.3 브로커를 시작합니다(이 작업을 위해 JBoss A-MQ 6.3 설치 필요). 다른 터미널 창을 열고 JBOSS_AMQ_63_INSTALLDIR 디렉터리로 이동합니다.

    $ cd JBOSS_AMQ_63_INSTALLDIR
    $ ./bin/amq
  9. Camel 경로가 시작된 즉시 Fuse 설치 시 work/jms/input 디렉터리가 표시됩니다. 이 빠른 시작의 src/main/data 디렉토리에서 찾은 파일을 새로 생성된 work/jms/input 디렉터리에 복사합니다.
  10. 잠시 기다렸다가 국가별로 구성된 동일한 파일이 work/jms/output 디렉토리 아래에 있습니다.

        order1.xml, order2.xml and order4.xml in work/jms/output/others
        order3.xml and order5.xml in work/jms/output/us
        order6.xml in work/jms/output/fr
  11. log:display 를 사용하여 비즈니스 로깅을 확인합니다.

        Receiving order order1.xml
    
        Sending order order1.xml to another country
    
        Done processing order1.xml

7.2.4. 처리된 속성 요약

구성 관리 팩토리 PID 의 속성은 관련 org.ops4j.pax.jms.service.ConnectionFactoryFactory 구현으로 전달됩니다.

  • ActiveMQ

    org.ops4j.pax.jms.activemq.ActiveMQConnectionFactoryFactory (JMS 1.1만 해당)

    org.apache.activemq.ActiveMQConnectionFactory.buildFromMap() 메서드에 전달되는 속성

  • Artemis

    org.ops4j.pax.jms.artemis.ArtemisConnectionFactoryFactory

    protocol=amqp 인 경우 속성은 org.apache.qpid.jms.jms.jms.jms. jms.JmsConnectionFactory 인스턴스를 구성하기 위해 org.apache.qpid.util.PropertyUtil. setProperties() 메서드로 전달됩니다.

    그렇지 않으면 org.apache.activemq.artemis.utils.uri.BeanSupport.setData()org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory 인스턴스에 대해 호출됩니다.

  • IBM MQ

    org.ops4j.pax.jms.ibmmq.MQConnectionFactoryFactory

    com.ibm.mq.jms.MQConnectionFactory 또는 com.ibm.mq.jms.MQXAConnectionFactory 의 Cryostat 속성이 처리됩니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.