2장. ActiveMQ


2.1. ActiveMQ Component

ActiveMQ 구성 요소를 사용하여 JMS Queue 또는 Topic에 메시지를 보내거나 Apache ActiveMQ 를 사용하여 JMS Queue 또는 Topic에서 메시지를 사용할 수 있습니다.

이 구성 요소는 JMS 구성 요소를 기반으로 하며, Spring의 JmsTemplate을 사용하여 Spring의 JmsTemplate 을 사용하여 MessageListenerContainer 를 사용하여 선언적 트랜잭션에 Spring의 JMS 지원을 사용합니다. 모든 JMS 구성 요소 옵션은 ActiveMQ 구성 요소에도 적용됩니다.

이 구성 요소를 사용하려면 camel-core.jar,camel-spring.jarcamel-jms.jar 와 같은 Apache Camel 종속 항목과 함께 classpath에 activemq.jar 또는 activemq-core.jar 가 있는지 확인하십시오.

트랜잭션 및 캐싱

성능에 영향을 미칠 수 있으므로 JMS와의 트랜잭션을 사용하는 경우 JMS 페이지에서 아래 트랜잭션 및 캐시 수준을 참조하십시오.

2.2. URI 형식

activemq:[queue:|topic:]destinationName

여기서 destinationName 은 ActiveMQ 큐 또는 주제 이름입니다. 기본적으로 destinationName 은 큐 이름으로 해석됩니다. 예를 들어 큐에 연결하려면 다음을 사용합니다.

activemq:FOO.BAR

원하는 경우 선택적 queue: 접두사를 포함할 수 있습니다.

activemq:queue:FOO.BAR

항목에 연결하려면 topic: 접두사를 포함해야 합니다. 예를 들어, topic에 연결하려면 prices.Prices 를 사용합니다.

activemq:topic:Stocks.Prices

2.3. 옵션

모든 JMS 구성 요소 옵션은 ActiveMQ 구성 요소에도 적용됩니다.

2.4. Camel on EAP 배포

이 구성 요소는 Red Hat JBoss EAP(JBoss Enterprise Application Platform) 컨테이너에 단순화된 배포 모델을 제공하는 EAP의 Camel(Wildfly Camel) 프레임워크에서 지원합니다.

포함된 브로커 또는 외부 브로커에서 작동하도록 ActiveMQ Camel 구성 요소를 구성할 수 있습니다. JBoss EAP 컨테이너에 브로커를 포함하려면 EAP 컨테이너 구성 파일 Cryostat->-<for에서 ActiveMQ 리소스 어댑터를 구성하려면 ActiveMQ 리소스 어댑터 구성 을 참조하십시오.

2.5. 연결 Cryostat 구성

다음 테스트 사례는 ActiveMQ 연결에 사용되는 brokerURL 을 지정하는 동안 활성MQComponent() 메서드 를 사용하여 CamelContext 에 ActiveMQComponent를 추가하는 방법을 보여줍니다.

camelContext.addComponent("activemq", activeMQComponent("vm://localhost?broker.persistent=false"));

2.6. Spring XML을 사용하여 Connection factory 구성

다음과 같이 ActiveMQ 브로커 URL을 ActiveMQComponent에서 구성할 수 있습니다.

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <camelContext xmlns="http://camel.apache.org/schema/spring">
  </camelContext>

  <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="brokerURL" value="tcp://somehost:61616"/>
  </bean>

</beans>

2.7. 연결 풀링 사용

Camel을 사용하여 ActiveMQ 브로커로 보낼 때는 풀링된 연결 팩토리를 사용하여 JMS 연결, 세션 및 생산자의 효율적인 풀링을 처리하는 것이 좋습니다. 자세한 내용은 ActiveMQ Spring Support 에서 참조하십시오.

  1. Maven을 사용하여 AMQ 풀을 추가합니다.
    <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-pool</artifactId>
      <version>5.11.0.redhat-630516</version>
    </dependency>
  1. 다음과 같이 activemq 구성 요소를 설정합니다.
    <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="tcp://localhost:61616" />
    </bean>

    <bean id="pooledConnectionFactory"    class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop">
        <property name="maxConnections" value="8" />
        <property name="connectionFactory" ref="jmsConnectionFactory" />
    </bean>

    <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
        <property name="connectionFactory" ref="pooledConnectionFactory"/>
        <property name="concurrentConsumers" value="10"/>
    </bean>

    <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="configuration" ref="jmsConfig"/>
    </bean>
참고

풀링된 연결 팩토리에서 initdestroy 메서드를 확인합니다. 이러한 방법은 연결 풀이 올바르게 시작되고 종료되었는지 확인하는 데 중요합니다.

그러면 PooledConnectionFactory 가 동시에 사용 중인 최대 8개의 연결이 있는 연결 풀을 생성합니다. 각 연결은 여러 세션에서 공유할 수 있습니다.

연결당 최대 세션 수를 구성하는 데 사용할 수 있는 maxActive 라는 옵션이 있습니다. 기본값은 500 입니다.

ActiveMQ 5.7 이상에서 옵션의 이름이 maxActiveSessionPerConnection 으로 변경되어 더 나은 용도를 반영합니다.

concurrentConsumersmaxConnections 보다 높은 값으로 설정됩니다. 이는 각 소비자가 세션을 사용하고 세션에서 동일한 연결을 공유할 수 있으므로 이 작업이 허용됩니다. 이 예제에서는 8 * 500 = 4000 개의 활성 세션을 동시에 가질 수 있습니다.

2.8. 경로에서 MessageListener Cryostat 호출

ActiveMQ 구성 요소는 JMS MessageListener 에서 프로세서 까지 도우미 유형 도 제공합니다. 즉, Cryostat 구성 요소는 모든 경로 내에서 직접 JMS MessageListener Quarkus를 호출할 수 있습니다.

다음과 같이 JMS에서 MessageListener를 생성할 수 있습니다.

public class MyListener implements MessageListener {
   public void onMessage(Message jmsMessage) {
       // ...
   }
}

그런 다음 경로에서 다음과 같이 사용하십시오.

from("file://foo/bar").
  bean(MyListener.class);

즉, Apache Camel 구성 요소를 재사용하여 JMS MessageListener Cryostat\에 쉽게 통합할 수 있습니다!

2.9. ActiveMQ 대상 옵션 사용

ActiveMQ 5.6부터 사용 가능

" 대상" 접두사를 사용하여 엔드포인트 uri에서 대상 옵션을 구성할 수 있습니다. 예를 들어 소비자를 독점적으로 표시하고 사전 페치 크기를 50으로 설정하려면 다음과 같이 수행할 수 있습니다.

<camelContext xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="file://src/test/data?noop=true"/>
    <to uri="activemq:queue:foo"/>
  </route>
  <route>
    <!-- use consumer.exclusive ActiveMQ destination option, notice we have to prefix with destination. -->
    <from uri="activemq:foo?destination.consumer.exclusive=true&amp;destination.consumer.prefetchSize=50"/>
    <to uri="mock:results"/>
  </route>
</camelContext>

2.10. 권고 메시지 사용

ActiveMQ는 사용할 수 있는 항목에 배치되는 권고 메시지를 생성할 수 있습니다. 이러한 메시지는 느린 소비자를 감지하거나 통계를 구축하는 경우 경고를 보내는 데 도움이 될 수 있습니다(일당 메시지/생성 횟수 등) 다음 Spring DSL 예제에서는 주제에서 메시지를 읽는 방법을 보여줍니다.

<route>
	<from uri="activemq:topic:ActiveMQ.Advisory.Connection?mapJmsMessage=false" />
	<convertBodyTo type="java.lang.String"/>
	<transform>
	     <simple>${in.body}&#13;</simple>
	</transform>
	<to uri="file://data/activemq/?fileExist=Append&ileName=advisoryConnection-${date:now:yyyyMMdd}.txt" />
</route>

큐에서 메시지를 사용하는 경우 data/activemq 폴더 아래에 다음 파일이 표시됩니다.

advisoryConnection-20100312.txt

advisoryProducer-20100312.txt

포함 된 문자열:

      ActiveMQMessage {commandId = 0, responseRequired = false, messageId = ID:dell-charles-3258-1268399815140
      -1:0:0:0:221, originalDestination = null, originalTransactionId = null, producerId = ID:dell-charles-
      3258-1268399815140-1:0:0:0, destination = topic://ActiveMQ.Advisory.Connection, transactionId = null,
      expiration = 0, timestamp = 0, arrival = 0, brokerInTime = 1268403383468, brokerOutTime = 1268403383468,
      correlationId = null, replyTo = null, persistent = false, type = Advisory, priority = 0, groupID = null,
      groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = null,
      marshalledProperties = org.apache.activemq.util.ByteSequence@17e2705, dataStructure = ConnectionInfo
      {commandId = 1, responseRequired = true, connectionId = ID:dell-charles-3258-1268399815140-2:50,
      clientId = ID:dell-charles-3258-1268399815140-14:0, userName = , password = *****,
      brokerPath = null, brokerMasterConnector = false, manageable = true, clientMaster = true},
      redeliveryCounter = 0, size = 0, properties = {originBrokerName=master, originBrokerId=ID:dell-charles-
      3258-1268399815140-0:0, originBrokerURL=vm://master}, readOnlyProperties = true, readOnlyBody = true,
      droppable = false}

2.11. 구성 요소 JAR 가져오기

이 종속성이 필요합니다.

  • camel-activemq

ActiveMQ는 ActiveMQ 프로젝트와 함께 릴리스된 JMS 구성 요소의 확장입니다.

<dependency>
    <groupId>org.fusesource</groupId>
    <artifactId>camel-activemq</artifactId>
    <version>7.11.0.fuse-sb2-7_11_0-00035-redhat-00001</version>
</dependency>
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.