7.5. JMS 연결 풀 사용
이 섹션에서는 JMS 연결/세션 풀링 옵션에 대해 설명합니다. JDBC에 대한 선택 사항보다 적은 선택 사항이 있습니다. 정보는 다음 주제로 구성됩니다.
XA 복구를 사용하려면 pax-jms-pool-transx
또는 pax-jms-pool-narayana
연결 풀 모듈을 사용해야 합니다.
7.5.1. JMS 연결 풀 사용 소개
지금까지 브로커별 연결 팩토리 를 등록했습니다. 연결 팩토리 자체는 연결 팩토리 의 팩토리이기 때문에 org.ops4j.pax.jms.service.ConnectionFactoryFactory
서비스는 메타 팩토리 로 취급될 수 있습니다. 두 종류의 연결 팩토리를 생성할 수 있어야 합니다.
-
javax.jms.ConnectionFactory
-
javax.jms.XAConnectionFactory
pax-jms-pool-*
번들은 org.ops4j.pax.jms.service.ConnectionFactoryFactory
서비스와 원활하게 작동합니다. 이러한 번들은 속성 세트와 원래 org.ops4j.pax.service.ConnectionFactoryfactory를 사용하여 풀링된 연결 팩토리를 생성하는 데 사용할 수 있는
factory의 구현을 제공합니다. 예를 들면 다음과 같습니다.
org.ops4j.pax.pax.jms.service.service.service.service.service.Pooled
ConnectionFactory
public interface PooledConnectionFactoryFactory { ConnectionFactory create(ConnectionFactoryFactory cff, Map<String, Object> props); }
다음 표에서는 풀링된 연결 팩토리 팩토리 팩토리를 등록하는 번들을 보여줍니다. 표에서 o.o.p.j.p
는 org.ops4j.pax.jms.pool
을 나타냅니다.
번들 | PooledConnectionFactoryFactory | 풀 키 |
---|---|---|
|
|
|
|
|
|
|
|
|
pax-jms-pool-narayana
팩토리를 pooled-jms
라이브러리를 기반으로 하므로 PooledJms(XA)PooledConnectionFactoryFactory
라고 합니다. XA 복구를 위한 Narayana 트랜잭션 관리자와의 통합을 추가합니다.
위의 번들은 연결 팩토리만 설치합니다. 연결 팩토리를 직접 설치하지 않는 번들입니다. 결과적으로 javax.jms.ConnectionFactory org.ops4j.pax.jms.service.PooledConnectionFactoryFactory.create()
메서드를 호출하는 데 필요한 것이 있습니다.
7.5.2. pax-jms-pool-pooledjms 연결 풀 모듈 사용
pax-jms-pooledjms 번들을 사용하는 방법을 이해하면
번들뿐만 아니라 pax-jms-pool-pooledjms
pax-jms-pool-pool
번들도 사용할 수 있습니다.
-
narayna
pax-jms-config 번들은 다음을 추적합니다.
-
org.ops4j.pax.jms.service.ConnectionFactoryFactory
services -
org.ops4j.connection factory팩토리 PID
-
pax-jms-pool-*
번들 중 하나로 등록된 org.ops4j.pax.jms.service.PooledConnectionFactory
팩토리 구성에 pool
속성이 포함된 경우 pax-jms-config
번들에 의해 등록된 궁극적인 연결 팩토리는 브로커별 연결 팩토리입니다. pool=pooledjms
인 경우 연결 팩토리는 다음 중 하나로 래핑됩니다.
-
org.messaginghub.pooled.jms.JmsPoolConnectionFactory
(xa=false
) -
org.messaginghub.pooled.jms.JmsPoolXAConnectionFactory
(xa=true
)
pool
속성(및 비xa/xa 연결 팩토리 중 하나를 선택하는 부울 xa
속성 외에도 org.ops4j.connectionfactory
factory PID 에는 풀 접두사가 있는 속성이 포함될 수 있습니다. .
pooled-jms
라이브러리의 경우 다음과 같은 접두사가 지정된 속성이 ( 접두사를 제거한 후) 사용하여 인스턴스를 구성합니다.
-
org.messaginghub.pooled.jms.JmsPoolConnectionFactory
, or -
org.messaginghub.pooled.jms.JmsPoolXAConnectionFactory
다음 목록은 jms와 함께 편리한 구문을 사용하는
-prefixed properties:
pooled-jms
풀(org.ops4j.connectionfactory-artemis
factory PID)의 비현실적 구성입니다.
# configuration for pax-jms-config to choose and configure specific org.ops4j.pax.jms.service.ConnectionFactoryFactory name = jms/artemis connectionFactoryType = ConnectionFactory jms.url = tcp://localhost:61616 jms.user = fuse jms.password = fuse # org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory specific coniguration jms.callTimeout = 12000 # ... # hints for pax-jms-config to use selected org.ops4j.pax.jms.service.PooledConnectionFactoryFactory pool = pooledjms xa = false # pooled-jms specific configuration of org.messaginghub.pooled.jms.JmsPoolConnectionFactory pool.idleTimeout = 10 pool.maxConnections = 100 pool.blockIfSessionPoolIsFull = true # ...
위의 구성에서 pool
및 xa
키는 등록된 org.ops4j.pax.jms.service.PooledConnectionFactoryfactory 서비스
중 하나를 선택하는 힌트 (서비스 필터 속성)입니다. pooled-jms
라이브러리의 경우 다음과 같습니다.
karaf@root()> feature:install pax-jms-pool-pooledjms karaf@root()> bundle:services -p org.ops4j.pax.jms.pax-jms-pool-pooledjms OPS4J Pax JMS MessagingHub JMS Pool implementation (252) provides: ------------------------------------------------------------------ objectClass = [org.ops4j.pax.jms.service.PooledConnectionFactoryFactory] pool = pooledjms service.bundleid = 252 service.id = 331 service.scope = singleton xa = false ----- objectClass = [org.ops4j.pax.jms.service.PooledConnectionFactoryFactory] pool = pooledjms service.bundleid = 252 service.id = 335 service.scope = singleton xa = true
다음은 연결 풀을 생성하고 구성하는 단계의 전체 예입니다.
필요한 기능을 설치합니다.
karaf@root()> feature:install -v pax-jms-pool-pooledjms pax-jms-artemis Adding features: pax-jms-pool-pooledjms/[1.0.0,1.0.0] ...
jms
기능을 설치합니다.karaf@root()> feature:install jms karaf@root()> service:list org.ops4j.pax.jms.service.ConnectionFactoryFactory [org.ops4j.pax.jms.service.ConnectionFactoryFactory] ---------------------------------------------------- service.bundleid = 249 service.id = 327 service.scope = singleton type = artemis Provided by : OPS4J Pax JMS Artemis Support (249) karaf@root()> service:list org.ops4j.pax.jms.service.PooledConnectionFactoryFactory [org.ops4j.pax.jms.service.PooledConnectionFactoryFactory] ---------------------------------------------------------- pool = pooledjms service.bundleid = 251 service.id = 328 service.scope = singleton xa = false Provided by : OPS4J Pax JMS MessagingHub JMS Pool implementation (251) [org.ops4j.pax.jms.service.PooledConnectionFactoryFactory] ---------------------------------------------------------- pool = pooledjms service.bundleid = 251 service.id = 333 service.scope = singleton xa = true Provided by : OPS4J Pax JMS MessagingHub JMS Pool implementation (251)
팩토리 구성 을 생성합니다.
karaf@root()> config:edit --factory --alias artemis org.ops4j.connectionfactory karaf@root()> config:property-set connectionFactoryType ConnectionFactory karaf@root()> config:property-set osgi.jndi.service.name jms/artemis karaf@root()> config:property-set type artemis karaf@root()> config:property-set protocol amqp # so we switch to org.apache.qpid.jms.JmsConnectionFactory karaf@root()> config:property-set jms.url amqp://localhost:61616 karaf@root()> config:property-set jms.username admin karaf@root()> config:property-set jms.password admin karaf@root()> config:property-set pool pooledjms karaf@root()> config:property-set xa false karaf@root()> config:property-set pool.idleTimeout 10 karaf@root()> config:property-set pool.maxConnections 123 karaf@root()> config:property-set pool.blockIfSessionPoolIsFull true karaf@root()> config:update
pax-jms-config
가javax.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.password = admin jms.url = amqp://localhost:61616 jms.username = admin osgi.jndi.service.name = jms/artemis pax.jms.managed = true pool.blockIfSessionPoolIsFull = true pool.idleTimeout = 10 pool.maxConnections = 123 protocol = amqp service.bundleid = 250 service.factoryPid = org.ops4j.connectionfactory service.id = 347 service.pid = org.ops4j.connectionfactory.fc1b9e85-91b4-421b-aa16-1151b0f836f9 service.scope = singleton type = artemis Provided by : OPS4J Pax JMS Config (250)
연결 팩토리를 사용합니다.
karaf@root()> jms:connectionfactories JMS Connection Factory ────────────────────── jms/artemis karaf@root()> jms:info -u admin -p admin jms/artemis Property │ Value ─────────┼──────────────── product │ QpidJMS version │ 0.30.0.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:64842f99-5cb2-4850-9e88-f50506d49d20:1:1:1-1 │ Hello Artemis │ UTF-8 │ │ │ Persistent │ DEV.QUEUE.1 │ Never │ 4 │ false │ │ Mon May 14 12:47:13 CEST 2018
7.5.3. pax-jms-pool-narayana 연결 풀 모듈 사용
pax-jms-pool-narayna
모듈은 pax-jms-pool-pooledjms
로 거의 모든 작업을 수행합니다. XA 및 비 XA 시나리오에 대해 pooled-jms-specific org.ops4j.pax.jms.service.PooledConnectionFactoryFactory
를 설치합니다. 유일한 차이점은 XA 시나리오에서는 추가 통합 포인트가 있다는 것입니다. org.jboss.tm.XAResourceRecovery
OSGi 서비스는 com.arjuna.ats.arjuna.recovery.Recovery.RecoveryManager
에서 선택할 수 있도록 등록되었습니다.
7.5.4. pax-jms-pool-transx 연결 풀 모듈 사용
pax-jms-pool-transx
모듈은
서비스의 구현을 제공합니다. pax-transx-jms
번들을 기반으로 하는 org.ops4j.pax.service.PooledConnectionFactoryFactorypax-transx-jms
번들은 org.ops4j.pax.transx.jms.ManagedConnectionFactoryBuilder
기능을 사용하여 javax.jms.ConnectionFactory
풀을 생성합니다. 이는 8.3절. “pax-transx 프로젝트 정보” 에서 설명하는 JCA(Java™ Connector Architecture) 솔루션입니다.