메시징 구성
Red Hat JBoss Enterprise Application Platform용 메시징 애플리케이션을 개발 및 배포하려는 개발자와 관리자를 위한 지침 및 정보.
초록
JBoss EAP 문서에 대한 피드백 제공 링크 복사링크가 클립보드에 복사되었습니다!
오류를 보고하거나 문서를 개선하기 위해 Red Hat Jira 계정에 로그인하여 문제를 제출하십시오. Red Hat Jira 계정이 없는 경우 계정을 생성하라는 메시지가 표시됩니다.
절차
- 티켓을 생성하려면 다음 링크를 클릭하십시오.
- 문서 URL, 섹션 번호 를 포함하고 문제를 설명하십시오.
- 요약 에 문제에 대한 간략한 설명을 입력합니다.
- 설명에서 문제 또는 개선 사항에 대한 자세한 설명을 제공합니다. 문서에서 문제가 발생한 위치에 URL을 포함합니다.
- Submit 을 클릭하고 문제를 적절한 문서 팀으로 라우팅합니다.
보다 포괄적 수용을 위한 오픈 소스 용어 교체 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.
I 부. 메시징 및 JBoss EAP 7 정보 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 6의 메시징 브로커는 JBoss 커뮤니티 프로젝트인 HornetQ라고 했습니다. HornetQ 코드베이스는 Apache ActiveMQ 프로젝트에 기증되었으며 HornetQ 커뮤니티는 기증된 코드베이스를 개선하고 차세대 메시징 브로커를 생성하기 위해 해당 프로젝트에 참여했습니다. 그 결과 JBoss EAP 7용 메시징 브로커인 Apache ActiveMQ Artemis가 메시징 통합 및 JBoss EAP 6와의 이전 버전과의 호환성을 제공합니다. ActiveMQ Artemis는 JBoss EAP 6에서 HornetQ 브로커와의 프로토콜 호환성을 유지하는 반면 몇 가지 스마트한 새 기능도 포함합니다. 이 가이드에서는 JBoss EAP 7.4에서 사용할 수 있는 ActiveMQ Artemis 브로커의 많은 기능을 살펴보고 유용한 예를 제공합니다.
1장. 메시징 개념 링크 복사링크가 클립보드에 복사되었습니다!
1.1. 메시징 시스템 링크 복사링크가 클립보드에 복사되었습니다!
메시징 시스템을 사용하면 이기종 시스템을 더 높은 안정성과 함께 느슨하게 결합할 수 있습니다. RPC(원격 프로시저 호출) 패턴을 기반으로 하는 시스템과 달리 메시징 시스템은 주로 요청과 응답 간의 긴밀한 관계 없이 패턴을 전달하는 비동기 메시지를 사용합니다. 대부분의 메시징 시스템은 필요한 경우 요청 응답 모드를 지원할 수 있을 만큼 유연하지만 메시징 시스템의 주요 기능은 아닙니다.
메시징 시스템은 메시지 발신자를 소비자로부터 분리합니다. 사실 메시지의 발신자와 소비자는 완전히 독립적이며 서로를 알지 못합니다. 따라서 유연하고 느슨하게 연결된 시스템을 만들 수 있습니다. 대기업에서는 메시징 시스템을 사용하여 이기종 시스템을 느슨하게 결합하는 메시지 버스를 구현하는 경우가 많습니다. 메시지 버스는 ESB(Enterprise Service Bus)의 핵심을 구성할 수 있습니다. 메시지 버스를 사용하여 분산된 시스템을 분리하면 시스템을 확장하고 더욱 쉽게 조정할 수 있습니다. 또한 새 시스템을 추가하거나 기존 시스템을 폐기할 수 있는 유연성이 향상되어 있으므로 서로에 대해 취약한 종속성이 없기 때문입니다.
또한 메시징 시스템은 전달 보장과 같은 개념을 통합하여 안정적인 메시징, 트랜잭션을 통해 여러 메시지를 단일 작업 단위로 통합하고, 메시지를 서버 오류나 다시 시작해도 메시지를 허용하도록 허용할 수 있습니다.
1.2. 메시징 스타일 링크 복사링크가 클립보드에 복사되었습니다!
대부분의 메시징 시스템에서 지원하는 두 종류의 메시징 스타일은 점대점 패턴과 게시-구독 패턴입니다.
점대점 패턴
점대점 패턴은 대기열에서 단일 소비자 수신 대기에 메시지를 보내는 작업이 포함됩니다. 대기열에서 한 번 메시지는 일반적으로 전송을 보장하기 위해 지속됩니다. 메시지가 대기열을 통과하면 메시징 시스템은 이를 소비자에게 전달합니다. 소비자는 메시지가 처리되면 메시지 전달을 승인합니다. 동일한 메시지에 대해 동일한 큐에서 수신 대기하는 여러 소비자가 있을 수 있지만 하나의 소비자만 각 메시지를 수신합니다.
게시-서브스크립션 패턴
게시-서브스크립션 패턴을 사용하면 보낸 사람이 단일 대상을 사용하여 여러 소비자에게 메시지를 보낼 수 있습니다. 이 대상은 종종 주제 라고 합니다. 각 항목에는 여러 소비자 또는 구독자가 있을 수 있으며 점대점 메시징과는 달리 모든 구독자는 토픽에 게시된 모든 메시지를 받습니다.
또 다른 흥미로운 차이점은 서브스크립션 가입 고객이 지속적일 수 있다는 것입니다. 지속적 서브스크립션은 연결할 때 서버에 고유한 식별자를 전달하므로, 마지막으로 가입자가 연결한 이후 마지막으로 토픽에 게시된 메시지를 확인하고 전송할 수 있습니다. 이러한 메시지는 일반적으로 다시 시작한 후에도 서버에서 유지됩니다.
1.3. 자카르타 메시징 링크 복사링크가 클립보드에 복사되었습니다!
Jakarta Messaging 2.0은 자카르타 메시징 에서 정의됩니다. Jakarta Messaging은 점대점 및 게시-구독자 메시징 스타일 모두를 제공하는 Java API입니다. 자카르타 메시징은 트랜잭션 사용을 통합합니다. Jakarta Messaging은 표준 유선 형식을 정의하지 않으므로 Jakarta Messaging 공급자의 벤더는 모두 표준 API를 사용할 수 있지만 서로 다른 내부 유선 프로토콜을 사용하여 클라이언트와 서버 간에 통신할 수 있습니다.
1.4. 자카르타 메시징 대상 링크 복사링크가 클립보드에 복사되었습니다!
Jakarta Messaging 대상은 자카르타 메시징 연결 팩토리와 함께 관리 개체입니다. 대상은 메시지를 생성하고 사용하는 데 Jakarta Messaging 클라이언트에서 사용합니다. 대상을 사용하면 클라이언트가 메시지를 생성할 때 대상과 메시지를 사용할 때 메시지의 소스를 지정할 수 있습니다. 게시-서브스크립션 패턴을 사용하면 대상을 주제라고 합니다. 점대점 패턴을 사용하면 대상을 큐라고 합니다.
애플리케이션은 서버 측에서 구성되고 일반적으로 JNDI를 통해 액세스하는 다양한 자카르타 메시징 대상을 사용할 수 있습니다.
2장. 통합 ActiveMQ Artemis 메시징 브로커 링크 복사링크가 클립보드에 복사되었습니다!
2.1. ActiveMQ Artemis 링크 복사링크가 클립보드에 복사되었습니다!
Apache ActiveMQ Artemis는 비동기 메시징 시스템의 오픈소스 프로젝트입니다. 고성능, 임베딩 가능, 클러스터형이며 여러 프로토콜을 지원합니다. JBoss EAP 7은 Apache ActiveMQ Artemis를 자카르타 메시징 브로커로 사용하며 messaging-activemq
하위 시스템을 사용하여 구성됩니다. 이는 HornetQ 브로커를 완전히 대체하지만 JBoss EAP 6와 프로토콜 호환성이 유지됩니다.
핵심 ActiveMQ Artemis는 자카르타 메시징과 무관하며 핵심 API라고 하는 비Jakarta Messaging API 를 제공합니다. ActiveMQ Artemis는 또한 facade 계층을 사용하여 핵심 API 위에 Jakarta Messaging 의미 체계를 구현하는 Jakarta Messaging 클라이언트 API를 제공합니다. 기본적으로 Jakarta Messaging 상호 작용은 자카르타 메시징 클라이언트 API를 사용하여 클라이언트 측의 핵심 API 작업으로 변환됩니다. 여기에서 핵심 클라이언트 API 및 Apache ActiveMQ Artemis 유선 형식을 사용하여 모든 작업이 전송됩니다. 서버 자체는 코어 API만 사용합니다. 핵심 API 및 해당 개념에 대한 자세한 내용은 ActiveMQ Artemis 설명서를 참조하십시오.
2.2. Apache ActiveMQ Artemis 코어 API 및 Jakarta Messaging 대상 링크 복사링크가 클립보드에 복사되었습니다!
Jakarta Messaging 대상이 Apache ActiveMQ Artemis 주소에 매핑되는 방법을 빠르게 논의합니다.
Apache ActiveMQ Artemis 코어는 자카르타 메시징과 무관합니다. 자카르타 메시징 주제의 개념이 없습니다. Jakarta Messaging 주제는 0개 이상의 큐가 바인딩된 주소(주제 이름)로 핵심으로 구현됩니다. 해당 주소에 바인딩된 각 대기열은 토픽 서브스크립션을 나타냅니다. 마찬가지로 자카르타 메시징 큐는 자카르타 메시징 큐를 나타내는 하나의 대기열이 바인딩된 주소(Norizor Messaging 대기열 이름)로 구현됩니다.
관례적으로 모든 Jakarta Messaging 대기열은 코어 큐 이름에 jms.queue. 앞에
문자열이 있는 코어 큐에 매핑됩니다. 예를 들어, orders.europe라는 이름의 자카르타 메시징 큐는
라는 코어 대기열에 매핑됩니다. 코어 큐가 바인딩된 주소는 코어 큐 이름으로도 제공됩니다.
jms.
queue.orders.europe
Jakarta Messaging 주제의 경우 서브스크립션을 나타내는 큐가 자카르타 메시징 주제의 이름에 jms.topic.
앞에 추가하여 제공되는 주소입니다. 예를 들어 이름이 news.europe인 Jakarta Messaging 주제는
의 핵심 주소에 매핑됩니다.
jms.
topic.news.europe
즉, 이름을 주문한 자카르타 메시징 큐에
Jakarta Messaging
메시지를 보내는 경우 서버에서 주소 jms.queue.orders.europe
에 바인딩된 모든 코어 큐로 라우팅됩니다.news.europe라는 이름의 자카르타 메시징 주제로 자카르타 메시징
에 바인딩된 코어 대기열로 라우팅됩니다.
메시지를
보내면 서버에서 주소 jms.
topic.news.europe
사용자 이름 orders.europe
를 사용하여 Jakarta Messaging 큐의 설정을 구성하려면 해당 코어 대기열 jms.queue.orders.europe
를 구성해야 합니다 :
<!-- expired messages in JMS Queue "orders.europe" will be sent to the JMS Queue "expiry.europe" --> <address-setting match="jms.queue.orders.europe"> <expiry-address>jms.queue.expiry.europe</expiry-address> ... </address-setting>
<!-- expired messages in JMS Queue "orders.europe" will be sent to the JMS Queue "expiry.europe" -->
<address-setting match="jms.queue.orders.europe">
<expiry-address>jms.queue.expiry.europe</expiry-address>
...
</address-setting>
II 부. Single-Node 메시징 시스템 구성 링크 복사링크가 클립보드에 복사되었습니다!
파트 II는 helloworld-mdb
빠른 시작을 사용하여 JBoss EAP 7 메시징을 시작하는 가이드로 시작합니다. 설치에 사용할 수 있는 구성 옵션은 보안 및 지속성과 같은 주제를 포함합니다. 클러스터링, 고가용성 및 다른 서버 연결과 같은 주제를 포함하여 JBoss EAP 7의 여러 설치와 관련된 구성은 Part III, Multi-Node Messaging Systems 구성을 참조하십시오.
3장. 시작하기 링크 복사링크가 클립보드에 복사되었습니다!
3.1. helloworld-mdb 빠른 시작 사용 링크 복사링크가 클립보드에 복사되었습니다!
helloworld-mdb
빠른 시작에서는 간단한 메시지 기반 빈을 사용하여 기본적인 Jakarta EE 메시징 기능을 보여줍니다. 기본 구성을 검토할 때 빠른 시작과 실행이 이루어지면 JBoss EAP 메시징 서버에 포함된 기능을 소개할 수 있습니다.
helloworld-mdb 빠른 시작 빌드 및 배포
helloworld-mdb
빠른 시작 빌드 및 배포에 대한 지침은 빠른 시작과 함께 제공되는 README.md
파일의 지침을 참조하십시오. messaging-activemq
하위 시스템이 포함된 전체
구성을 지정하는 JBoss EAP 서버를 시작해야 합니다. 다른 구성 파일로 JBoss EAP를 시작하는 방법에 대한 자세한 내용은 README.md
파일 또는 JBoss EAP 구성 가이드를 참조하십시오.
3.2. 메시징 하위 시스템 구성 개요 링크 복사링크가 클립보드에 복사되었습니다!
messaging-activemq
하위 시스템에 대한 기본 구성은 full 또는 full
-ha
구성으로 JBoss EAP 서버를 시작할 때 포함됩니다. full-ha
옵션에는 클러스터링 및 고가용성과 같은 기능을 위한 고급 구성이 포함되어 있습니다.
필요하지 않지만, 이 구성 개요와 함께 실행하려면 helloworld-mdb
빠른 시작을 작업 예제로 사용하는 것이 좋습니다.
messaging-activemq
하위 시스템에서 사용할 수 있는 모든 설정에 대한 자세한 내용은 EAP_HOME/docs/schema/
디렉터리에 있는 스키마 정의를 참조하거나 다음과 같이 관리 CLI의 하위 시스템에서 read-resource-description
작업을 실행합니다.
/subsystem=messaging-activemq:read-resource-description(recursive=true)
/subsystem=messaging-activemq:read-resource-description(recursive=true)
서버 구성 파일의 다음 확장 기능은 JBoss EAP에 messaging-activemq
하위 시스템을 런타임의 일부로 포함하도록 지시합니다.
<extensions> ... <extension module="org.wildfly.extension.messaging-activemq"/> ... </extensions>
<extensions>
...
<extension module="org.wildfly.extension.messaging-activemq"/>
...
</extensions>
messaging-activemq
하위 시스템의 구성은 <subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0">
요소에 포함됩니다.
연결 정보
메시징 클라이언트는 자카르타 메시징 ConnectionFactory
개체를 사용하여 서버와 연결합니다. 기본 JBoss EAP 구성은 여러 연결 팩토리를 정의합니다. in -vm, http 및 pooled 연결에는 <connection-factory>
가 있습니다.
<connection-factory name="InVmConnectionFactory" connectors="in-vm" entries="java:/ConnectionFactory"/> <connection-factory name="RemoteConnectionFactory" ha="true" block-on-acknowledge="true" reconnect-attempts="-1" connectors="http-connector" entries="java:jboss/exported/jms/RemoteConnectionFactory"/> <pooled-connection-factory name="activemq-ra" transaction="xa" connectors="in-vm" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory"/>
<connection-factory name="InVmConnectionFactory" connectors="in-vm" entries="java:/ConnectionFactory"/>
<connection-factory name="RemoteConnectionFactory" ha="true" block-on-acknowledge="true" reconnect-attempts="-1" connectors="http-connector" entries="java:jboss/exported/jms/RemoteConnectionFactory"/>
<pooled-connection-factory name="activemq-ra" transaction="xa" connectors="in-vm" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory"/>
자세한 내용은 연결 팩트 구성 섹션을 참조하십시오.
커넥터 및 수락자
각 자카르타 메시징 연결 팩토리는 커넥터를 사용하여 클라이언트 생산자 또는 소비자에서 메시징 서버로의 자카르타 메시징 지원 통신을 활성화합니다. 커넥터 오브젝트는 메시징 서버에 연결하는 데 사용하는 전송 및 매개 변수를 정의합니다. 이에 대응하는 어셉터 개체는 메시징 서버에서 수락한 연결 유형을 식별합니다.
기본 JBoss EAP 구성은 여러 커넥터와 어셉터를 정의합니다.
예제: 기본 커넥터
<http-connector name="http-connector" socket-binding="http" endpoint="http-acceptor"/> <http-connector name="http-connector-throughput" socket-binding="http" endpoint="http-acceptor-throughput"> <param name="batch-delay" value="50"/> </http-connector> <in-vm-connector name="in-vm" server-id="0"/>
<http-connector name="http-connector" socket-binding="http" endpoint="http-acceptor"/>
<http-connector name="http-connector-throughput" socket-binding="http" endpoint="http-acceptor-throughput">
<param name="batch-delay" value="50"/>
</http-connector>
<in-vm-connector name="in-vm" server-id="0"/>
예제: 기본 Acceptors
<http-acceptor name="http-acceptor" http-listener="default"/> <http-acceptor name="http-acceptor-throughput" http-listener="default"> <param name="batch-delay" value="50"/> <param name="direct-deliver" value="false"/> </http-acceptor>
<http-acceptor name="http-acceptor" http-listener="default"/>
<http-acceptor name="http-acceptor-throughput" http-listener="default">
<param name="batch-delay" value="50"/>
<param name="direct-deliver" value="false"/>
</http-acceptor>
자세한 내용은 Acceptors 및 Connectors 섹션을 참조하십시오.
소켓 바인딩 그룹
기본 커넥터의 socket-binding
특성은 http
라는 소켓 바인딩을 참조합니다. JBoss EAP는 표준 웹 포트를 통해 인바운드 요청을 멀티플렉싱할 수 있기 때문에 http 커넥터가 사용됩니다.
이 socket-binding
은 구성 파일의 다른 위치에서 <socket-binding-group>
섹션의 일부로 찾을 수 있습니다. http 및 https 소켓 바인딩의 구성이 <socket-binding-groups>
요소 내에 어떻게 표시되는지 확인합니다.
소켓 바인딩에 대한 자세한 내용은 JBoss EAP 구성 가이드에서 소켓 바인딩 구성을 참조하십시오.
메시징 보안
messaging-activemq
하위 시스템에는 JBoss EAP를 처음 설치할 때 단일 security-setting
요소가 포함되어 있습니다.
<security-setting name="#"> <role name="guest" delete-non-durable-queue="true" create-non-durable-queue="true" consume="true" send="true"/> </security-setting>
<security-setting name="#">
<role name="guest" delete-non-durable-queue="true" create-non-durable-queue="true" consume="true" send="true"/>
</security-setting>
이는 와일드카드 #
에 명시된 대로 역할 게스트
가 있는 모든 사용자가 서버의 모든 주소에 액세스할 수 있음을 선언합니다. 와일드카드 구문에 대한 자세한 내용은 주소 설정 구성을 참조하십시오.
대상 및 원격 연결 보안에 대한 자세한 내용은 메시징 보안 구성을 참조하십시오.
메시징 대상
전체
및 full-ha
구성에는 JBoss EAP가 만료되었거나 적절한 대상으로 라우팅할 수 없는 두 개의 유용한 대기열이 포함됩니다.
<jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/> <jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
<jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
<jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
다음 방법 중 하나를 사용하여 JBoss EAP에 고유한 메시징 대상을 추가할 수 있습니다.
관리 CLI 사용
다음 관리 CLI 명령을 사용하여 큐를 추가합니다.
jms-queue add --queue-address=testQueue --entries=queue/test,java:jboss/exported/jms/queue/test
jms-queue add --queue-address=testQueue --entries=queue/test,java:jboss/exported/jms/queue/test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 관리 CLI 명령을 사용하여 주제를 추가합니다.
jms-topic add --topic-address=testTopic --entries=topic/test,java:jboss/exported/jms/topic/test
jms-topic add --topic-address=testTopic --entries=topic/test,java:jboss/exported/jms/topic/test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 관리 콘솔 사용
메시징 대상은 Configuration → Subsystems → Messaging (ActiveMQ) → Server 로 이동한 후 서버를 선택하고, 대상을 선택하고, 보기를 클릭하여 관리 콘솔에서 구성할 수 있습니다. JMS Queue 탭을 선택하여 대기열을 구성하고 JMS 토픽을 선택하여 토픽 을 구성합니다.
Jakarta EE 배포 설명자 또는 주석을 사용하여 대상 정의.
Jakarta EE 8에서는 배포 설명자에 큐 및 토픽 구성이 포함될 수 있습니다. 다음은 자카르타 메시징 큐를 정의하는 자카르타 EE 설명자 파일의 코드 조각입니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어,
helloworld-mdb
빠른 시작의 메시지 기반 빈에는 애플리케이션을 실행하는 데 필요한 대기열 및 주제를 정의하는 주석이 포함되어 있습니다. 이 방식으로 생성된 대상은 런타임 대기열 목록에 표시됩니다. 관리 CLI를 사용하여 런타임 대기열 목록을 표시합니다. 빠른 시작을 배포하면 생성된 런타임 큐가 다음과 같이 표시됩니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
자세한 내용은 Configuring Messaging Destinations 에서 참조하십시오.
4장. 메시징 대상 구성 링크 복사링크가 클립보드에 복사되었습니다!
메시징 대상을 구성하려면 JBoss EAP에 메시징이 활성화되어 있어야 합니다. 이 기능은 standalone -full.xml 또는
구성 파일로 실행할 때 기본적으로 활성화됩니다. standalone-full-ha.xml
domain.xml
구성 파일에는 메시징도 활성화되어 있습니다.
4.1. 큐 추가 링크 복사링크가 클립보드에 복사되었습니다!
Jakarta Messaging 큐를 추가하려면 관리 CLI에서 jms-queue
명령을 사용합니다.
jms-queue add --queue-address=myQueue --entries=[queue/myQueue jms/queue/myQueue java:jboss/exported/jms/queue/myQueue]
jms-queue add --queue-address=myQueue --entries=[queue/myQueue jms/queue/myQueue java:jboss/exported/jms/queue/myQueue]
entries
특성은 단일 공백으로 구분된 여러 JNDI 이름을 포함하는 목록입니다. 또한 []
대괄호를 사용하여 JNDI 이름 목록을 묶을 수도 있습니다. queue-address
는 라우팅 구성을 제공하고, 항목은
클라이언트가 큐를 조회하는 데 사용할 수 있는 JNDI 이름 목록을 제공합니다.
큐의 속성 읽기
관리 CLI에서 jms-queue
명령을 사용하여 큐 구성을 읽을 수 있습니다.
jms-queue read-resource --queue-address=myQueue
jms-queue read-resource --queue-address=myQueue
또는 관리 CLI를 사용하여 messaging-activemq
하위 시스템에 액세스하여 큐 구성을 읽을 수 있습니다.
jms-queue
의 특성
관리 CLI는 다음 명령이 제공된 경우 jms-queue
구성 요소의 모든 특성을 표시합니다.
/subsystem=messaging-activemq/server=default/jms-queue=*:read-resource-description()
/subsystem=messaging-activemq/server=default/jms-queue=*:read-resource-description()
아래 표는 jms-queue
:
속성 | 설명 |
---|---|
consumer-count | 이 큐의 메시지를 사용하는 소비자 수입니다. 런타임 시 이용 가능. |
dead-letter-address | 배달된 메시지를 보낼 주소입니다. 자세한 내용은 배달 못 한 편지 주소 구성을 참조하십시오. |
Forward-count | 이 큐가 현재 소비자에게 전달하는 메시지 수입니다. 런타임 시 이용 가능. |
Durable | 큐가 지속되는지 여부입니다. 지속적 서브스크립션에 대한 자세한 내용은 메시징 스타일을 참조하십시오. |
항목 | 큐가 바인딩될 JNDI 이름 목록입니다. 필수 항목입니다. |
expiry-address | 만료된 메시지를 수신할 주소입니다. 자세한 내용은 메시지 만료 구성을 참조하십시오. |
legacy-entries | 큐가 바인딩될 JNDI 이름입니다. |
message-count | 이 큐에 현재 있는 메시지 수입니다. 런타임 시 이용 가능. |
messages-added | 생성된 이후 이 큐에 추가된 메시지 수입니다. 런타임 시 이용 가능. |
일시 중지됨 | 큐가 일시 중지되었는지 여부입니다. 런타임 시 이용 가능. |
queue-address | 큐 주소는 라우팅 메시지에 사용되는 주소를 정의합니다. 주소 설정에 대한 자세한 내용은 주소 설정 구성을 참조하십시오. 필수 항목입니다. |
Scheduled-count | 이 큐에서 예약된 메시지 수입니다. 런타임 시 이용 가능. |
선택기 | 대기열 선택기입니다. 선택기에 대한 자세한 내용은 필터 표현식 및 메시지 선택기를 참조하십시오. |
임시 | 대기열이 일시적인지 여부. 자세한 내용은 임시 대기열 및 런타임 대기열 을 참조하십시오. |
4.2. 주제 추가 링크 복사링크가 클립보드에 복사되었습니다!
주제를 추가하거나 읽는 것은 큐를 추가하는 것과 비슷합니다.
jms-topic add --topic-address=myTopic --entries=[topic/myTopic jms/topic/myTopic java:jboss/exported/jms/topic/myTopic]
jms-topic add --topic-address=myTopic --entries=[topic/myTopic jms/topic/myTopic java:jboss/exported/jms/topic/myTopic]
주제 속성 읽기
topic 속성 읽기에는 큐에 사용된 것과 유사한 구문도 있습니다.
jms-topic read-resource --topic-address=myTopic entries topic/myTopic jms/topic/myTopic java:jboss/exported/jms/topic/myTopic legacy-entries=n/a
jms-topic read-resource --topic-address=myTopic
entries
topic/myTopic jms/topic/myTopic java:jboss/exported/jms/topic/myTopic
legacy-entries=n/a
jms-topic
의 속성
관리 CLI는 다음 명령에 따라 jms-topic
구성 요소의 모든 속성을 표시합니다.
/subsystem=messaging-activemq/server=default/jms-topic=*:read-resource-description()
/subsystem=messaging-activemq/server=default/jms-topic=*:read-resource-description()
아래 표에는 jms-topic
:
속성 | 설명 |
---|---|
Forward-count | 이 큐가 현재 소비자에게 전달하는 메시지 수입니다. 런타임 시 이용 가능. |
durable-message-count | 이 항목의 모든 지속적 구독자에 대한 메시지 수입니다. 런타임 시 이용 가능. |
durable-subscription-count | 이 항목의 지속적 서브스크립션 가입 수. 런타임 시 이용 가능. |
항목 | 주제가 바인딩될 JNDI 이름입니다. 필수 항목입니다. |
legacy-entries | 주제가 바인딩될 레거시 JNDI 이름입니다. |
message-count | 이 큐에 현재 있는 메시지 수입니다. 런타임 시 이용 가능. |
messages-added | 생성된 이후 이 큐에 추가된 메시지 수입니다. 런타임 시 이용 가능. |
non-durable-message-count | 이 항목에 대한 비내구성 구독자에 대한 메시지 수입니다. 런타임 시 이용 가능. |
비내림-서브스크립션-count | 이 주제에 대한 비내구성 구독자 수. 런타임 시 이용 가능. |
subscription-count | 이 주제의 (내구성 및 비내구성) 구독자 수. 런타임 시 이용 가능. |
임시 | 주제가 일시적인지 여부. |
topic-address | 주제가 가리키는 주소입니다. 필수 항목입니다. |
4.3. JNDI 항목 및 클라이언트 링크 복사링크가 클립보드에 복사되었습니다!
원격 클라이언트가 조회할 수 있으려면 큐 또는 토픽을 java:jboss/exported
네임스페이스에 바인딩해야 합니다. 클라이언트는 조회를 수행할 때 java:jboss/exported/
뒤의 텍스트를 사용해야 합니다. 예를 들어 testQueue
라는 큐에는 jms/queue/test java:jboss/exported/jms/queue/test
목록에 대한 항목이
있습니다. testQueue
에 메시지를 보내려는 원격 클라이언트는 jms/queue/test
문자열을 사용하여 큐를 조회합니다. 반면 로컬 클라이언트는 java:jboss/exported/jms/queue/test,
java:jms/queue/test
또는 더 간단히 jms/queue/test
를 사용하여 검색할 수 있습니다.
관리 CLI 도움말
--help --commands
플래그를 사용하여 jms-queue
및 jms-topic
명령에 대한 자세한 정보를 찾을 수 있습니다.
jms-queue --help --commands
jms-queue --help --commands
jms-topic --help --commands
jms-topic --help --commands
4.4. 관리 API를 사용하여 자카르타 메시징 주제에 대한 일시 중지 방법 링크 복사링크가 클립보드에 복사되었습니다!
모든 소비자를 일시 중지하여 주제를 일시 중지할 수 있습니다. 주제가 일시 중지되는 동안 등록된 새 서브스크립션이 있는 경우 해당 항목도 일시 중지됩니다.
주제의 구독자는 일시 중지된 주제에서 새 메시지를 받지 않습니다. 그러나 일시 중지된 주제는 계속 전송된 메시지를 수신할 수 있습니다. 주제를 다시 시작하면 대기 중인 메시지가 구독자에게 전달됩니다.
persist
매개 변수를 사용하여 브로커를 다시 시작해야도 주제의 상태를 저장할 수 있습니다.
4.5. 주제 일시 중지 링크 복사링크가 클립보드에 복사되었습니다!
주제의 모든 구독자가 일시 중지된 주제에서 새 메시지를 수신하지 못하도록 주제를 일시 중지할 수 있습니다.
절차
다음 예에 표시된 대로 주제를 일시 중지합니다.
/subsystem=messaging-activemq/server=default/jms-topic=topic:pause() { "outcome" => "success", "result" => undefined }
/subsystem=messaging-activemq/server=default/jms-topic=topic:pause() { "outcome" => "success", "result" => undefined }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 일시 중지된 주제는 다음 예에 나와 있습니다.
/subsystem=messaging-activemq/server=default/jms-topic=topic:read-attribute(name=paused) { "outcome" => "success", "result" => true }
/subsystem=messaging-activemq/server=default/jms-topic=topic:read-attribute(name=paused) { "outcome" => "success", "result" => true }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6. 주제 다시 시작 링크 복사링크가 클립보드에 복사되었습니다!
일시 중지된 주제를 다시 시작할 수 있습니다. 주제를 다시 시작하면 일시 중지된 동안 수신한 주제가 서브스크립션자에게 전달됩니다.
절차
다음 예에 표시된 대로 주제를 다시 시작합니다.
/subsystem=messaging-activemq/server=default/jms-topic=topic:resume() { "outcome" => "success", "result" => undefined }
/subsystem=messaging-activemq/server=default/jms-topic=topic:resume() { "outcome" => "success", "result" => undefined }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 재개된 주제는 다음 예에 나와 있습니다.
/subsystem=messaging-activemq/server=default/jms-topic=topic:read-attribute(name=paused) { "outcome" => "success", "result" => false }
/subsystem=messaging-activemq/server=default/jms-topic=topic:read-attribute(name=paused) { "outcome" => "success", "result" => false }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5장. 로깅 구성 링크 복사링크가 클립보드에 복사되었습니다!
org.apache.
하위 시스템에 대한 activemq
의 JBoss EAP 로깅 하위 시스템에서 로그 범주를 추가하고 원하는 로그 수준을 설정하여 messaging-activemq로깅
을 구성할 수 있습니다. 로그 메시지가 기록되는 방법을 구성하도록 범주의 로그 핸들러를 구성할 수도 있습니다.
XA 트랜잭션에 관한 로그에 대한 자세한 정보를 보려면 com.arspringa 카테고리
의 로그 수준을 TRACE
또는 DEBUG
와 같은 보다 자세한 설정으로 변경합니다.
범주 및 기타 옵션에 대한 구성을 비롯한 로깅에 대한 자세한 내용은 JBoss EAP 구성 가이드의 로깅 섹션을 참조하십시오.
로그를 원하는 경우… | 이 카테고리를 사용하십시오... |
---|---|
XA 트랜잭션 | com.arllya |
모든 메시징 활동 | org.apache.activemq |
메시징 저널 호출 전용 | org.apache.activemq.artemis.journal |
자카르타 메시징 호출 전용 | org.apache.activemq.artemis.jms |
메시징 utils 호출만 | org.apache.activemq.artemis.utils |
메시징 코어 서버 전용 | org.apache.activemq.artemis.core.server |
로깅을 위한 클라이언트 구성
다음 단계에 따라 메시징 클라이언트를 구성합니다.
JBoss Jakarta Messaging 클라이언트 및 로그 관리자에 종속 항목을 다운로드합니다.
Maven을 사용하는 경우
pom.xml 파일에 다음 종속성을 추가합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 로거에 대한 속성 파일을 만듭니다. 이름을
logging.properties
로 지정하고 알려진 위치에 저장합니다. 다음은 예제 속성 파일입니다. 클라이언트 측의 로깅 옵션 구성에 대한 자세한 내용은 JBoss EAP 개발 가이드 의 로깅 섹션을 참조하십시오.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예상되는 매개 변수로 클라이언트를 시작합니다.
java
명령을 사용하여 클라이언트 코드를 시작하는 경우 다음 매개변수를 추가합니다.JBoss 클라이언트 및 로거 JAR을 클래스 경로에 추가합니다.
-cp /PATH/TO/jboss-client.jar:/PATH/TO/jboss-logmanager.jar
-cp /PATH/TO/jboss-client.jar:/PATH/TO/jboss-logmanager.jar
Copy to Clipboard Copied! Toggle word wrap Toggle overflow JBoss 로깅 관리자를 활성화합니다.
-Djava.util.logging.manager=org.jboss.logmanager.LogManager
-Djava.util.logging.manager=org.jboss.logmanager.LogManager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 로깅 속성 파일의 위치를 설정합니다.
-Dlogging.configuration=/PATH/TO/logging.properties
-Dlogging.configuration=/PATH/TO/logging.properties
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
클라이언트를 시작하는 전체 명령은 다음 예와 같이 표시됩니다.
java -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Dlogging.configuration=/PATH/TO/logging.properties -cp /PATH/TO/jboss-client.jar:/PATH/TO/jboss-logmanager.jar org.example.MyClient
$ java -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Dlogging.configuration=/PATH/TO/logging.properties -cp /PATH/TO/jboss-client.jar:/PATH/TO/jboss-logmanager.jar org.example.MyClient
6장. 주소 설정 링크 복사링크가 클립보드에 복사되었습니다!
messaging-activemq
하위 시스템에는 메시지 전달 방법 및 시기, 수행해야 하는 시도 수 및 메시지가 만료되는 시기를 제어하는 여러 구성 가능한 옵션이 있습니다. 이러한 구성 옵션은 모두 <address-setting>
구성 요소 내에 있습니다. 와일드카드 구문을 사용하여 단일 <address-setting>
을 여러 대상에 적용하도록 JBoss EAP를 구성할 수 있습니다.
6.1. 와일드카드 구문 링크 복사링크가 클립보드에 복사되었습니다!
와일드카드를 사용하면 별표 문자인 *
를 사용하는 시스템 수와 마찬가지로 단일 문과 유사한 주소를 일치시켜 여러 파일이나 문자열과 단일 쿼리를 일치시킬 수 있습니다. 다음 테이블에는 <address-setting>
을 정의하는 데 사용할 수 있는 특수 문자가 나열되어 있습니다.
문자 | 설명 |
---|---|
. (단일 기간) | 와일드카드 표현식에서 단어 간 공백을 나타냅니다. |
# (플래드 또는 해시 기호) | 는 0개 이상의 단어로 이루어진 모든 시퀀스와 일치합니다. |
* (별표) | 단일 단어와 일치합니다. |
아래 표의 예제에서는 주소 집합과 일치하도록 와일드카드를 사용하는 방법을 보여줍니다.
예제 | 설명 |
---|---|
news.europe. # |
|
뉴스.* |
|
news.*.sport |
|
6.2. 기본 address-setting 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 JBoss EAP에는 messaging
요소가 포함되어 있습니다.
-activemq 하위 시스템에 대한 구성의 일부로 단일 address-
setting
name
속성에 단일 #
을 사용하면 #
이 모든 주소와 일치하므로 이 기본 address-setting
이 모든 대상에 사용되는 구성을 설정합니다. 이러한 범용 구성을 모든 주소에 계속 적용하거나, 자체 구성 세트가 필요한 각 주소 또는 주소 그룹에 대해 새 address-setting
을 추가할 수 있습니다.
관리 CLI를 사용하여 주소 설정 구성
주소 설정 구성은 관리 CLI 또는 관리 콘솔을 사용하여 수행되지만 관리 CLI는 편집을 위해 더 많은 구성 특성을 노출합니다. 속성 전체 목록은 이 가이드의 부록에 있는 Address Setting Attributes 를 참조하십시오.
새 address-setting 추가
필요한 경우 add
작업을 사용하여 새 주소 설정을 생성합니다. 관리 CLI 세션의 루트에서 이 명령을 실행할 수 있습니다. 다음 예제에서는 이라고 하는 새 패턴을 생성합니다. address-setting
에 대한 구성 속성을 포함할 수 있습니다. 아래에는 이전에 생성된 DLQ
과 일치하는 새로운 .news 대기열로 설정된
#dead-letter-address
특성으로 news.europe.address-setting
이 생성됩니다. full
프로필을 사용하는 독립 실행형 서버와 관리형 서버 도메인의 예는 각각 표시됩니다.
/subsystem=messaging-activemq/server=default/address-setting=news.europe.#/:add(dead-letter-address=DLQ.news)
/subsystem=messaging-activemq/server=default/address-setting=news.europe.#/:add(dead-letter-address=DLQ.news)
/profile=full/subsystem=messaging-activemq/server=default/address-setting=news.europe.#/:add(dead-letter-address=DLQ.news)
/profile=full/subsystem=messaging-activemq/server=default/address-setting=news.europe.#/:add(dead-letter-address=DLQ.news)
address-setting 특성 편집
write-attribute
작업을 사용하여 속성에 새 값을 씁니다. 탭 완성 기능을 사용하여 입력할 때 명령 문자열을 완료하고 사용 가능한 특성을 노출할 수 있습니다. 다음 예제에서는 max-delivery-attempts
값을 10
으로 업데이트합니다.
/subsystem=messaging-activemq/server=default/address-setting=news.europe.#/:write-attribute(name=max-delivery-attempts,value=10)
/subsystem=messaging-activemq/server=default/address-setting=news.europe.#/:write-attribute(name=max-delivery-attempts,value=10)
/profile=full/subsystem=messaging-activemq/server=default/address-setting=news.europe.#/:write-attribute(name=max-delivery-attempts,value=10)
/profile=full/subsystem=messaging-activemq/server=default/address-setting=news.europe.#/:write-attribute(name=max-delivery-attempts,value=10)
address-setting 속성 읽기
서버 모델에서 활성 상태의 현재 값을 모두 표시하도록 include
작업을 실행하여 값이 변경되었는지 확인합니다.
-runtime=true
매개 변수로 read-resource
/subsystem=messaging-activemq/server=default/address-setting=news.europe.#/:read-resource(include-runtime=true)
/subsystem=messaging-activemq/server=default/address-setting=news.europe.#/:read-resource(include-runtime=true)
/profile=full/subsystem=messaging-activemq/server=default/address-setting=news.europe.#/:read-resource(include-runtime=true)
/profile=full/subsystem=messaging-activemq/server=default/address-setting=news.europe.#/:read-resource(include-runtime=true)
관리 콘솔을 사용하여 주소 설정 구성
관리 콘솔을 사용하여 다음 단계에 따라 주소 설정을 생성하고 검토할 수 있습니다.
- 관리 콘솔에 로그인합니다.
- 화면 상단에서 Configuration(구성 ) 탭을 선택합니다. 관리형 도메인을 실행하는 경우 업데이트할 프로필을 선택합니다.
- Messaging (ActiveMQ) → Server 를 선택합니다.
-
메시징 서버 선택. 기본 구성에서는
default
라는 하나의 서버만 표시됩니다. - Destinations (대상)를 선택하고 View(보기 )를 클릭합니다.
- Address Setting(주소 설정 ) 탭을 선택하여 주소 설정을 구성합니다.
새 패턴을 추가할 때(예: news.europe.#
) Pattern 필드는 address-setting
요소의 name
속성을 참조합니다. 관리 CLI를 사용하여 속성을 읽거나 쓸 때 이 값을 입력합니다.
관리 콘솔을 사용하는 동안 dead-letter-address
,expiry-address
,redelivery-delay
, max-delivery-attempts
특성만 편집할 수 있습니다. 다른 속성은 관리 CLI를 사용하여 구성해야 합니다.
메시징 서버에 대한 글로벌 리소스 사용 구성
address-setting
요소의 세 가지 속성은 메시징 서버의 글로벌 리소스 사용량을 제어하는 데 도움이 됩니다.
속성 | 설명 |
---|---|
|
Artemis가 전체로 간주되고 address |
|
Artemis가 파일 시스템에 데이터를 저장하는 데 사용할 수 있는 최대 공간을 제어합니다. 제한에 도달하면 새 메시지가 차단됩니다. 이 속성은 디스크에서 사용 가능한 공간의 백분율로 표시됩니다. 최소값은 |
|
Artemis가 파일 시스템에서 사용 가능한 공간을 확인하는 빈도를 제어합니다. 기본값은 |
6.3. last-value Queues 링크 복사링크가 클립보드에 복사되었습니다!
last-value 큐는 잘 정의된 last-value 속성에 대해 동일한 값을 가진 새 메시지를 큐에 배치할 때 메시지를 삭제하는 특수 대기열입니다. 즉, last-value 큐는 마지막 값만 유지합니다. 마지막 값 큐의 일반적인 적용에는 특정 주식의 최신 가격에만 관심이 있는 주가가 포함될 수 있습니다.
큐에 페이징이 활성화된 경우 last-value 큐가 예상대로 작동하지 않습니다. last-value 큐를 사용하기 전에 페이징을 비활성화해야 합니다.
마지막 값 대기열 구성
last-value 큐는 address-setting
구성 요소 내에 정의됩니다.
<address-setting name="jms.queue.lastValueQueue" last-value-queue="true" />
<address-setting name="jms.queue.lastValueQueue" last-value-queue="true" />
관리 CLI를 사용하여 지정된 address
값을 읽습니다.
-setting의 last-value-
queue
/subsystem=messaging-activemq/server=default/address-setting=news.europe.#:read-attribute(name=last-value-queue) { "outcome" => "success", "result" => false }
/subsystem=messaging-activemq/server=default/address-setting=news.europe.#:read-attribute(name=last-value-queue)
{
"outcome" => "success",
"result" => false
}
last-value-queue
에 대해 허용되는 값은 true
또는 false입니다
. 관리 CLI를 사용하여 다음과 같은 값을 설정합니다.
/subsystem=messaging-activemq/server=default/address-setting=news.europe.#:write-attribute(name=last-value-queue,value=true) /subsystem=messaging-activemq/server=default/address-setting=news.asia.#:write-attribute(name=last-value-queue,value=false)
/subsystem=messaging-activemq/server=default/address-setting=news.europe.#:write-attribute(name=last-value-queue,value=true)
/subsystem=messaging-activemq/server=default/address-setting=news.asia.#:write-attribute(name=last-value-queue,value=false)
Last-value 속성 사용
마지막 값을 식별하는 데 사용되는 속성 이름은 _AMQ_LVQ_NAME
(또는 코어 API에서 상수 Message.HDR_LAST_VALUE_NAME
)입니다. 다음 Java 코드가 last-value 속성을 사용하는 방법을 설명하도록 합니다.
- 먼저 게시자는 마지막 값 큐로 메시지를 보냅니다.
TextMessage message = session.createTextMessage("My 1st message with the last-value property set"); message.setStringProperty("_AMQ_LVQ_NAME", "MY_MESSAGE"); producer.send(message);
TextMessage message = session.createTextMessage("My 1st message with the last-value property set");
message.setStringProperty("_AMQ_LVQ_NAME", "MY_MESSAGE");
producer.send(message);
- 그런 다음 동일한 last-value를 사용하여 다른 메시지를 큐로 보냅니다.
message = session.createTextMessage("My 2nd message with the last-value property set"); message.setStringProperty("_AMQ_LVQ_NAME", "MY_MESSAGE"); producer.send(message);
message = session.createTextMessage("My 2nd message with the last-value property set");
message.setStringProperty("_AMQ_LVQ_NAME", "MY_MESSAGE");
producer.send(message);
- 그런 다음 소비자는 last-value를 사용하여 메시지를 받습니다.
TextMessage messageReceived = (TextMessage)messageConsumer.receive(5000); System.out.format("Received message: %s\n", messageReceived.getText());
TextMessage messageReceived = (TextMessage)messageConsumer.receive(5000);
System.out.format("Received message: %s\n", messageReceived.getText());
위의 예에서 두 메시지 모두
입니다.
_AMQ_LVQ_NAME을 "
설정된 내 2 번째 메시지"MY_
MESSAGE"로 설정하고 두 번째 메시지는 첫 번째 후 대기열에서 수신되었으므로 클라이언트의 출력은 "마지막 값 속성이
7장. 보안 구성 링크 복사링크가 클립보드에 복사되었습니다!
7.1. 원격 연결 보안 링크 복사링크가 클립보드에 복사되었습니다!
7.1.1. 레거시 보안 하위 시스템 사용 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP에서 레거시 보안
하위 시스템을 사용하여 messaging-activemq
하위 시스템을 보호할 수 있습니다. 레거시 보안
하위 시스템은 레거시 보안 영역 및 도메인을 사용합니다. 보안 영역 및 보안 도메인에 대한 자세한 내용은 JBoss EAP 보안 아키텍처 가이드를 참조하십시오. messaging-activemq
하위 시스템은 ApplicationRealm
이라는 보안 영역과 other
라는 보안 도메인을 사용하도록 미리 구성되어 있습니다.
레거시 보안
하위 시스템 접근 방식은 JBoss EAP 7.0의 기본 구성입니다.
The ApplicationRealm
은 구성 파일 상단에 정의되어 있습니다.
이름에서 알 수 있듯이 ApplicationRealm
은 JBoss EAP의 모든 애플리케이션 중심 하위 시스템(예: messaging-activemq
,undertow
, ejb3
하위 시스템)에 대한 기본 보안 영역입니다. ApplicationRealm
은 로컬 파일 시스템을 사용하여 사용자 이름과 해시된 암호를 저장합니다. 편의를 위해 JBoss EAP에는 ApplicationRealm
에 사용자를 추가하는 데 사용할 수 있는 스크립트가 포함되어 있습니다. 자세한 내용은 JBoss EAP 에서 서버 보안 구성 가이드의 기본 사용자 구성을 참조하십시오.
other
보안 도메인은 messaging-activemq
와 같은 애플리케이션 관련 하위 시스템의 기본 보안 도메인입니다. 구성에서 명시적으로 선언되지 않지만 다음 관리 CLI 명령을 사용하여 messaging-activemq
하위 시스템에서 사용하는 보안 도메인을 확인할 수 있습니다.
/subsystem=messaging-activemq/server=default:read-attribute(name=security-domain) { "outcome" => "success", "result" => "other" }
/subsystem=messaging-activemq/server=default:read-attribute(name=security-domain)
{
"outcome" => "success",
"result" => "other"
}
다음이 사용되는 보안 도메인을 업데이트할 수도 있습니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=security-domain, value=mySecurityDomain)
/subsystem=messaging-activemq/server=default:write-attribute(name=security-domain, value=mySecurityDomain)
JBoss EAP 서버 보안 구성 방법 가이드에는 새 보안 영역 및 도메인을 생성하는 방법에 대한 자세한 내용이 있습니다. 지금은 다른
도메인이 구성에 어떻게 표시되는지 알 수 있습니다.
'other' 도메인은 두 개의 로그인 모듈을 인증의 수단으로 사용합니다. 첫 번째 모듈인 Remoting
은 원격 Jakarta Enterprise Bean 호출을 인증하는 반면 RealmDirect
모듈은 지정된 영역에 정의된 정보 저장소를 사용하여 사용자를 인증합니다. 이 경우 영역이 선언되지 않으므로 기본 realm ApplicationRealm
이 사용됩니다. 각 모듈에는 password-stacking
옵션이 useFirstPass
로 설정되어 있으며, 이는 인증된 사용자의 주체 이름과 암호를 저장하도록 로그인 모듈에 지시합니다. 로그인 모듈 및 옵션에 대한 자세한 내용은 JBoss EAP 로그인 모듈 참조를 참조하십시오.
역할 기반 액세스는 주소 수준에서 구성되어 있습니다. 주소에 대한 역할 기반 보안을 참조하십시오.
7.1.2. Elytron 하위 시스템 사용 링크 복사링크가 클립보드에 복사되었습니다!
elytron
하위 시스템을 사용하여 messaging-activemq
하위 시스템을 보안할 수도 있습니다. How to Configure Identity Management 가이드의 elytron
하위 시스템 사용 및 Elytron 보안 도메인을 만드는 방법에 대한 자세한 내용은 How to Configure Identity Management guide에서 확인할 수 있습니다. https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.4/html-single/how_to_configure_identity_management/index.xml#elytron_secure_apps
Elytron 보안 도메인을 사용하려면 다음을 수행합니다.
레거시 보안 도메인 정의를 해제합니다.
/subsystem=messaging-activemq/server=default:undefine-attribute(name=security-domain)
/subsystem=messaging-activemq/server=default:undefine-attribute(name=security-domain)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Elytron 보안 도메인 설정.
/subsystem=messaging-activemq/server=default:write-attribute(name=elytron-domain, value=myElytronSecurityDomain) reload
/subsystem=messaging-activemq/server=default:write-attribute(name=elytron-domain, value=myElytronSecurityDomain) reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.2.1. 관리 콘솔을 사용하여 Elytron 보안 도메인 설정 링크 복사링크가 클립보드에 복사되었습니다!
관리 콘솔을 사용하여 Elytron 보안 도메인을 설정하려면 다음을 수행합니다.
- 관리 콘솔에 액세스합니다. 자세한 내용은 JBoss EAP 구성 가이드의 관리 콘솔을 참조하십시오.
- Configuration → Subsystems → Messaging (ActiveMQ) → Server → default 로 이동하여 보기를 클릭합니다.
- Security (보안) 탭으로 이동하여 Edit(편집 )를 클릭합니다.
- Elytron Domain(Elytron 도메인 ) 값 추가 또는 편집.
- Save(저장 )를 클릭하여 변경 사항을 저장합니다.
- 변경 사항을 적용하려면 서버를 다시 로드합니다.
security-domain
또는 elytron-domain
만 정의할 수 있지만 동시에 둘 다 정의할 수는 없습니다. 둘 다 정의되지 않은 경우 JBoss EAP는 다른 레거시
보안 도메인에 매핑되는
기본값을 사용합니다.
기타
의 security-domain
7.1.3. 전송 보안 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 메시징과 함께 제공되는 기본 http-connector
는 기본적으로 보안되지 않습니다. 메시지 전송을 보호하고 지침에 따라 SSL/TLS에 대한 웹 트래픽을 활성화하여 How to Configure Server Security for JBoss EAP에서 애플리케이션에 대한 단방향 및 양방향 SSL/TLS를 구성할 수 있습니다.
메시지 전송을 보호하기 위한 위의 접근 방식은 http-acceptor
를 보호하는 데도 작동합니다.
위에서 설명한 대로 전송을 구성할 때 다음 추가 단계를 수행해야 합니다.
-
기본적으로 모든 HTTP 어셉터는 HTTP 포트에서 수신 대기하는 기본
http-listener
를 사용하도록 구성됩니다. HTTPS 포트에서 수신 대기하는https-listener
를 사용하도록 HTTP 어셉터를 구성해야 합니다. -
모든 HTTP 커넥터의
socket-binding
요소는http
대신https
를 사용하도록 업데이트해야 합니다. -
SSL/TLS를 통해 통신하는 각
http-connector
는ssl-enabled
매개 변수를true
로 설정해야 합니다. -
HTTP 커넥터를 다른 서버에 연결하는 데 사용하는 경우
trust-store
및키 저장소와 같은 관련 매개 변수를 구성해야 합니다.
http-connector
를 보호하려면 원격 커넥터 보안에 문서화된remote-connector
로 수행하는 것과 동일한 매개변수를 구성해야 합니다.
메시징 전송을 위한 어셉터 및 커넥터 구성 정보는 메시징 전송 구성을 참조하십시오.
7.1.4. 원격 커넥터 보안 링크 복사링크가 클립보드에 복사되었습니다!
기본 http-connector
를 사용하지 않고 대신 TCP 통신 용
생성한 경우 아래 표의 속성을 사용하여 SSL/TLS에 대해 각각 구성할 수 있습니다. 속성은 구성에서 어셉터 또는 커넥터의 하위 원격 연결기 및
원격 어셉터를<param>
요소의 일부로 표시됩니다.
일반적으로 서버는 개인 SSL/TLS 키를 소유하고 해당 공개 키를 클라이언트와 공유합니다. 이 시나리오에서 서버는 remote- acceptor에
매개 변수를 정의합니다. 각 클라이언트에는 다른 위치에 있는 truststore가 있을 수 있고 다른 암호로 암호화될 수 있으므로 key-store
password-path
및 key-store-remote-connector
에 trust-store-path
및 trust-store-password
속성을 지정하는 것은 권장되지 않습니다. 대신 시스템 속성 javax.net.ssl.trustStore 및
를 사용하여 클라이언트 측에서 이러한 매개 변수를 구성합니다. javax.net.ssl.trustStore
Passwordremote-connector
에 대해 구성해야 하는 매개변수는 ssl-enabled=true
이고 DefaultSslContext=true를 사용합니다
. 그러나 서버가 remote-connector
를 사용하여 다른 서버에 연결하는 경우 remote-connector
의 trust-store-path
및 trust-store-password
매개변수를 설정하는 것이 좋습니다.
위의 사용 사례에서는 다음 관리 CLI 명령을 사용하여 remote-acceptor
를 생성합니다.
/subsystem=messaging-activemq/server=default/remote-acceptor=mySslAcceptor:add(socket-binding=netty,params={ssl-enabled=true, key-store-path=PATH/TO/server.jks, key-store-password=${VAULT::server-key::key-store-password::sharedKey}})
/subsystem=messaging-activemq/server=default/remote-acceptor=mySslAcceptor:add(socket-binding=netty,params={ssl-enabled=true, key-store-path=PATH/TO/server.jks, key-store-password=${VAULT::server-key::key-store-password::sharedKey}})
위의 사용 사례에서 remote-connector
를 생성하려면 다음 관리 CLI 명령을 사용합니다.
/subsystem=messaging-activemq/server=default/remote-connector=mySslConnector:add(socket-binding=netty,params={ssl-enabled=true, useDefaultSslContext=true})
/subsystem=messaging-activemq/server=default/remote-connector=mySslConnector:add(socket-binding=netty,params={ssl-enabled=true, useDefaultSslContext=true})
관리 CLI를 사용하면 기존 remote -acceptor 또는
에 매개변수를 추가할 수도 있습니다.
remote-
connector
/subsystem=messaging-activemq/server=default/remote-connector=myOtherSslConnector:map-put(name=params,key=ssl-enabled,value=true)
/subsystem=messaging-activemq/server=default/remote-connector=myOtherSslConnector:map-put(name=params,key=ssl-enabled,value=true)
remote-acceptor
및 remote-connector
는 모두 socket-binding
을 참조하여 통신에 사용할 포트를 선언합니다. 소켓 바인딩 및 어셉터 및 커넥터와 의 관계는 메시징 하위 시스템 구성 개요 를 참조하십시오.
속성 | 설명 |
---|---|
enabled-cipher-suites | 를 사용하여 어셉터 또는 커넥터를 구성할 수 있습니다. SSL/TLS 통신에 사용되는 암호화 제품군의 쉼표로 구분된 목록입니다. 기본값은 null이며 JVM의 기본값이 사용됩니다. |
enabled-protocols | 를 사용하여 어셉터 또는 커넥터를 구성할 수 있습니다. SSL/TLS 통신에 사용되는 쉼표로 구분된 프로토콜 목록입니다. 기본값은 null이며 JVM의 기본값이 사용됩니다. |
key-store-password |
어셉터에서 사용하는 경우 이는 서버 측 키 저장소의 암호입니다. |
key-store-path |
어셉터에서 사용하는 경우 서버의 인증서를 보유한 서버의 SSL/TLS 키 저장소에 대한 경로입니다. 자체 서명 또는 기관에서 서명한 인증서에는 를 사용합니다. |
key-store-provider | 키가 저장되는 파일의 형식을 정의합니다(예: PKCS11 또는 PKCS12). 허용되는 값은 JDK에 따라 다릅니다. |
needs-client-auth |
이 속성은 어셉터 전용입니다. 이 어셉터에 연결하는 클라이언트에 양방향 SSL/TLS가 필요함을 알려줍니다. 유효한 값은 |
SSL 지원 |
SSL/TLS를 사용하려면 |
trust-store-password |
어셉터에서 사용하는 경우 서버 측 신뢰 저장소의 암호입니다. 이는 양방향 SSL/TLS를 사용하는 경우에만 어셉터와 관련이 있습니다. |
trust-store-path |
어셉터에서 사용하는 경우 서버가 신뢰하는 모든 클라이언트의 키를 포함하는 서버 측 SSL/TLS 키 저장소의 경로입니다. 이는 양방향 SSL/TLS를 사용하는 경우에만 어셉터와 관련이 있습니다. |
trust-store-provider | 키가 저장되는 파일의 형식을 정의합니다(예: PKCS11 또는 PKCS12). 허용되는 값은 JDK에 따라 다릅니다. |
7.2. 대상 보안 링크 복사링크가 클립보드에 복사되었습니다!
메시징 서버에 대한 원격 연결 보안 외에도 특정 대상에 대한 보안을 구성할 수도 있습니다. 이는 security-setting 구성 요소를 사용하여 보안
제한 조건을 추가하여 수행됩니다. JBoss EAP 메시징은 다음 관리 CLI 명령의 출력에 표시된 대로 기본적으로 구성된 security-setting
과 함께 제공됩니다.
security-setting
옵션은 이름
필드에 와일드카드를 사용하여 보안 제약 조건을 적용할 대상을 처리합니다. 단일 #
의 값은 모든 주소와 일치합니다. 보안 제약 조건에서 와일드카드 사용에 대한 자세한 내용은 주소에 대한 역할 기반 보안을 참조하십시오.
7.2.1. 주소에 대한 역할 기반 보안 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 메시징에는 주소를 기반으로 큐에 보안을 적용하기 위한 유연한 역할 기반 보안 모델이 포함되어 있습니다.
핵심 JBoss EAP 메시징 서버는 주로 주소에 바인딩된 큐 세트로 구성됩니다. 메시지가 주소로 전송되면 서버는 먼저 해당 주소에 바인딩된 큐 집합을 조회한 다음 메시지를 바인딩된 큐로 라우팅합니다.
JBoss EAP 메시징에는 주소에 따라 큐에 적용할 수 있는 권한 집합이 있습니다. 주소의 정확한 문자열 일치를 사용하거나 와일드카드 일치를 사용할 수 있습니다. 와일드카드 문자 #
및 *
. 와일드카드 구문 을 사용하는 방법에 대한 자세한 내용은 주소 설정을 참조하십시오.
각 security-setting
에 대해 여러 역할을 만들 수 있으며 역할에 적용할 수 있는 7개의 권한 설정이 있습니다. 다음은 사용 가능한 전체 권한 목록입니다.
-
create-durable-queue
를 사용하면 역할이 일치하는 주소 아래에 지속형 큐를 만들 수 있습니다. -
delete-durable-queue
를 사용하면 역할이 일치하는 주소 아래의 지속형 큐를 삭제할 수 있습니다. -
create-non-durable-queue
를 사용하면 역할이 일치하는 주소 아래에 비내구성 대기열을 만들 수 있습니다. -
delete-non-durable-queue
를 사용하면 역할에서 일치하는 주소에서 비내구성 큐를 삭제할 수 있습니다. -
send
를 사용하면 역할이 일치하는 주소로 메시지를 보낼 수 있습니다. -
를
사용하면 역할에서 일치하는 주소에 바인딩된 큐의 메시지를 사용할 수 있습니다. -
manage
를 사용하면 관리 메시지를 관리 주소로 보내 관리 작업을 호출할 수 있습니다.
역할 기반 보안 구성
security-setting에 역할 기반 보안을
사용하려면 먼저 하나를 만들어야 합니다. 예를 들어, 아래에 news.europe.#
의 security-setting
이 생성됩니다. news.europe. fr 또는
로 시작하는 모든 목적지에 적용됩니다.
news.europe.
tech.uk와 같이 news.europe.
fr
/subsystem=messaging-activemq/server=default/security-setting=news.europe.#:add() {"outcome" => "success"}
/subsystem=messaging-activemq/server=default/security-setting=news.europe.#:add()
{"outcome" => "success"}
그런 다음 생성한 security-setting
에 역할을 추가하고 권한을 선언합니다. 아래 예제에서 dev
역할은 생성되고 사용할 수 있는 권한을 부여하고, 큐로 보내고, 보류 불가능한 큐를 만들고 삭제할 수 있습니다. 기본값은 false
이므로 전환하려는 권한에 대해서만 JBoss EAP에 알려야 합니다.
/subsystem=messaging-activemq/server=default/security-setting=news.europe.#/role=dev:add(consume=true,delete-non-durable-queue=true,create-non-durable-queue=true,send=true) {"outcome" => "success"}
/subsystem=messaging-activemq/server=default/security-setting=news.europe.#/role=dev:add(consume=true,delete-non-durable-queue=true,create-non-durable-queue=true,send=true)
{"outcome" => "success"}
권한 사용을 자세히 설명하기 위해 아래 예제에서는 admin
역할을 만들고 관리 권한을 전환하여 관리 메시지를 보낼 수
있습니다. 지속형 큐 생성 및 삭제 권한도 전환됩니다.
/subsystem=messaging-activemq/server=default/security-setting=news.europe.#/role=admin:add(manage=true,create-durable-queue=true,delete-durable-queue=true) {"outcome" => "success"}
/subsystem=messaging-activemq/server=default/security-setting=news.europe.#/role=admin:add(manage=true,create-durable-queue=true,delete-durable-queue=true)
{"outcome" => "success"}
security-setting
의 구성을 확인하려면 관리 CLI를 사용합니다. recursive=true
옵션을 사용하여 전체 권한 표시를 가져오십시오.
위의 문자열 news.europe.
로 시작하는 주소에 대한 권한은 관리 CLI에 의해 완전히 표시됩니다. 요약하자면, 관리자
역할이 있는 사용자만 지속형 큐를 생성하거나 삭제할 수 있지만 dev
역할이 있는 사용자만 비내구성 큐를 생성하거나 삭제할 수 있습니다. 또한 dev
역할의 사용자는 메시지를 보내거나 사용할 수 있지만 admin
사용자는 메시지를 보내거나 사용할 수 없습니다. 그러나 관리 권한이
true
로 설정되어 있으므로 관리 메시지를 보낼 수 있습니다.
둘 이상의 일치가 주소 집합에 적용되는 경우 더 구체적인 일치가 우선합니다. 예를 들어, news.europe.tech.uk.#
주소는 news.europe.tech.#
보다 구체적입니다. 권한이 상속되지 않기 때문에 단순히 지정하지 않고 보다 구체적인 security-setting
블록에서 권한을 거부할 수 있습니다. 그렇지 않으면 주소의 하위 그룹에서 권한을 거부할 수 없습니다.
사용자와 사용자가 보유한 역할 간의 매핑은 보안 관리자가 처리합니다. JBoss EAP는 디스크의 파일에서 사용자 자격 증명을 읽고 JAAS 또는 JBoss EAP 보안에도 연결할 수 있는 사용자 관리자와 함께 제공됩니다.
보안 관리자 구성에 대한 자세한 내용은 JBoss EAP 보안 아키텍처 가이드를 참조하십시오.
7.2.1.1. 레거시 보안 하위 시스템을 사용하여 인증되지 않은 클라이언트에 게스트 역할 부여 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP에서 인증되지 않은 클라이언트를 자동으로 부여하려면 guest
역할에서 다음 두 가지 변경 사항을 수행합니다.
other
보안 도메인에 새module-option
을 추가합니다. 새 옵션인unauthenticatedIdentity
는 JBoss EAP에 인증되지 않은 클라이언트에게스트
액세스 권한을 부여하도록 지시합니다. 이 작업을 수행하는 권장 방법은 관리 CLI를 사용하는 것입니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령을 실행한 후 서버에 다시 로드해야 합니다. 다음 관리 CLI 명령을 사용하여 새 옵션을 확인할 수 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 또한 서버 구성 파일은 명령이 실행된 후 다음과 같이 표시되어야 합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow #
문자를 삭제하여 파일application-roles.properties
에서 다음 행의 주석을 제거합니다. 파일은 독립 실행형 서버 또는 도메인 컨트롤러를 사용하는지 여부에 따라EAP_HOME/standalone/configuration
/ 또는 EAP_HOME/domain#guest=guest
#guest=guest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
이제 원격 클라이언트가 인증하지 않고도 서버에 액세스할 수 있어야 합니다. guest
역할과 연결된 권한이 부여됩니다.
7.3. 자카르타 메시징 개체 메시지 분리 제어 링크 복사링크가 클립보드에 복사되었습니다!
ObjectMessage
에는 잠재적으로 위험한 개체가 포함될 수 있으므로 ActiveMQ Artemis는 신뢰할 패키지 및 클래스를 제어하기 위한 간단한 클래스 필터링 메커니즘을 제공합니다. 클래스가 신뢰할 수 있는 패키지인 오브젝트를 허용 목록에 추가하여 문제 없이 역직렬화할 수 있음을 나타낼 수 있습니다. 클래스가 신뢰할 수 없는 패키지의 오브젝트를 블랙 목록에 추가하여 직렬화되지 않도록 할 수 있습니다.
ActiveMQ Artemis는 다음과 같이 직렬화를 위한 오브젝트를 필터링합니다.
- 허용 목록과 차단 목록이 비어 있으면 기본값인 모든 serializable 오브젝트를 역직렬화할 수 있습니다.
- 오브젝트의 클래스 또는 패키지가 차단 목록의 항목 중 하나와 일치하는 경우 역직렬화할 수 없습니다.
- 오브젝트의 클래스 또는 패키지가 화이트 목록의 항목과 일치하는 경우 역직렬화할 수 있습니다.
- 오브젝트의 클래스 또는 패키지가 블랙 목록과 허용 목록의 항목과 일치하면 차단 목록의 항목이 우선합니다. 즉, 역직렬화할 수 없습니다.
- 오브젝트의 클래스 또는 패키지가 차단 목록이나 화이트 목록과 일치하지 않는 경우 허용 목록이 비어 있지 않은 경우 오브젝트 역직렬화가 거부됩니다. 즉, 화이트 목록이 지정되지 않습니다.
전체 이름이 목록의 항목 중 하나와 정확히 일치하는 경우, 패키지가 목록의 항목 중 하나와 일치하는 경우 또는 목록에 있는 항목 중 하나의 하위 패키지인 경우 개체가 일치하는 것으로 간주됩니다.
연결 팩토리와 역직렬화-
. white-list 및 역직렬화-
검정 목록 속성을 사용하여
에서 역직렬화할 수 있는 오브젝트를 지정할 수 있습니다pooled-connection-
factory직렬화-white-list 특성은 역직렬
화할 수 있는 클래스 또는 패키지 목록을 정의하는 데 사용됩니다. deserialization-black-list
특성은 역직렬화할 수 없는 클래스 또는 패키지 목록을 정의하는 데 사용됩니다.
다음 명령은 RemoteConnectionFactory
연결 팩토리의 블랙리스트와 기본 서버에 대한 the activemq-ra
풀링된 연결 팩토리의 화이트 목록을 생성합니다.
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=deserialization-black-list,value=[my.untrusted.package,another.untrusted.package]) /subsystem=messaging-activemq/server=default/pooled-connection-factory=activemq-ra:write-attribute(name=deserialization-white-list,value=[my.trusted.package])
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=deserialization-black-list,value=[my.untrusted.package,another.untrusted.package])
/subsystem=messaging-activemq/server=default/pooled-connection-factory=activemq-ra:write-attribute(name=deserialization-white-list,value=[my.trusted.package])
이러한 명령은 messaging-activemq
하위 시스템에서 다음 구성을 생성합니다.
<connection-factory name="RemoteConnectionFactory" entries="java:jboss/exported/jms/RemoteConnectionFactory" connectors="http-connector" ha="true" block-on-acknowledge="true" reconnect-attempts="-1" deserialization-black-list="my.untrusted.package another.untrusted.package"/> <pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" deserialization-white-list="my.trusted.package" transaction="xa"/>
<connection-factory name="RemoteConnectionFactory" entries="java:jboss/exported/jms/RemoteConnectionFactory" connectors="http-connector" ha="true" block-on-acknowledge="true" reconnect-attempts="-1" deserialization-black-list="my.untrusted.package another.untrusted.package"/>
<pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" deserialization-white-list="my.trusted.package" transaction="xa"/>
연결 팩토리 및 풀링된 연결 팩토리에 대한 자세한 내용은 이 가이드 의 연결 팩토리 구성을 참조하십시오.
활성화 속성을 구성하여 MDB에서 역직렬화할 수 있는 오브젝트를 지정할 수도 있습니다. deserializationWhiteList
속성은 역직렬화할 수 있는 클래스 또는 패키지 목록을 정의하는 데 사용됩니다. 직렬화BlackList 속성은 역직렬
화할 수 없는 클래스 또는 패키지 목록을 정의하는 데 사용됩니다. 활성화 속성에 대한 자세한 내용은 JBoss EAP 용 Jakarta Enterprise Beans Applications 개발에서 Deployment Descriptor를 사용하여 MDB 구성을 참조하십시오.
7.4. 권한 부여 Invalidation Management 링크 복사링크가 클립보드에 복사되었습니다!
messaging
특성은 작업을 다시 인증하기 전에 권한 부여를 캐시하는 기간을 결정합니다.
-activemq 하위 시스템의 서버의 security-invalidation-
interval
시스템이 사용자에게 주소에서 작업을 수행할 수 있는 권한을 부여하면 권한 부여가 캐시됩니다. 다음에 동일한 사용자가 동일한 주소에서 동일한 작업을 수행할 때 시스템은 작업에 캐시된 권한을 사용합니다.
예를 들어 사용자 admin
은 주소 뉴스
로 메시지를 보내려고 합니다. 시스템에서 작업을 인증하고 권한을 캐시합니다. 다음에 관리자가
메시지를 뉴스
로 보내려고 하면 시스템은 캐시된 권한을 사용합니다.
잘못된 간격에 의해 지정된 시간 내에 캐시된 권한 부여가 다시 사용되지 않으면 캐시에서 인증이 지워집니다. 시스템은 요청된 주소에서 요청된 작업을 수행하도록 사용자를 다시 인증해야 합니다.
설치 후 JBoss EAP는 기본값 10000밀리초(10초)로 가정합니다.
/subsystem=messaging-activemq/server=default:read-attribute(name=security-invalidation-interval) { "outcome" => "success", "result" => 10000L }
/subsystem=messaging-activemq/server=default:read-attribute(name=security-invalidation-interval)
{
"outcome" => "success",
"result" => 10000L
}
security-invalidation-interval
특성은 구성할 수 있습니다. 예를 들어 다음 명령은 간격을 60000밀리초(60초 또는 1분)로 업데이트합니다.
구성을 수정하려면 서버를 다시 로드해야 합니다.
특성을 읽으면 새 결과가 표시됩니다.
/subsystem=messaging-activemq/server=default:read-attribute(name=security-invalidation-interval) { "outcome" => "success", "result" => 60000L }
/subsystem=messaging-activemq/server=default:read-attribute(name=security-invalidation-interval)
{
"outcome" => "success",
"result" => 60000L
}
8장. 메시징 전송 구성 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 JBoss EAP 메시징 전송을 이해하는 데 중요한 개념, 특히 커넥터 및 어셉터에 대해 설명합니다. 어셉터는 서버에서 연결을 수락하는 방법을 정의하는 데 사용되며 커넥터는 클라이언트가 서버에 연결하는 방법을 정의합니다. 각 개념은 차례로 설명된 다음 실제 예제에서는 클라이언트가 JNDI 또는 코어 API를 사용하여 JBoss EAP 메시징 서버에 연결할 수 있는 방법을 보여줍니다.
8.1. 어셉터 및 커넥터 유형 링크 복사링크가 클립보드에 복사되었습니다!
어셉터 및 커넥터의 세 가지 주요 유형은 JBoss EAP 구성에 정의되어 있습니다.
in-vm
: In-vm은 Intra Virtual Machine(가상 시스템)의 약어입니다. 클라이언트와 서버가 동일한 JVM(예: JBoss EAP의 동일한 인스턴스에서 실행되는 MDB(Message Driven Beans))에서 실행 중인 경우 이 커넥터 유형을 사용합니다.
http
: 클라이언트 및 서버가 다른 JVM에서 실행 중인 경우 사용됩니다. undertow
하위 시스템의 기본 포트를 8080
으로 사용하므로 HTTP를 통해 메시징 통신을 다중화할 수 있습니다. Red Hat은 특히 클라우드 환경에서 포트 관리와 같은 고려 사항으로 인해 클라이언트와 서버가 다른 JVM에서 실행되는 경우 http
커넥터를 사용하는 것이 좋습니다.
remote
: 원격 전송은 클라이언트와 서버가 다른 JVM에서 실행될 때 기본 TCP 통신에 사용되는 Netty 기반 구성 요소입니다. http
를 사용할 수 없을 때의 대안.
클라이언트는 서버의 어셉터 중 하나와 호환되는 커넥터를 사용해야 합니다. 예를 들어 in-vm-connector
만 in-vm-acceptor
에 연결할 수 있으며 http-connector
만 http-acceptor
에 연결할 수 있습니다.
read-children-attributes
작업을 사용하여 관리 CLI에 지정된 어셉터 또는 커넥터 유형의 속성을 나열할 수 있습니다. 예를 들어 기본 메시징 서버의 모든 http-connectors
의 속성을 보려면 다음을 입력합니다.
/subsystem=messaging-activemq/server=default:read-children-resources(child-type=http-connector,include-runtime=true)
/subsystem=messaging-activemq/server=default:read-children-resources(child-type=http-connector,include-runtime=true)
모든 http-acceptors
의 속성은 다음과 유사한 명령을 사용하여 읽습니다.
/subsystem=messaging-activemq/server=default:read-children-resources(child-type=http-acceptor,include-runtime=true)
/subsystem=messaging-activemq/server=default:read-children-resources(child-type=http-acceptor,include-runtime=true)
다른 어셉터 및 커넥터 유형은 동일한 구문을 따릅니다. 어셉터 또는 커넥터 유형(예: remote
유형을 제공합니다.
-connector 또는
)과 함께 하위in-vm-
acceptor
8.2. 어셉터 링크 복사링크가 클립보드에 복사되었습니다!
어셉터는 JBoss EAP 통합 메시징 서버에서 허용하는 연결 유형을 정의합니다. 서버당 개수의 어셉터를 정의할 수 있습니다. 아래 샘플 구성은 기본 full-ha
구성 프로필에서 수정되었으며 각 어셉터 유형의 예를 제공합니다.
위의 구성에서 http-acceptor
는 JBoss EAP의 기본 http 포트 8080에서 수신 대기하는 Undertow의 기본 http-listener
를 사용합니다. http-listener
는 undertow 하위 시스템에서
정의됩니다.
위의 remote-acceptor
가 existing- messaging
이라는 socket-binding
을 사용하는 방법도 참조하십시오. 이 이름은 서버의 기본 socket-binding-group
의 일부로 구성의 뒷부분에 정의되어 있습니다.
이 예에서 legacy-messaging
은 JBoss EAP를 포트 socket-
binding5445
에 바인드하고, 위의 remote-acceptor
는 레거시 클라이언트에서 사용할 messaging-activemq
하위 시스템을 대신하여 포트를 클레임합니다.
마지막으로 in-vm-acceptor
는 server-id
특성에 고유한 값을 사용하므로 이 서버 인스턴스를 동일한 JVM에서 실행할 수 있는 다른 서버와 구분할 수 있습니다.
8.3. 커넥터 링크 복사링크가 클립보드에 복사되었습니다!
커넥터는 통합된 JBoss EAP 메시징 서버에 연결하는 방법을 정의하며 클라이언트에서 연결을 만드는 데 사용됩니다.
클라이언트에서 실제로 커넥터를 사용할 때 커넥터가 서버에 정의된 이유에 대해 궁금할 수 있습니다. 이에 대한 이유는 다음과 같습니다.
- 경우에 따라 서버가 다른 서버에 연결할 때 클라이언트로 작동할 수 있습니다. 예를 들어 한 서버는 다른 서버로의 브리지 역할을 하거나 클러스터에 참여하려고 할 수 있습니다. 이러한 경우 서버는 다른 서버에 연결하는 방법을 알아야 하며 해당 서버는 커넥터로 정의됩니다.
-
서버는 JNDI를 사용하여 클라이언트에서 조회하는
ConnectionFactory
를 사용하여 커넥터를 제공할 수 있으므로 서버에 대한 연결을 생성하는 것이 더 간단합니다.
서버당 원하는 개수의 커넥터를 정의할 수 있습니다. 아래 샘플 구성은 full-ha
구성 프로필을 기반으로 하며 각 유형의 커넥터를 포함합니다.
full
와 마찬가지로 -ha 프로필의 http-
acceptorhttp-connector
는 undertow 하위 시스템에서
정의한 기본 http-listener
를 사용합니다. 엔드포인트
특성은 연결할 http-acceptor
를 선언합니다. 이 경우 커넥터는 기본 http-acceptor
에 연결됩니다.
JBoss EAP 7.1은 http
특성을 도입했습니다. 이 새 특성은 선택 사항이지만 두 개 이상의 ActiveMQ Artemis 인스턴스를 실행하는 원격 서버의 올바른 -connector의 새 server-
namehttp-acceptor
에 연결할 수 있어야 합니다. 이 속성이 정의되지 않은 경우 런타임 시 커넥터가 정의된 상위 ActiveMQ Artemis 서버의 이름이 되도록 값이 확인됩니다.
또한 remote -connector는 remote-
acceptor와 동일한
을 참조합니다. 마지막으로 socket-
bindingin-vm-connector
는 모두 동일한 서버 인스턴스 내부에서 실행되므로 in
-vm-acceptor
와 동일한 값을 사용합니다.
공용 인터페이스의 바인드 주소가 0.0.0.0으로
설정된 경우 JBoss EAP 서버를 시작할 때 로그에 다음 경고가 표시됩니다.
AMQ121005: Invalid "host" value "0.0.0.0" detected for "connector" connector. Switching to <HOST_NAME>. If this new address is incorrect please manually configure the connector to use the proper one.
AMQ121005: Invalid "host" value "0.0.0.0" detected for "connector" connector. Switching to <HOST_NAME>. If this new address is incorrect please manually configure the connector to use the proper one.
원격 커넥터가 0.0.0.0
주소를 사용하여 서버에 연결할 수 없고 messaging-activemq
하위 시스템이 서버의 호스트 이름으로 교체하려고 하기 때문입니다. 관리자는 소켓 바인딩에 다른 인터페이스 주소를 사용하도록 원격 커넥터를 구성해야 합니다.
8.4. Acceptor 및 커넥터 구성 링크 복사링크가 클립보드에 복사되었습니다!
커넥터와 어셉터를 위한 다양한 구성 옵션이 있습니다. 구성에 하위 <param>
요소로 표시됩니다. 각 <param>
요소에는 커넥터 또는 어셉터 인스턴스화를 담당하는 기본 Netty 기반 팩토리 클래스에서 이해하고 사용하는 name
및 value
특성 쌍이 포함되어 있습니다.
관리 CLI에서 각 원격 커넥터 또는 어셉터 요소에는 매개 변수 이름 및 값 쌍의 내부 맵이 포함됩니다. 예를 들어 myRemote
라는 remote-connector
에 새 param
을 추가하려면 다음 명령을 사용합니다.
/subsystem=messaging-activemq/server=default/remote-connector=myRemote:map-put(name=params,key=foo,value=bar)
/subsystem=messaging-activemq/server=default/remote-connector=myRemote:map-put(name=params,key=foo,value=bar)
유사한 구문을 사용하여 매개 변수 값을 검색합니다.
/subsystem=messaging-activemq/server=default/remote-connector=myRemote:map-get(name=params,key=foo) { "outcome" => "success", "result" => "bar" }
/subsystem=messaging-activemq/server=default/remote-connector=myRemote:map-get(name=params,key=foo)
{
"outcome" => "success",
"result" => "bar"
}
아래 예제와 같이 어셉터 또는 커넥터를 만들 때 매개변수를 포함할 수도 있습니다.
/subsystem=messaging-activemq/server=default/remote-connector=myRemote:add(socket-binding=mysocket,params={foo=bar,foo2=bar2})
/subsystem=messaging-activemq/server=default/remote-connector=myRemote:add(socket-binding=mysocket,params={foo=bar,foo2=bar2})
속성 | 설명 |
---|---|
batch-delay |
전송에 패킷을 작성하기 전에 메시징 서버를 구성하여 최대 배치 |
direct-deliver |
메시지가 서버에 도착하고 대기 소비자에게 전달되면 기본적으로 메시지가 도착한 동일한 스레드에서 배달됩니다. 이렇게 하면 상대적으로 작은 메시지와 적은 수의 소비자가 있는 환경에서 좋은 대기 시간이 제공되지만 처리량과 대기 시간이 줄어듭니다. 가장 높은 처리량의 경우 이 속성을 |
http-upgrade-enabled |
|
http-upgrade-endpoint |
|
local-address | http 또는 원격 커넥터의 경우 클라이언트가 원격 주소에 연결할 때 사용할 로컬 주소를 지정하는 데 사용됩니다. 로컬 주소를 지정하지 않으면 커넥터는 사용 가능한 모든 로컬 주소를 사용합니다. |
local-port |
http 또는 원격 커넥터의 경우 원격 주소에 연결할 때 클라이언트가 사용할 로컬 포트를 지정하는 데 사용됩니다. local-port 기본값(0)을 사용하면 커넥터를 통해 시스템에서 임시 포트를 선택할 수 있습니다. 유효한 포트 값은 |
nio-remoting-threads |
NIO를 사용하도록 구성된 경우 메시징은 기본적으로 들어오는 패킷을 처리하기 위해 |
tcp-no-delay |
|
tcp-send-buffer-size |
이 매개 변수는 TCP 전송 버퍼의 크기를 바이트로 결정합니다. 기본값은 |
tcp-receive-buffer-size |
이 매개 변수는 TCP 수신 버퍼의 크기를 바이트로 결정합니다. 기본값은 |
use-nio-global-worker-pool |
이 매개 변수는 자카르타 메시징 연결이 각 연결이 자체 풀을 보유하는 것이 아니라 단일 Java 스레드 풀을 공유하도록 합니다. 이렇게 하면 운영 체제에서 최대 프로세스 수가 소모되지 않도록 방지할 수 있습니다. 기본값은 |
8.5. 서버에 연결 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트를 서버에 연결하려면 적절한 커넥터가 있어야 합니다. 이 작업을 수행하는 방법에는 두 가지가 있습니다. 서버에서 구성되고 JNDI 조회를 통해 가져올 수 있는 ConnectionFactory를 사용할 수 있습니다. 또는 ActiveMQ Artemis 핵심 API를 사용하고 클라이언트 측에서 전체 ConnectionFactory
를 구성할 수 있습니다.
8.5.1. 자카르타 메시징 연결 팩트 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트는 JNDI를 사용하여 서버에 대한 연결을 제공하는 ConnectionFactory 개체를 조회할 수 있습니다. 연결 팩토리는 세 가지 유형의 커넥터를 각각 노출할 수 있습니다.
원격 연결기를 참조하는 연결
팩토리는 원격 클라이언트가 서버에서 메시지를 보내거나 받는 데 사용할 수
있습니다(connect-factory에 적절하게 내보낸 항목이 있다고 가정). remote-connector
는 connection -
과 연결됩니다.
factory를 사용하여 클라이언트에 연결할 위치를 알려주는 socket-
binding
in
팩토리는 로컬 클라이언트가 로컬 서버로 메시지를 보내거나 로컬 서버에서 메시지를 받는 데 적합합니다. -vm-connector
를 참조하는 연결in-vm-connector
는 여러 메시징 서버가 단일 JVM에서 실행될 수 있으므로 연결 할
와 연결됩니다.
connection-factory
를 사용하여 클라이언트에 알리는 server-id
http
팩토리는 원격 클라이언트가 메시징 프로토콜로 업그레이드하기 전에 HTTP 포트에 연결하여 서버에서 메시지를 보내거나 받는 데 적합합니다. -connector
를 참조하는 연결http-connector
는 HTTP 소켓을 나타내는 socket-binding
과 연결되며, 기본적으로 이름이 http
입니다.
Jakarta Messaging 2.0 이후 기본 Jakarta Messaging 연결 팩토리는 JNDI 이름 java:comp/DefaultJMSConnectionFactory
아래 Jakarta EE 애플리케이션에서 액세스할 수 있습니다. messaging-activemq
하위 시스템은 이 기본 연결 팩토리를 제공하는 데 사용되는 pooled-connection-factory
를 정의합니다.
다음은 JBoss EAP의 전체
구성 프로필에 포함된 기본 커넥터 및 연결 팩토리입니다.
팩토리의 entries
특성은 팩토리가 노출될 JNDI 이름을 지정합니다. 원격 클라이언트에는 java:jboss/exported
네임스페이스에 바인딩된 JNDI 이름만 사용할 수 있습니다. connection-factory
에 java:jboss/exported
네임스페이스에 바인딩된 항목이 있는 경우 원격 클라이언트는 java:jboss/exported
다음에 텍스트를 사용하여 connection-factory
를 조회합니다. 예를 들어 RemoteConnectionFactory
는 기본적으로 java:jboss/exported/jms/RemoteConnectionFactory
에 바인딩됩니다. 즉 원격 클라이언트가 jms/RemoteConnectionFactory
를 사용하여 이 연결 팩토리를 조회합니다. pooled-connection-factory
는 원격 클라이언트에 적합하지 않기 때문에 java:jboss/exported
네임스페이스에 바인딩 된 항목이
없어야 합니다.
8.5.2. JNDI를 사용하여 서버에 연결 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트가 서버와 동일한 JVM 내에 있는 경우 InVmConnectionFactory
에서 제공하는 in-vm
커넥터를 사용할 수 있습니다. 다음은 InvmConnectionFactory
를 구성하는 방법입니다(예: standalone-full.xml
).
<connection-factory name="InVmConnectionFactory" entries="java:/ConnectionFactory" connectors="in-vm" />
<connection-factory
name="InVmConnectionFactory"
entries="java:/ConnectionFactory"
connectors="in-vm" />
entries 속성의 값을 확인합니다
. 다음 예와 같이 InVmConnectionFactory
를 사용하는 클라이언트는 조회 중에 주요 java:/
를 삭제해야 합니다.
InitialContext ctx = new InitialContext(); ConnectionFactory cf = (ConnectionFactory)ctx.lookup("ConnectionFactory"); Connection connection = cf.createConnection();
InitialContext ctx = new InitialContext();
ConnectionFactory cf = (ConnectionFactory)ctx.lookup("ConnectionFactory");
Connection connection = cf.createConnection();
원격 클라이언트는 일반적으로 아래와 같이 구성된 RemoteConnectionFactory
를 사용합니다.
<connection-factory name="RemoteConnectionFactory" scheduled-thread-pool-max-size="10" entries="java:jboss/exported/jms/RemoteConnectionFactory" connectors="http-connector"/>
<connection-factory
name="RemoteConnectionFactory"
scheduled-thread-pool-max-size="10"
entries="java:jboss/exported/jms/RemoteConnectionFactory"
connectors="http-connector"/>
원격 클라이언트는 아래의 코드 조각 예제에 따라 항목
값의 선행 java:jboss/exported/
를 무시해야 합니다.
final Properties env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory"); env.put(Context.PROVIDER_URL, "http-remoting://remotehost:8080"); InitialContext remotingCtx = new InitialContext(env); ConnectionFactory cf = (ConnectionFactory) remotingCtx.lookup("jms/RemoteConnectionFactory");
final Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
env.put(Context.PROVIDER_URL, "http-remoting://remotehost:8080");
InitialContext remotingCtx = new InitialContext(env);
ConnectionFactory cf = (ConnectionFactory) remotingCtx.lookup("jms/RemoteConnectionFactory");
PROVIDER_URL
속성의 값과 클라이언트가 JBoss EAP http-remoting 프로토콜을 사용하는 방법을 확인합니다. 클라이언트가 org.wildfly.naming.client.WildFlyInitialContextFactory
를 사용하는 방법도 참조하십시오. 이는 클라이언트가 클래스에 있는 클라이언트 JAR을 포함하는 것입니다. maven 프로젝트의 경우 다음 종속성을 포함하여 이 작업을 수행할 수 있습니다.
8.5.3. 코어 API를 사용하여 서버에 연결 링크 복사링크가 클립보드에 복사되었습니다!
Core API를 사용하여 JNDI 조회 없이도 클라이언트 연결을 만들 수 있습니다. Core API를 사용하는 클라이언트에는 JNDI 기반 클라이언트와 마찬가지로 클래스 경로에 클라이언트 JAR이 필요합니다.
ServerLocator
클라이언트는 ServerLocator
인스턴스를 사용하여 ClientSessionFactory
인스턴스를 생성합니다. 이름에서 알 수 있듯이 ServerLocator
인스턴스는 서버를 찾고 연결을 생성하는 데 사용됩니다.
자카르타 메시징 용어에서는 자카르타 메시징 연결 팩토리와 동일한 방식으로 ServerLocator
를 생각하십시오.
ServerLocator
인스턴스는 ActiveMQClient
팩토리 클래스를 사용하여 생성됩니다.
ServerLocator locator = ActiveMQClient.createServerLocatorWithoutHA(new TransportConfiguration(InVMConnectorFactory.class.getName()));
ServerLocator locator = ActiveMQClient.createServerLocatorWithoutHA(new TransportConfiguration(InVMConnectorFactory.class.getName()));
ClientSessionFactory
클라이언트는 ClientSessionFactory
를 사용하여 기본적으로 서버 연결인 ClientSession
인스턴스를 생성합니다. 자카르타 메시징 용어에서는 이를 자카르타 메시징 연결로 간주합니다.
ClientSessionFactory
인스턴스는 ServerLocator
클래스를 사용하여 생성됩니다.
ClientSessionFactory factory = locator.createClientSessionFactory();
ClientSessionFactory factory = locator.createClientSessionFactory();
ClientSession
클라이언트는 메시지를 사용하고 생성하고 트랜잭션에 그룹화하기 위해 ClientSession
을 사용합니다. ClientSession
인스턴스는 트랜잭션 및 비 트랜잭션 의미 체계를 모두 지원할 수 있으며, 메시지 작업을 자카르타 트랜잭션 작업의 일부로 수행할 수 있도록 XAResource 인터페이스를 제공할 수도 있습니다.
ClientSession
인스턴스 그룹 ClientConsumers
및 ClientProducers
.
ClientSession session = factory.createSession();
ClientSession session = factory.createSession();
아래 간단한 예는 방금 설명한 몇 가지를 강조합니다.
8.6. 로드 밸런서를 통한 메시징 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP를 로드 밸런서 장치로 사용하는 경우 클라이언트는 정적 Undertow HTTP 로드 밸런서 또는 mod_cluster 로드 밸런서 뒤의 메시징 서버를 호출할 수 있습니다.
정적 로드 밸런서를 통해 메시징 서버를 호출하는 메시징 클라이언트를 지원하는 구성은 다음 요구 사항을 충족해야 합니다.
JBoss EAP를 로드 밸런서 장치로 사용하는 경우 HTTP 또는 HTTPS를 사용하여 로드 밸런서를 구성해야 합니다. 메시징 로드 밸런서에는 AJP가 지원되지 않습니다.
- Undertow를 정적 로드 밸런서 장치로 구성하는 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드의 Undertow를 정적 로드 밸런서로 구성에서 참조하십시오.
- 로드 밸런서 뒤에 있는 메시징 서버에서 JNDI 조회가 발생하는 경우 백엔드 메시징 작업자를 구성해야 합니다.
- 로드 밸런서 장치에 연결된 클라이언트는 동일한 서버와 통신하기 위해 로드 밸런서 장치에 대한 초기 연결을 재사용해야 합니다. 로드 밸런서에 연결하는 클라이언트는 클러스터 토폴로지를 사용하여 로드 밸런서에 연결해서는 안 됩니다. 클러스터 토폴로지를 사용하면 메시지가 다른 서버로 전송되어 트랜잭션 처리가 중단될 수 있습니다.
mod_cluster를 사용하여 Undertow를 로드 밸런서 장치로 구성하는 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드에서 mod_cluster를 사용하여 Undertow를 로드 밸런서로 구성합니다.
로드 밸런서를 통해 통신할 메시징 클라이언트 구성
로드 밸런서에 연결하는 클라이언트는 클러스터 토폴로지를 사용하여 로드 밸런서에 연결하는 대신 초기 연결을 다시 사용하도록 구성해야 합니다.
초기 연결을 다시 사용하면 클라이언트가 동일한 서버에 연결됩니다. 클러스터 토폴로지를 사용하면 메시지가 다른 서버로 전달되어 트랜잭션 처리가 중단될 수 있습니다.
로드 밸런서에 연결하는 데 사용되는 연결 팩토리 또는 풀링된 연결 팩토리는 use-topology-for-load-balancing
특성을 false로 설정하여 구성해야 합니다. 다음 예제에서는 CLI에서 이 구성을 정의하는 방법을 보여줍니다.
/subsystem=messaging-activemq/pooled-connection-factory=remote-artemis:write-attribute(name=use-topology-for-load-balancing, value=false)
/subsystem=messaging-activemq/pooled-connection-factory=remote-artemis:write-attribute(name=use-topology-for-load-balancing, value=false)
백엔드 작업자 구성
로드 밸런서 백그라운드에서 JNDI 조회를 수행하려는 경우에만 백엔드 메시징 작업자를 구성해야 합니다.
로드 밸런싱 서버를 가리키는 새 아웃바운드 소켓 바인딩을 만듭니다.
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=balancer-binding:add(host=load_balance.example.com,port=8080)
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=balancer-binding:add(host=load_balance.example.com,port=8080)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 로드 밸런싱 서버 소켓 바인딩을 참조하는 HTTP 커넥터를 생성합니다.
/subsystem=messaging-activemq/server=default/http-connector=balancer-connector:add(socket-binding=balancer-binding, endpoint=http-acceptor)
/subsystem=messaging-activemq/server=default/http-connector=balancer-connector:add(socket-binding=balancer-binding, endpoint=http-acceptor)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HTTP 커넥터를 클라이언트에서 사용하는 연결 팩토리에 추가합니다.
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=connectors,value=[balancer-connector])
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=connectors,value=[balancer-connector])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 초기 연결을 다시 사용하도록 클라이언트를 구성해야 합니다.
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=use-topology-for-load-balancing,value=false)
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=use-topology-for-load-balancing,value=false)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9장. 연결 팩트 구성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 JBoss EAP messaging-activemq
하위 시스템은 InVmConnectionFactory
및 RemoteConnectionFactory
연결 팩토리 와 a activemq-ra
풀링된 연결 팩토리를 제공합니다.
기본 연결 정보
InVmConnectionFactory
는 in-vm-connector
를 참조하며 클라이언트와 서버가 동일한 JVM에서 모두 실행 중인 경우 메시지를 보내고 받는 데 사용할 수 있습니다. RemoteConnectionFactory
는 http-connector
를 참조하며 클라이언트와 서버가 다른 JVM에서 실행될 때 HTTP를 통해 메시지를 보내고 받는 데 사용할 수 있습니다.
다양한 유형의 커넥터에 대한 자세한 내용은 Acceptors 및 Connectors 섹션을 참조하십시오.
연결 팩토리 추가
다음 관리 CLI 명령을 사용하여 새 연결 팩토리를 추가할 수 있습니다. 연결 팩토리를 추가할 때 커넥터
및 JNDI 항목을
제공해야 합니다.
/subsystem=messaging-activemq/server=default/connection-factory=MyConnectionFactory:add(entries=[java:/MyConnectionFactory],connectors=[in-vm])
/subsystem=messaging-activemq/server=default/connection-factory=MyConnectionFactory:add(entries=[java:/MyConnectionFactory],connectors=[in-vm])
연결 팩토리 구성
관리 CLI를 사용하여 연결 팩토리의 설정을 업데이트할 수 있습니다.
/subsystem=messaging-activemq/server=default/connection-factory=MyConnectionFactory:write-attribute(name=thread-pool-max-size,value=40)
/subsystem=messaging-activemq/server=default/connection-factory=MyConnectionFactory:write-attribute(name=thread-pool-max-size,value=40)
연결 팩토리에 사용 가능한 속성에 대한 자세한 내용은 연결 팩토리 속성 에서 참조하십시오.
연결 팩토리 제거
관리 CLI를 사용하여 연결 팩토리를 제거할 수 있습니다.
/subsystem=messaging-activemq/server=default/connection-factory=MyConnectionFactory:remove
/subsystem=messaging-activemq/server=default/connection-factory=MyConnectionFactory:remove
풀링된 연결 팩트
JBoss EAP messaging-activemq
하위 시스템은 통합된 ActiveMQ Artemis 리소스 어댑터의 인바운드 및 아웃바운드 커넥터를 구성할 수 있는 풀링된 연결 팩토리를 제공합니다. 원격 ActiveMQ Artemis 서버에 연결하기 위해 pooled-connection-factory
구성에 대한 자세한 내용은 원격 연결을 위한 통합 리소스 어댑터 사용을 참조하십시오.
풀링된 연결 팩토리의 몇 가지 고유한 특성이 있습니다.
- 원격 서버를 가리키도록 구성할 수 있지만 로컬 클라이언트만 사용할 수 있습니다. 원격 ActiveMQ Artemis 서버에 연결하는 방법에 대한 자세한 내용은 원격 연결을 위한 Integrated Artemis Resource Adapter 사용을 참조하십시오.
- JNDI로 조회되거나 삽입된 경우에만 메시지를 전송하는 데 사용해야 합니다.
- 보안 자격 증명을 사용하도록 구성할 수 있습니다. 보안 자격 증명이 보안 원격 서버를 가리키는 경우 유용합니다.
- 이를 통해 획득한 리소스는 지속적인 자카르타 트랜잭션에 자동으로 등록됩니다.
풀링된 연결 팩토리 추가
다음 관리 CLI 명령을 사용하여 풀링된 새 연결 팩토리를 추가할 수 있습니다. 연결 팩토리를 추가할 때 커넥터
및 JNDI 항목을
제공해야 합니다.
/subsystem=messaging-activemq/server=default/pooled-connection-factory=MyPooledConnectionFactory:add(entries=[java:/MyPooledConnectionFactory],connectors=[in-vm])
/subsystem=messaging-activemq/server=default/pooled-connection-factory=MyPooledConnectionFactory:add(entries=[java:/MyPooledConnectionFactory],connectors=[in-vm])
풀링된 연결 팩토리 구성
관리 CLI를 사용하여 풀링된 연결 팩토리의 설정을 업데이트할 수 있습니다.
/subsystem=messaging-activemq/server=default/pooled-connection-factory=MyPooledConnectionFactory:write-attribute(name=max-retry-interval,value=3000)
/subsystem=messaging-activemq/server=default/pooled-connection-factory=MyPooledConnectionFactory:write-attribute(name=max-retry-interval,value=3000)
풀링된 연결 팩토리의 사용 가능한 속성에 대한 자세한 내용은 Pooled Connection factory Attributes 를 참조하십시오.
enlist ment-trace
특성을 false
로 설정하여 관리 CLI를 사용하여 이 풀링된 연결 팩토리의 등록 추적 기록을 비활성화할 수 있습니다.
/subsystem=messaging-activemq/server=default/pooled-connection-factory=MyPooledConnectionFactory:write-attribute(name=enlistment-trace,value=false)
/subsystem=messaging-activemq/server=default/pooled-connection-factory=MyPooledConnectionFactory:write-attribute(name=enlistment-trace,value=false)
인리스트 추적을 비활성화하면 트랜잭션 입력 중에 오류가 중단됩니다.
풀링된 연결 팩토리에서 사용하는 관리형 연결 풀 구현을 구성할 수도 있습니다. 자세한 내용은 JBoss EAP 구성 가이드의 관리형 연결 풀 구성 섹션을 참조하십시오.
풀링된 연결 팩토리 제거
관리 CLI를 사용하여 풀링된 연결 팩토리를 제거할 수 있습니다.
/subsystem=messaging-activemq/server=default/pooled-connection-factory=MyPooledConnectionFactory:remove
/subsystem=messaging-activemq/server=default/pooled-connection-factory=MyPooledConnectionFactory:remove
10장. 지속성 구성 링크 복사링크가 클립보드에 복사되었습니다!
10.1. JBoss EAP 7 Messaging의 지속성 정보 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP에는 바인딩 데이터 및 메시지를 저장하기 위한 두 가지 지속성 옵션이 포함되어 있습니다.
- 메시징 사용 사례에 최적화되어 뛰어난 성능을 제공하는 기본 파일 기반 저널을 사용할 수 있습니다. 이 옵션은 기본적으로 제공되며 추가 구성을 수행하지 않는 경우 사용됩니다.
-
JDBC를 사용하여 선택한 데이터베이스에 연결하는 JDBC 데이터 저장소에 데이터를 저장할 수 있습니다. 이 옵션을 사용하려면 서버 구성 파일에
데이터 소스 및
messaging-activemq
하위 시스템을 구성해야 합니다.
10.2. 기본 파일 저널을 사용한 메시징 저널 지속성 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 메시징에는 메시징에 최적화된 고성능 파일 기반 저널이 포함되어 있습니다.
JBoss EAP 메시징 저널에는 구성 가능한 파일 크기가 있으며 추가만 추가되므로 단일 쓰기 작업을 활성화하여 성능이 향상됩니다. 디스크의 파일 집합으로 구성되며 처음에는 고정된 크기로 미리 만들어 패딩으로 채워집니다. add message, delete message, update message 등의 서버 작업이 수행되면 다음 저널 파일이 사용되는 저널 파일이 가득 찰 때까지 작업의 레코드가 저널에 추가됩니다.
정교한 가비지 컬렉션 알고리즘은 모든 데이터가 삭제될 때 저널 파일을 회수하고 다시 사용할 수 있는지 여부를 결정합니다. 압축 알고리즘은 저널 파일에서 잘못된 공간을 제거하고 데이터를 압축합니다.
저널은 로컬 및 XA 트랜잭션을 모두 완벽하게 지원합니다.
10.2.1. 메시징 저널 파일 시스템 구현 링크 복사링크가 클립보드에 복사되었습니다!
대부분의 저널은 Java로 작성되지만 다양한 플러그형 구현을 허용하도록 파일 시스템과의 상호 작용이 추상화되었습니다. JBoss EAP 메시징과 함께 제공되는 두 가지 구현은 다음과 같습니다.
- Java New I/O(NIO)
- 이 구현에서는 표준 Java NIO를 사용하여 파일 시스템과 상호 작용합니다. 매우 우수한 성능을 제공하며 Java 6 이상 런타임이 포함된 모든 플랫폼에서 실행됩니다. JBoss EAP 7에는 Java 8이 필요합니다. NIO 사용은 JBoss EAP가 지원하는 모든 운영 체제에서 지원됩니다.
- Linux 비동기 IO(ASYNCIO)
이 구현에서는 기본 코드 래퍼를 사용하여 Linux 비동기 IO 라이브러리(ASYNCIO)와 통신합니다. 이 구현에서는 명시적 동기화가 필요하지 않습니다. 일반적으로 ASYNCIO는 Java NIO보다 우수한 성능을 제공합니다.
사용 중인 저널 유형을 확인하려면 다음 CLI 요청을 실행합니다.
/subsystem=messaging-activemq/server=default:read-attribute(name=runtime-journal-type)
/subsystem=messaging-activemq/server=default:read-attribute(name=runtime-journal-type)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 시스템에서 다음 값 중 하나를 반환합니다.
Expand 표 10.1. 저널 유형 반환 값 반환 값 설명 NONE
지속성이 비활성화됨
NIO
Java NIO 사용 중
ASYNCIO
libaio
가 있는 ASYNCIO가 사용되고 있습니다데이터베이스
JDBC 지속성이 사용 중입니다
다음 파일 시스템은
libaio
네이티브를 사용하는 경우 테스트되었으며 Red Hat Enterprise Linux 6, Red Hat Enterprise Linux 7 및 Red Hat Enterprise Linux 8에서만 지원됩니다. 테스트되지 않으며 다른 운영 체제에서는 지원되지 않습니다.- EXT4
- XFS
- NFSv4
- GFS2
다음 표에는
libaio
네이티브가 있는지 여부와 테스트된 HA 공유 저장소 파일 시스템이 나열되어 있습니다.Expand 운영 체제 파일 시스템 libaio
Natives를 사용하여 지원됩니까?
(journal-type="ASYNCIO")libaio
Natives를 사용하지 않고 지원됩니까?
(journal-type="NIO")Red Hat Enterprise Linux 6
NFSv4
있음
있음
Red Hat Enterprise Linux 7 이상
NFSv4
있음
있음
Red Hat Enterprise Linux 6
GFS2
있음
없음
Red Hat Enterprise Linux 7 이상
GFS2
있음
없음
10.2.2. 표준 메시징 저널 파일 시스템 인스턴스 링크 복사링크가 클립보드에 복사되었습니다!
표준 JBoss EAP 메시징 코어 서버는 다음 저널 인스턴스를 사용합니다.
- 바인딩 저널
이 저널은 서버 및 해당 속성에 배포된 큐 집합을 포함하여 바인딩 관련 데이터를 저장하는 데 사용됩니다. 또한 id 시퀀스 카운터와 같은 데이터를 저장합니다.
바인딩 저널은 일반적으로 메시지 저널에 비해 처리량이 낮기 때문에 NIO 저널입니다.
이 저널의 파일은 activemq-bindings로 접두사로 지정됩니다. 각 파일에는 바인딩 확장자가 있습니다. 파일 크기는 1048576이며 bindings 폴더에 있습니다.
- 자카르타 메시징 저널
이 저널 인스턴스는 자카르타 메시징 대기열, 토픽, 연결 팩토리 및 이러한 리소스에 대한 모든 JNDI 바인딩과 같은 모든 자카르타 메시징 관련 데이터를 저장합니다.
관리 API를 통해 생성된 자카르타 메시징 리소스는 이 저널에 저장됩니다. 구성 파일을 통해 구성된 모든 리소스는 그렇지 않습니다. 자카르타 메시징 저널은 Jakarta Messaging이 사용되는 경우에만 생성됩니다.
이 저널의 파일은 activemq-jms로 접두사로 지정됩니다. 각 파일에는
jms
확장자가 있습니다. 파일 크기는 1048576이며 bindings 폴더에 있습니다.- 메시지 저널
이 저널 인스턴스는 메시지 자체와 중복 ID 캐시를 비롯한 모든 메시지 관련 데이터를 저장합니다.
기본적으로 JBoss EAP 메시징은 ASYNCIO 저널 사용을 시도합니다. ASYNCIO를 사용할 수 없는 경우 예를 들어 올바른 커널 버전이 있는 Linux가 아니거나 ASYNCIO가 설치되지 않은 경우 모든 Java 플랫폼에서 사용할 수 있는 Java NIO를 사용하는 것으로 자동 대체됩니다.
이 저널의 파일은 activemq-data 접두사로 지정됩니다. 각 파일에는 amq 확장자가 있습니다. 파일 크기는 기본적으로 10485760(설정 가능)이며 저널 폴더에 있습니다.
대규모 메시지의 경우 JBoss EAP 메시징은 메시지 저널 외부에 보관합니다. 이 내용은 Large Messages (대문자 메시지) 섹션에서 설명합니다.
JBoss EAP 메시징은 메시지를 메모리 부족 상태에서 디스크에 페이징하도록 구성할 수도 있습니다. 이에 대해서는 Paging(보내기) 섹션에서 설명합니다.
지속성이 전혀 필요하지 않은 경우 JBoss EAP 메시징은 JBoss EAP 메시징 구성 섹션에서 설명한 대로 스토리지에 전혀 데이터를 유지하지 않도록 구성할 수도 있습니다.
10.2.3. 바인딩 및 자카르타 메시징 저널 구성 링크 복사링크가 클립보드에 복사되었습니다!
바인딩 저널은 자카르타 메시징 저널과 구성을 공유하기 때문에 아래의 단일 관리 CLI 명령을 사용하여 둘 다의 현재 구성을 읽을 수 있습니다. 기본 구성을 강조 표시하기 위해 출력도 포함되어 있습니다.
기본적으로 저널 is activemq/bindings
의 경로
는 다음과 같습니다. 다음 관리 CLI 명령을 사용하여 경로
의 위치를 변경할 수 있습니다.
/subsystem=messaging-activemq/server=default/path=bindings-directory:write-attribute(name=path,value=PATH_LOCATION)
/subsystem=messaging-activemq/server=default/path=bindings-directory:write-attribute(name=path,value=PATH_LOCATION)
또한 위의 출력에서 relative-to
특성을 확인합니다. relative-to
를 사용하는 경우 경로
속성의 값은 relative-to
에서 지정한 파일 경로에 상대적으로 처리됩니다. 기본적으로 이 값은 JBoss EAP 속성 jboss.server.data.dir
입니다. 독립 실행형 서버의 경우 jboss.server.data.dir
은 EAP_HOME/standalone/data
에 있습니다. 도메인의 경우 각 서버에 EAP_HOME/domain
디렉토리가 있습니다. 다음 관리 CLI 명령을 사용하여 /servers에 자체 serverX/data/
activemqrelative-to
의 값을 변경할 수 있습니다.
/subsystem=messaging-activemq/server=default/path=bindings-directory:write-attribute(name=relative-to,value=RELATIVE_LOCATION)
/subsystem=messaging-activemq/server=default/path=bindings-directory:write-attribute(name=relative-to,value=RELATIVE_LOCATION)
기본적으로 JBoss EAP는 바인딩 디렉터리가 없는 경우 자동으로 생성하도록 구성됩니다. 다음 관리 CLI 명령을 사용하여 이 동작을 전환합니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=create-bindings-dir,value=TRUE/FALSE)
/subsystem=messaging-activemq/server=default:write-attribute(name=create-bindings-dir,value=TRUE/FALSE)
값을
true
로 설정하면 자동 디렉터리 생성을 사용할 수 있습니다. 값을
false
로 설정하면 비활성화됩니다.
10.2.4. 메시지 저널 위치 구성 링크 복사링크가 클립보드에 복사되었습니다!
아래 관리 CLI 명령을 사용하여 메시지 저널의 위치 정보를 읽을 수 있습니다. 기본 구성을 강조 표시하기 위해 출력도 포함되어 있습니다.
기본적으로 저널 is activemq/journal
의 경로
는 입니다. 다음 관리 CLI 명령을 사용하여 경로
의 위치를 변경할 수 있습니다.
/subsystem=messaging-activemq/server=default/path=journal-directory:write-attribute(name=path,value=PATH_LOCATION)
/subsystem=messaging-activemq/server=default/path=journal-directory:write-attribute(name=path,value=PATH_LOCATION)
최상의 성능을 위해 Red Hat은 디스크 헤드 이동을 최소화하기 위해 저널을 자체 물리 볼륨에 있는 것이 좋습니다. 저널이 바인딩 저널, 데이터베이스 또는 트랜잭션 코디네이터와 같은 다른 파일을 작성할 수 있는 다른 프로세스와 공유되는 볼륨에 있는 경우 디스크 헤드가 작성 시 이러한 파일 간에 빠르게 이동되므로 성능이 크게 저하될 수 있습니다.
또한 위의 출력에서 relative-to
특성을 확인합니다. relative-to
를 사용하는 경우 경로
속성의 값은 relative-to
에서 지정한 파일 경로에 상대적으로 처리됩니다. 기본적으로 이 값은 JBoss EAP 속성 jboss.server.data.dir
입니다. 독립 실행형 서버의 경우 jboss.server.data.dir
은 EAP_HOME/standalone/data
에 있습니다. 도메인의 경우 각 서버에 EAP_HOME/domain
디렉토리가 있습니다. 다음 관리 CLI 명령을 사용하여 /servers에 자체 serverX/data/
activemqrelative-to
의 값을 변경할 수 있습니다.
/subsystem=messaging-activemq/server=default/path=journal-directory:write-attribute(name=relative-to,value=RELATIVE_LOCATION)
/subsystem=messaging-activemq/server=default/path=journal-directory:write-attribute(name=relative-to,value=RELATIVE_LOCATION)
기본적으로 저널 디렉터리가 없는 경우 저널 디렉터리를 자동으로 생성하도록 JBoss EAP를 구성합니다. 다음 관리 CLI 명령을 사용하여 이 동작을 전환합니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=create-journal-dir,value=TRUE/FALSE)
/subsystem=messaging-activemq/server=default:write-attribute(name=create-journal-dir,value=TRUE/FALSE)
값을
true
로 설정하면 자동 디렉터리 생성을 사용할 수 있습니다. 값을
false
로 설정하면 비활성화됩니다.
10.2.5. 메시지 저널 속성 구성 링크 복사링크가 클립보드에 복사되었습니다!
아래에 열거된 속성은 메시징 서버의 모든 하위 속성입니다. 따라서 관리 CLI를 사용하여 값을 가져오고 설정하는 명령 구문은 각각 동일합니다.
주어진 속성의 현재 값을 읽으려면 구문은 다음과 같습니다.
/subsystem=messaging-activemq/server=default:read-attribute(name=ATTRIBUTE_NAME)
/subsystem=messaging-activemq/server=default:read-attribute(name=ATTRIBUTE_NAME)
속성 값을 작성하는 구문은 해당 패턴을 따릅니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=ATTRIBUTE_NAME,value=NEW_VALUE)
/subsystem=messaging-activemq/server=default:write-attribute(name=ATTRIBUTE_NAME,value=NEW_VALUE)
create-journal-dir
이 값이
true
로 설정되면 저널 디렉터리가 아직 없는 경우journal-directory
에 지정된 위치에 자동으로 생성됩니다. 기본값은true
입니다.journal-file-open-timeout
이 특성은 저널 파일을 여는 시간 초과 값을 수정합니다. 기본값은
5
초입니다.journal-buffer-timeout
플러시가 필요한 모든 쓰기에 플러시하는 대신 내부 버퍼를 유지 관리하고 전체 버퍼가 가득 찰 때 또는 시간 제한이 만료된 시점 중 어느 쪽이 더 빨리 만료되는지 확인합니다. 이는 NIO 및 ASYNCIO 모두에 사용되며 플러시가 필요한 많은 동시 쓰기로 시스템을 더 효율적으로 확장할 수 있습니다.
이 매개변수는 아직 입력하지 않은 경우 버퍼가 플러시될 시간 초과를 제어합니다. ASYNCIO는 일반적으로 NIO보다 더 높은 플러시 속도를 처리할 수 있으므로 시스템은 NIO 및 ASYNCIO 모두에 대해 다른 기본값을 유지합니다. NIO의 기본값은 3
3333 나노
초 또는 초당 300번입니다. ASYNCIO의 기본값은500000
나노초 또는 초당 2000 번입니다.참고시간 초과를 늘리면 대기 시간을 희생하여 시스템 처리량을 늘릴 수 있으며, 처리량과 대기 시간 간에 적절한 균형을 유지하기 위해 기본 매개 변수를 선택합니다.
journal-buffer-size
ASYNCIO에서 시간 초과된 버퍼의 크기(바이트)입니다.
journal-buffer-size
및journal-file-size
는 모두min-large-message-size
보다 크게 설정해야 합니다. 그렇지 않으면 메시지가 저널에 작성되지 않습니다. 자세한 내용은 큰 메시지 구성을 참조하십시오.journal-compact-min-files
저널 압축을 고려하기 전에 최소 파일 수입니다. 압축 알고리즘은 최소한
journal-compact-min-file이 있을 때까지 시작되지 않습니다
.이 값을
0
으로 설정하면 기능이 완전히 압축되지 않습니다. 저널이 무기한 확장될 수 있기는 하지만 이는 위험할 수 있습니다. 현명하게 사용하십시오!이 매개변수의 기본값은
10
입니다.journal-compact-percentage
압축을 시작할 임계값입니다. 이 백분율 미만이 실시간 데이터로 간주되면 압축을 시작합니다.
저널에 journal-compact-min-files
데이터 파일이 있을 때까지 압축이 시작되지 않습니다.이 매개변수의 기본값은
30
입니다.journal-file-size
각 저널 파일의 크기(바이트)입니다. 이 값의 기본값은
10485760바이트
또는 10MB입니다.journal-file-size
및journal-buffer-size
는 모두min-large-message-size
보다 크게 설정해야 합니다. 그렇지 않으면 메시지가 저널에 작성되지 않습니다. 자세한 내용은 큰 메시지 구성을 참조하십시오.journal-max-io
쓰기 요청은 실행을 위해 시스템에 제출되기 전에 대기합니다. 이 매개 변수는 언제든지 IO 큐에 있을 수 있는 최대 쓰기 요청 수를 제어합니다. 큐가 가득 차면 공간이 확보될 때까지 쓰기가 차단됩니다.
시스템은 NIO 또는 ASYNCIO인지 여부에 따라 이 매개변수의 기본값이 서로 다릅니다. NIO의 기본값은
1
이고 ASYNCIO의 기본값은500
입니다.제한이 있으며 총 최대 ASYNCIO는 OS 수준에서 구성된 것보다 클 수 없으며, /proc/sys/fs/aio-max-nr(일반적으로
65536
)에서 찾을 수 있습니다.journal-min-files
저널이 유지 관리할 최소 파일 수입니다. JBoss EAP가 시작되고 초기 메시지 데이터가 없으면 JBoss EAP는
journal-min-files
의 파일 수를 미리 생성합니다. 기본값은2
입니다.저널 파일을 만들고 패딩을 채우는 것은 비용이 많이 드는 작업이며, 파일을 채우면서 런타임에 이 작업을 최소화하고자 합니다. 파일을 미리 만들면 저널이 작성되지 않고 즉시 다음 파일로 다시 시작할 수 있습니다.
큐에 안정적인 상태로 포함될 것으로 예상되는 데이터 양에 따라 이 파일 수를 조정하여 총 데이터 양과 일치해야 합니다.
journal-pool-files
재사용할 수 있는 저널 파일 수입니다. ActiveMQ는 필요한 만큼 많은 파일을 생성하지만 파일을 회수할 때 값으로 축소됩니다. 기본값은
-1
이며 제한이 없음을 의미합니다.journal-sync-transactional
true로 설정된 경우 JBoss EAP는 커밋, 준비 또는 롤백과 같은 트랜잭션 경계의 디스크로 모든 트랜잭션 데이터가 디스크로 플러시되도록 합니다. 기본값은
true
입니다.journal-sync-non-transactional
이 값이 true로 설정되면 JBoss EAP는 전송 및 승인과 같은 트랜잭션이 아닌 메시지 데이터가 매번 디스크에 플러시되도록 합니다. 기본값은
true
입니다.journal-type
유효한 값은
NIO
또는ASYNCIO
입니다.NIO
를 선택하면 JBoss EAP에 Java NIO 저널을 사용하도록 지시합니다.ASYNCIO
는 Linux 비동기 IO 저널을 사용하도록 지시합니다.ASYNCIO
를 선택하지만 Linux가 실행 중이 아니거나 libaio가 설치되어 있지 않은 경우 JBoss EAP는 Java NIO 저널을 사용합니다.
10.2.6. 디스크 쓰기 캐시 비활성화 시 알림 링크 복사링크가 클립보드에 복사되었습니다!
운영 체제에서 fsync()
를 실행했는지 또는 Java 프로그램 내부에서 올바르게 동기화된 데이터를 실행했는지에 관계없이 발생합니다!
기본적으로 많은 시스템은 디스크 쓰기 캐시가 활성화된 상태로 제공됩니다. 즉, 운영 체제와 동기화한 후에도 데이터가 디스크에 실제로 수행된다는 보장이 없으므로 오류가 발생하면 중요한 데이터가 손실될 수 있습니다.
일부 고가의 디스크에는 휘발성 또는 배터리 지원 쓰기 캐시가 있어 장애 발생 시 데이터가 손실되지 않지만 테스트해야 합니다!
디스크에 휘발성 또는 배터리가 많이 지원되는 캐시가 없고 RAID와 같은 중복 배열의 일부가 아니며 데이터 무결성을 평가하여 디스크 쓰기 캐시가 비활성화되었는지 확인합니다.
디스크 쓰기 캐시를 비활성화하면 성능이 저하될 수 있습니다. 기본 설정에서 쓰기 캐시가 활성화된 디스크를 사용하는 경우 데이터 무결성이 손상될 수 있다는 것을 인식하지 못하면 비활성화하면 안정적으로 작업할 때 디스크가 얼마나 빠르게 작동하는지에 대한 아이디어가 제공됩니다.
Linux에서는 IDE 디스크의 경우 toolparm, SDSI/SATA 디스크의 경우 sd
또는 parm
sginfo
를 사용하여 디스크 쓰기 캐시 설정을 검사하거나 변경할 수 있습니다.
Windows에서는 디스크를 마우스 오른쪽 버튼으로 클릭한 다음 속성을 클릭하여 설정을 확인하고 변경할 수 있습니다.
10.2.7. libaio 설치 링크 복사링크가 클립보드에 복사되었습니다!
Java NIO 저널은 성능이 뛰어나지만 Linux 커널 2.6 이상을 사용하여 JBoss EAP 메시징을 실행하는 경우 Red Hat은 최상의 지속성 성능을 위해 ASYNCIO 저널을 사용하는 것이 좋습니다.
JBoss EAP는 Red Hat Enterprise Linux 버전 6, 7 또는 8에 설치하고 ext4, xfs, gfs2 또는 nfs4 파일 시스템을 사용하는 경우에만 ASYNCIO를 지원합니다. 다른 운영 체제 또는 이전 버전의 Linux 커널에서는 ASYNCIO 저널을 사용할 수 없습니다.
ASYNCIO 저널을 사용하려면 libaio
가 설치되어 있어야 합니다. 설치하려면 다음 명령을 사용합니다.
Red Hat Enterprise Linux 6 및 7의 경우:
yum install libaio
yum install libaio
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Enterprise Linux 8의 경우:
dnf install libaio
dnf install libaio
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
예를 들어 /tmp
디렉토리에 사용되는 tmpfs 파일 시스템에 메시징 저널을 배치하지 마십시오. ASYNCIO 저널이 tmpfs를 사용하는 경우 JBoss EAP가 시작되지 않습니다.
10.3. JDBC 데이터베이스를 사용한 메시징 저널 지속성 링크 복사링크가 클립보드에 복사되었습니다!
기본 파일 기반 저널을 사용하는 대신 메시지 및 바인딩 데이터를 데이터베이스에 바인딩하도록 JDBC를 사용하려면 JBoss EAP 7 메시징을 구성해야 합니다.
이렇게 하려면 먼저 데이터 소스 하위 시스템에서
소스를 사용하도록 datasource
요소를 구성한 다음 해당 데이터messaging
속성을 정의해야 합니다. -activemq 하위 시스템의
datasourceserver
요소에 journal-journal-datasource
특성이 있으면 메시징 하위 시스템에서 파일 기반 저널 대신 데이터베이스에 저널 항목을 지속하도록 알립니다. messaging-tekton 하위 시스템의
속성은 데이터베이스와 통신하는 데 사용되는 SQL languageect를 정의합니다. 이 속성은 데이터 소스 메타데이터를 사용하여 자동으로 구성됩니다.
서버
리소스에 대한 journal-
database
파일 기반 저널에 메시지를 유지하는 경우 큰 메시지 크기는 디스크 크기만으로 제한됩니다. 그러나 메시지를 데이터베이스에 보관할 때 큰 메시지 크기는 해당 데이터베이스에 대한 BLOB
데이터 유형의 최대 크기로 제한됩니다.
JBoss EAP 7.4는 현재 Oracle 12c 및 IBM DB2 Enterprise 데이터베이스만 지원합니다.
10.3.1. 데이터베이스 영구 저장소 구성 고려 사항 링크 복사링크가 클립보드에 복사되었습니다!
안정성 향상을 위해 JBoss EAP는 연결 풀을 통해 메시징 호출을 수행하므로 여러 애플리케이션에서 공유할 수 있는 지정된 데이터베이스에 대한 열린 연결 세트를 제공합니다. 즉, JBoss EAP가 연결을 떨어지면 풀의 다른 연결은 실패를 방지하기 위해 실패한 연결을 대체합니다.
이전 버전의 JBoss EAP는 풀에서 하나의 연결만 지원합니다.
데이터 소스 하위 시스템에서 데이터베이스 영구 저장소 또는 풀을 구성하는 경우 다음 포인트를 고려하십시오.
min-pool-size
특성 값을 최소 4개로 설정하여 다음 사용 시 각각에 대한 연결을 전용으로 지정합니다.- 바인딩된 경우One for the binding
- 메시지 저널에 대한 1개
- High Availability (HA)를 사용하는 경우 리스 잠금을 위한 것입니다.
- HA를 사용하는 경우 노드 관리자 공유 상태용 1개
-
페이징 또는 대용량 메시지 스트리밍 작업을 수행하는 동시 스레드 수에 따라
max-pool-size
속성 값을 설정합니다. 스레드 수와 연결 수가 일대일이 아니므로max-pool-size
특성을 구성하기 위한 규칙이 정의되지 않습니다.
연결 수는 페이징 및 대용량 메시지 작업을 처리하는 스레드 수와 연결을 받기 위한 대기 시간을 정의하는 attribute blocking-timeout-wait-밀리코어is
에 따라 달라집니다.
새로운 큰 메시지 또는 페이징 작업이 전용 스레드에서 발생하며 연결이 필요합니다. 이러한 전용 스레드는 연결이 준비되거나 연결을 가져올 시간이 없어 오류가 발생할 때까지 큐에 추가됩니다.
요구 사항에 따라 풀 구성을 사용자 지정하고 해당 환경에서 구성된 풀을 테스트할 수 있습니다.
10.3.2. 메시징 저널 JDBC 지속성 저장소 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 단계에 따라 JDBC를 사용하여 메시지를 유지하고 데이터를 데이터베이스에 바인딩하도록 JBoss EAP 7 메시징을 구성합니다.
-
messaging-
tekton 하위 시스템에서 사용할 데이터 소스 하위 시스템에서 데이터 소스를 구성합니다. 데이터 소스를 생성하고 구성하는 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드의 데이터 소스 관리를 참조하십시오. 새 데이터 소스를 사용하도록
messaging-activemq
하위 시스템을 구성합니다./subsystem=messaging-activemq/server=default:write-attribute(name=journal-datasource,value="MessagingOracle12cDS")
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-datasource,value="MessagingOracle12cDS")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이렇게 하면 서버 구성 파일의
messaging-tekton
하위 시스템에 다음 구성이 생성됩니다.<server name="default"> <journal datasource="MessagingOracle12cDS"/> ... </server>
<server name="default"> <journal datasource="MessagingOracle12cDS"/> ... </server>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
JBoss EAP 메시징은 이제 데이터베이스를 사용하여 메시징 데이터를 저장하도록 구성되어 있습니다.
10.3.3. 메시징 저널 테이블 이름 구성 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 7 메시징은 별도의 JDBC 테이블을 사용하여 바인딩 정보, 메시지, 대용량 메시지 및 페이징 정보를 저장합니다. 이러한 테이블의 이름은 서버
구성 파일의 messaging
특성을 사용하여 구성할 수 있습니다.
-activemq 하위 시스템에서 journal
-bindings-table,
journal-jms
-bindings-table,
tablejournal-messages
-table, journal-page-store-
다음은 테이블 이름 제한 목록입니다.
-
JBoss EAP 7 메시징은 GENERATED _ ID가 최대 20자까지 될 수 있는 패턴 TABLE_NAME + GENERATED _ID 를 사용하여 페이징 테이블의 식별자를 생성합니다. Oracle Database 12c의 최대 테이블 이름 길이는 30자이므로 테이블 이름을 10자로 제한해야 합니다. 그렇지 않으면
ORA-00972: 식별자가 너무 길고 페이징이
더 이상 작동하지 않습니다. - Oracle Database 12c에 대한 스키마 오브젝트 명명 규칙을 따르지 않는 테이블 이름은 큰따옴표로 묶어야 합니다. 따옴표로 묶은 식별자는 모든 문자로 시작할 수 있으며 문자와 문장 부호는 물론 공백을 포함할 수 있습니다. 그러나 따옴표로 묶거나 따옴표가 없는 식별자는 겹따옴표나 null 문자(\0)를 포함할 수 없습니다. 따옴표로 묶은 식별자는 대소문자를 구분하는 것이 중요합니다.
- 여러 JBoss EAP 서버 인스턴스에서 동일한 데이터베이스를 사용하여 메시지 및 바인딩 데이터를 유지하는 경우 테이블 이름은 각 서버 인스턴스에 대해 고유해야 합니다. 여러 JBoss EAP 서버는 동일한 테이블에 액세스할 수 없습니다.
다음은 인용된 식별자를 사용하여 journal-page-store-table
이름을 구성하는 관리 CLI 명령의 예입니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-page-store-table,value="\"PAGE_DATA\"")
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-page-store-table,value="\"PAGE_DATA\"")
이렇게 하면 서버 구성 파일의 messaging-tekton
하위 시스템에 다음 구성이 생성됩니다.
<server name="default"> <journal datasource="MessagingOracle12cDS" journal-page-store-table=""PAGED_DATA""/> ... </server>
<server name="default">
<journal datasource="MessagingOracle12cDS" journal-page-store-table=""PAGED_DATA""/>
...
</server>
10.3.4. 관리형 도메인에서 메시징 저널 구성 링크 복사링크가 클립보드에 복사되었습니다!
메시징 저널 테이블 이름 구성에서 설명한 대로 JDBC를 사용하여 메시지를 유지하고 데이터를 데이터베이스에 바인딩할 때 여러 JBoss EAP 서버가 동일한 데이터베이스 테이블에 액세스할 수 없습니다. 관리형 도메인에서 서버 그룹의 모든 JBoss EAP 서버 인스턴스는 동일한 프로필 구성을 공유하므로 표현식을 사용하여 메시징 저널 이름 또는 데이터 소스를 구성해야 합니다.
모든 서버가 동일한 데이터베이스를 사용하여 메시징 데이터를 저장하도록 구성된 경우 테이블 이름은 각 서버 인스턴스에 고유해야 합니다. 다음은 이름의 고유한 노드 식별자를 포함하는 표현식을 사용하여 서버 그룹의 각 서버에 대해 고유한 journal-page-store-table
테이블 이름을 생성하는 관리 CLI 명령의 예입니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-page-store-table,value="${env.NODE_ID}_page_store")
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-page-store-table,value="${env.NODE_ID}_page_store")
각 서버 인스턴스가 다른 데이터베이스에 액세스하는 경우 표현식을 사용하여 각 서버의 메시징 구성이 다른 데이터 소스에 연결할 수 있습니다. 다음 관리 CLI 명령은 connection-url
에서 DB_CONNECTION_URL
환경 변수를 사용하여 다른 데이터 소스에 연결합니다.
data-source add --name=messaging-journal --jndi-name=java:jboss/datasources/messaging-journal --driver-name=oracle12c --connection-url=${env.DB_CONNECTION_URL}
data-source add --name=messaging-journal --jndi-name=java:jboss/datasources/messaging-journal --driver-name=oracle12c --connection-url=${env.DB_CONNECTION_URL}
10.3.5. 메시징 저널 네트워크 시간 제한 구성 링크 복사링크가 클립보드에 복사되었습니다!
JDBC 연결에서 요청에 응답할 때까지 대기하는 최대 시간(밀리초)을 구성할 수 있습니다. 이는 네트워크가 중단되거나 JBoss EAP 메시징과 데이터베이스 간의 연결이 중단되는 경우 어떤 이유로든 데이터베이스가 닫힙니다. 이 경우 시간 초과가 발생할 때까지 클라이언트가 차단됩니다.
journal-jdbc-network-timeout
특성을 업데이트하여 시간 초과를 구성합니다. 기본값은 20000
밀리초 또는 20
초입니다.
다음은 journal-jdbc-network-timeout
속성 값을 10000
밀리초 또는 10
초로 설정하는 관리 CLI 명령의 예입니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-jdbc-network-timeout,value=10000)
/subsystem=messaging-activemq/server=default:write-attribute(name=journal-jdbc-network-timeout,value=10000)
10.3.6. 메시징 JDBC 지속성 스토어를 위한 HA 구성 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP messaging-activemq
하위 시스템은 브로커가 데이터베이스 저장소 유형으로 구성된 경우 JDBC HA 공유 저장소 기능을 활성화합니다. 그런 다음 브로커는 공유 데이터베이스 테이블을 사용하여 라이브 및 백업 서버가 공유 JDBC 저널 저장소를 통해 작업을 조정하는지 확인합니다.
다음 특성을 사용하여 JDBC 지속성 저장소의 HA를 구성할 수 있습니다.
-
journal-node-manager-store-table
: 노드 관리자를 저장할 JDBC 데이터베이스 테이블의 이름입니다. -
journal-jdbc-lock-expiration
: JDBC 잠금을 활성 상태로 유지하지 않고 유효한 것으로 간주되는 시간입니다. 이 특성 값을 초 단위로 지정합니다. 기본값은20
초입니다. -
journal-jdbc-lock-renew-period
: JDBC 잠금의 유지 서비스 기간. 이 특성 값을 초 단위로 지정합니다. 기본값은2
초입니다.
기본값은 서버의 ha-policy 및
특성 값에 따라 고려됩니다.
journal-
datasource
이전 버전과의 호환성을 위해 각각의 Artemis 특정 시스템 속성을 사용하여 값을 지정할 수도 있습니다.
-
brokerconfig.storeConfiguration.nodeManagerStoreTableName
-
brokerconfig.storeConfiguration.jdbcLockExpirationMillis
-
brokerconfig.storeConfiguration.jdbcLockRenewPeriodMillis
설정 시 이러한tekton별 시스템 속성이 해당 속성의 기본값보다 우선합니다.
10.4. 메시징 저널 준비 트랜잭션 관리 링크 복사링크가 클립보드에 복사되었습니다!
다음 관리 CLI 명령을 사용하여 메시징 저널 준비 트랜잭션을 관리할 수 있습니다.
준비된 트랜잭션을 커밋합니다.
/subsystem=messaging-activemq/server=default:commit-prepared-transaction(transaction-as-base-64=XID)
/subsystem=messaging-activemq/server=default:commit-prepared-transaction(transaction-as-base-64=XID)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 준비된 트랜잭션을 롤백합니다.
/subsystem=messaging-activemq/server=default:rollback-prepared-transaction(transaction-as-base-64=XID)
/subsystem=messaging-activemq/server=default:rollback-prepared-transaction(transaction-as-base-64=XID)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 준비된 모든 트랜잭션의 세부 정보를 표시합니다.
/subsystem=messaging-activemq/server=default:list-prepared-transactions
/subsystem=messaging-activemq/server=default:list-prepared-transactions
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고list-prepared-transaction-details-as-
html 작업을 사용하거나 list-prepared-transaction-details-
트랜잭션 세부 정보를 HTML 형식으로 표시할 수도 있습니다.details-as-
json 작업을 사용하여 JSON 형식으로 준비된
10.5. 제로 지속성을 위한 JBoss EAP Messaging 구성 링크 복사링크가 클립보드에 복사되었습니다!
메시징 시스템에 제로 지속성이 필요한 경우도 있습니다. 제로 지속성은 데이터, 메시지 데이터, 대용량 메시지 데이터, 중복된 id 캐시 또는 페이징 데이터를 유지해야 함을 의미합니다.
지속성 0을 수행하도록 messaging-activemq
하위 시스템을 구성하려면 persistence-enabled
매개 변수를 false로 설정합니다
.
/subsystem=messaging-activemq/server=default:write-attribute(name=persistence-enabled,value=false)
/subsystem=messaging-activemq/server=default:write-attribute(name=persistence-enabled,value=false)
지속성이 비활성화되었지만 페이징이 활성화된 경우 페이지 파일은 paging -directory
요소에서 지정한 위치에 계속 저장됩니다. address-full-policy
특성이 PAGE
로 설정된 경우 페이징이 활성화됩니다. 전체 제로 지속성이 필요한 경우 BLOCK
,DROP
또는 FAIL
을 사용하도록 address-
특성을 구성해야 합니다.
setting 요소의 address-
full-policy
10.6. 저널 데이터 가져오기 및 내보내기 링크 복사링크가 클립보드에 복사되었습니다!
저널 데이터 가져오기 및 내보내기에 대한 정보는 JBoss EAP 7 마이그레이션 가이드를 참조하십시오.
11장. 페이징 구성 링크 복사링크가 클립보드에 복사되었습니다!
11.1. 페이징 정보 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 메시징은 수백만 개의 메시지를 포함하는 각 대기열에서 많은 메시지 대기열을 지원합니다. JBoss EAP 메시징 서버는 제한된 메모리로 실행되므로 모든 메시지 큐를 한 번에 메모리에 저장하기가 어렵습니다.
페이징은 제한된 메모리에 대용량 메시지 큐를 수용하기 위해 필요에 따라 메모리 내/외부로 메시지를 투명하게 페이지 아웃하도록 JBoss EAP 메시징 서버에서 사용하는 메커니즘입니다.
JBoss EAP 메시징은 특정 주소에 대한 메모리의 메시지 크기가 구성된 최대 메시지 크기를 초과할 때 디스크에 페이징 메시지를 시작합니다.
JBoss EAP 메시징 페이징은 기본적으로 활성화되어 있습니다.
11.2. 페이지 파일 링크 복사링크가 클립보드에 복사되었습니다!
여러 파일에 메시지를 저장하는 파일 시스템의 각 주소에 대한 개별 폴더가 있습니다. 메시지를 저장하는 이러한 파일을 페이지 파일이라고 합니다. 각 파일에는 page-size-bytes
특성으로 설정된 최대 구성된 메시지 크기까지 메시지가 포함되어 있습니다.
시스템은 필요에 따라 페이지 파일을 탐색하고 페이지에 있는 모든 메시지를 클라이언트에서 수신한 즉시 페이지 파일을 제거합니다.
성능상의 이유로 JBoss EAP 메시징은 페이지된 메시지를 스캔하지 않습니다. 따라서 메시지를 그룹화하거나 마지막 값을 제공하기 위해 구성된 큐에서 페이징을 비활성화해야 합니다. 또한 페이징이 활성화된 큐에는 메시지 우선 순위 지정 및 메시지 선택기가 예상대로 작동하지 않습니다. 이러한 기능이 예상대로 작동하려면 페이징을 비활성화해야 합니다
예를 들어 소비자에게 대기열의 메시지를 읽는 메시지 선택기가 있는 경우 선택기와 일치하는 메모리의 메시지만 소비자에게 전달됩니다. 소비자가 이러한 메시지 전달을 승인하면 새 메시지가 페이지 취소되고 메모리에 로드됩니다. 페이지 파일의 디스크에 소비자의 선택기와 일치하는 메시지가 있을 수 있지만, JBoss EAP 메시징은 다른 소비자가 메모리의 메시지를 읽고 사용 가능한 공간을 제공할 때까지 메모리에 로드하지 않습니다. 사용 가능한 공간을 사용할 수 없는 경우 선택기를 사용하는 소비자가 새 메시지를 수신하지 못할 수 있습니다.
11.3. Paging 디렉토리 구성 링크 복사링크가 클립보드에 복사되었습니다!
아래 관리 CLI 명령을 사용하여 페이징 디렉터리의 구성을 읽을 수 있습니다. 이 예제에서 출력에 기본 구성이 표시됩니다.
paging-directory
구성 요소는 페이지 파일을 저장할 파일 시스템의 위치를 지정합니다. JBoss EAP는 이 페이징 디렉터리에서 각 페이징 주소에 대해 하나의 폴더를 만들고 페이지 파일은 이러한 폴더 내에 저장됩니다. 기본적으로 이 경로는 is activemq/paging/
입니다. 다음 관리 CLI 명령을 사용하여 경로 위치를 변경할 수 있습니다.
/subsystem=messaging-activemq/server=default/path=paging-directory:write-attribute(name=path,value=PATH_LOCATION)
/subsystem=messaging-activemq/server=default/path=paging-directory:write-attribute(name=path,value=PATH_LOCATION)
또한 위의 예제 출력에서 relative-to
특성을 확인합니다. relative-to
가 지정되면 경로
속성의 값은 relative-to
특성에서 지정한 파일 경로에 상대적으로 처리됩니다. 기본적으로 이 값은 JBoss EAP jboss.server.data.dir
속성입니다. 독립 실행형 서버의 경우 jboss.server.data.dir
은 EAP_HOME/standalone/data/
에 있습니다. 관리형 도메인의 경우 각 서버에 EAP_HOME/domain
다음 관리 CLI 명령을 사용하여 /servers/에 있는 자체 serverX/data/activemq
/ 디렉토리가 있습니다.relative-to
의 값을 변경할 수 있습니다.
/subsystem=messaging-activemq/server=default/path=paging-directory:write-attribute(name=relative-to,value=RELATIVE_LOCATION)
/subsystem=messaging-activemq/server=default/path=paging-directory:write-attribute(name=relative-to,value=RELATIVE_LOCATION)
11.4. 페이징 모드 구성 링크 복사링크가 클립보드에 복사되었습니다!
주소에 전달된 메시지가 구성된 크기를 초과하면 해당 주소는 페이징 모드로 전환됩니다.
페이징은 주소별로 개별적으로 수행됩니다. 주소에 대해 max-size-bytes
를 구성하면 일치하는 각 주소에 지정된 최대 크기가 있습니다. 그러나 일치하는 모든 주소의 전체 크기가 max-size-bytes
로 제한된다는 것은 아닙니다.
페이지
모드에서도 메모리 부족 오류로 인해 서버가 충돌할 수 있습니다. JBoss EAP 메시징은 디스크의 각 페이지 파일에 대한 참조를 유지합니다. 수백만 개의 페이지 파일이 있는 경우 JBoss EAP 메시징은 메모리 고갈에 직면할 수 있습니다. 이 위험을 최소화하려면 page-size-bytes
속성을 적절한 값으로 설정하는 것이 중요합니다. JBoss EAP 메시징 서버가 대상 수에 max-size-bytes
의 2배를 초과하도록 메모리를 구성해야 합니다. 그러지 않으면 메모리 부족 오류가 발생할 수 있습니다.
다음 관리 CLI 명령을 사용하여 주소의 현재최대 크기(max-size-bytes
)를 읽을 수 있습니다.
/subsystem=messaging-activemq/server=default/address-setting=ADDRESS_SETTING:read-attribute(name=max-size-bytes)
/subsystem=messaging-activemq/server=default/address-setting=ADDRESS_SETTING:read-attribute(name=max-size-bytes)
다음 관리 CLI 명령을 사용하여 주소의최대 크기(max-size-bytes
)를 구성할 수 있습니다.
/subsystem=messaging-activemq/server=default/address-setting=ADDRESS_SETTING:write-attribute(name=max-size-bytes,value=MAX_SIZE)
/subsystem=messaging-activemq/server=default/address-setting=ADDRESS_SETTING:write-attribute(name=max-size-bytes,value=MAX_SIZE)
address 설정의 다른 페이징 관련 속성에 대한 값을 읽거나 쓸 때 유사한 구문을 사용합니다. 아래 테이블에는 설명 및 기본값과 함께 각 속성이 나열되어 있습니다.
다음 표에서는 주소 설정에 대한 매개변수를 설명합니다.
요소 | 설명 |
---|---|
address-full-policy | 이 속성의 값은 페이징 결정에 사용됩니다. 유효한 값은 아래에 나열되어 있습니다.
기본값은 |
max-size-bytes |
이는 페이징 모드로 들어가기 전에 주소가 가질 수 있는 최대 메모리 크기를 지정하는 데 사용됩니다. 기본값은 |
page-max-cache-size |
시스템은 페이지 파일을 메모리의 |
page-size-bytes |
이는 페이징 시스템에서 사용되는 각 페이지 파일의 크기를 지정하는 데 사용됩니다. 기본값은 |
기본적으로 모든 주소는 주소가 max-size-bytes
에 도달한 후 메시지를 페이지하도록 구성됩니다. 최대 크기에 도달했을 때 메시지를 페이징하지 않으려면 메시지를 삭제하거나 클라이언트 측에 예외가 있는 메시지를 삭제하거나 address -full-policy를
구성할 수 있습니다.
DROP
,FAIL
, BLOCK
각각으로 설정하여 추가 메시지를 전송하지 못하도록 주소를
대상이 메시지를 페이지하기 시작한 후
에서 address-full-policy
를 PAGEBLOCK
으로 변경하면 소비자가 더 이상 페이지화된 메시지를 사용할 수 없습니다.
여러 대기열이 있는 주소
메시지가 여러 대기열이 바인딩된 주소로 라우팅되면 메모리에 있는 단일 메시지 사본만 있습니다. 각 큐는 이 원래 메시지 복사본에 대한 참조만 처리하므로 원래 메시지를 참조하는 모든 큐가 메시지를 전달한 경우에만 메모리가 확보됩니다.
단일 지연 큐/서브스크립션을 사용하면 모든 큐에 페이징 시스템의 추가 스토리지를 통해 메시지가 전송되므로 전체 주소의 입력/출력 성능이 저하될 수 있습니다.
12장. 대용량 메시지 작업 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트 또는 서버에 메모리 양이 제한된 경우에도 JBoss EAP 메시징은 대용량 메시지를 지원합니다. 대용량 메시지는 그대로 스트리밍하거나 더 효율적으로 전송하도록 압축할 수 있습니다. 사용자는 메시지 본문에 InputStream
을 설정하여 큰 메시지를 보낼 수 있습니다. 메시지가 전송되면 JBoss EAP 메시징에서 이 InputStream
을 읽고 서버 내용으로 데이터를 전송합니다.
클라이언트와 서버는 메모리에 큰 메시지의 전체 본문을 저장하지 않습니다. 소비자는 처음에 빈 본문이 있는 큰 메시지를 수신하고 메시지에 OutputStream
을 설정하여 내용을 디스크 파일로 스트리밍합니다.
큰 메시지를 처리할 때 서버는 메시지 본문과 동일한 방식으로 메시지 속성을 처리하지 않습니다. 예를 들어, 속성이 journal-buffer-size
보다 큰 문자열로 설정된 메시지는 저널 버퍼를 덮어 쓰기 때문에 서버에서 처리할 수 없습니다.
12.1. 큰 메시지 스트리밍 링크 복사링크가 클립보드에 복사되었습니다!
표준 방식으로 대용량 메시지를 보내는 경우 메시지 크기를 4배 이상 보낼 수 있습니다. 즉, 1GB 메시지에 힙 메모리에 4GB가 필요할 수 있습니다. 이러한 이유로 JBoss EAP 메시징은 메모리가 훨씬 적은 java.io. InputStream 및 java.io.OutputStream
클래스를 사용하여 메시지 본문을 설정할 수 있도록 지원합니다. 입력 스트림은 메시지를 전송하는 데 직접 사용되며 출력 스트림은 메시지를 수신하는 데 사용됩니다.
메시지를 수신할 때 출력 스트림을 처리하는 두 가지 방법이 있습니다.
-
출력 스트림은
ClientMessage.saveToOutputStream(OutputStream out)
메서드를 사용하여 복구하는 동안 차단할 수 있습니다. -
ClientMessage.setOutputstream(OutputStream out)
메서드를 사용하여 메시지를 비동기적으로 스트림에 작성할 수 있습니다. 이 방법을 사용하려면 메시지가 완전히 수신될 때까지 소비자가 활성 상태로 유지해야 합니다.
java.io.InputStream을 구현하여 메시지를 전송하는 데 java.io.InputStream 및 메시지를 수신하기 위해 java.io.
사용할 수 있습니다.
OutputStream과 같이 파일, JDBC Blobs 또는 SocketInputStream
과 같은 종류의 스트림을
코어 API를 사용하여 큰 메시지 스트리밍
다음 표는 개체 속성을 사용하여 Jakarta Messaging을 통해 사용할 수 있는 ClientMessage
클래스에서 사용할 수 있는 메서드를 보여줍니다.
ClientMessage 방법 | 설명 | 자카르타 메시징 동등 속성 |
---|---|---|
|
전송 시 메시지 본문을 읽는 데 사용된 |
|
|
메시지 본문을 수신할 |
|
|
메시지 본문을 |
|
다음 코드 예제에서는 핵심 메시지를 수신할 때 출력 스트림을 설정합니다.
다음 코드 예제에서는 핵심 메시지를 보낼 때 입력 스트림을 설정합니다.
ClientMessage clientMessage = session.createMessage(); clientMessage.setInputStream(dataInputStream);
ClientMessage clientMessage = session.createMessage();
clientMessage.setInputStream(dataInputStream);
2GiB보다 큰 메시지의 경우 _AMQ_LARGE_SIZE
메시지 속성을 사용해야 합니다. 이는 getBodySize()
메서드가 최대 정수 값으로 제한되기 때문에 잘못된 값을 반환하기 때문입니다.
자카르타 메시징을 통해 큰 메시지 스트리밍
Jakarta Messaging을 사용하는 경우 JBoss EAP 메시징은 개체 속성을 설정하여 핵심 API 스트리밍 방법을 매핑합니다. Message.setObjectProperty(String name, Object value)
메서드를 사용하여 입력 및 출력 스트림을 설정합니다.
InputStream
은 전송되는 메시지에서 JMS_AMQ_InputStream
속성을 사용하여 설정됩니다.
BytesMessage bytesMessage = session.createBytesMessage(); FileInputStream fileInputStream = new FileInputStream(fileInput); BufferedInputStream bufferedInput = new BufferedInputStream(fileInputStream); bytesMessage.setObjectProperty("JMS_AMQ_InputStream", bufferedInput); someProducer.send(bytesMessage);
BytesMessage bytesMessage = session.createBytesMessage();
FileInputStream fileInputStream = new FileInputStream(fileInput);
BufferedInputStream bufferedInput = new BufferedInputStream(fileInputStream);
bytesMessage.setObjectProperty("JMS_AMQ_InputStream", bufferedInput);
someProducer.send(bytesMessage);
OutputStream
은 차단 방식으로 수신되는 메시지에서 JMS_AMQ_saveStream
속성을 사용하여 설정됩니다.
또한 OutputStream
은 JMS_AMQ_OutputStream
속성을 사용하여 차단되지 않은 방식으로 설정할 수도 있습니다.
// This does not wait for the stream to finish. You must keep the consumer active. messageReceived.setObjectProperty("JMS_AMQ_OutputStream", bufferedOutput);
// This does not wait for the stream to finish. You must keep the consumer active.
messageReceived.setObjectProperty("JMS_AMQ_OutputStream", bufferedOutput);
Jakarta Messaging을 사용하여 대규모 메시지를 스트리밍할 때 StreamMessage
및 BytesMessage
오브젝트만 지원됩니다.
12.2. 큰 메시지 구성 링크 복사링크가 클립보드에 복사되었습니다!
12.2.1. 큰 메시지 위치 설정 링크 복사링크가 클립보드에 복사되었습니다!
아래 관리 CLI 명령을 사용하여 대용량 메시지 디렉터리의 구성을 읽을 수 있습니다. 기본 구성을 강조 표시하기 위해 출력도 포함되어 있습니다.
최상의 성능을 얻으려면 메시지 저널 또는 페이징 디렉터리와 다른 물리 볼륨에 대용량 메시지 디렉터리를 저장하는 것이 좋습니다.
large-messages-directory
구성 요소는 큰 메시지를 저장할 파일 시스템의 위치를 지정하는 데 사용됩니다. 기본적으로 경로 is activemq/largemessages
. 다음 관리 CLI 명령을 사용하여 경로의 위치를 변경할 수 있습니다.
/subsystem=messaging-activemq/server=default/path=large-messages-directory:write-attribute(name=path,value=PATH_LOCATION)
/subsystem=messaging-activemq/server=default/path=large-messages-directory:write-attribute(name=path,value=PATH_LOCATION)
또한 위의 출력에서 relative-to
특성을 확인합니다. relative-to
를 사용하는 경우 경로 속성의 값은 relative-to
에서 지정한 파일 경로에 상대적으로 처리됩니다. 기본적으로 이 값은 JBoss EAP 속성 jboss.server.data.dir
입니다. 독립 실행형 서버의 경우 jboss.server.data.dir
은 EAP_HOME/standalone/data
에 있습니다. 도메인의 경우 각 서버에 EAP_HOME/domain
디렉토리가 있습니다. 다음 관리 CLI 명령을 사용하여 /servers에 자체 serverX/data/
activemqrelative-to
의 값을 변경할 수 있습니다.
/subsystem=messaging-activemq/server=default/path=large-messages-directory:write-attribute(name=relative-to,value=RELATIVE_LOCATION)
/subsystem=messaging-activemq/server=default/path=large-messages-directory:write-attribute(name=relative-to,value=RELATIVE_LOCATION)
큰 메시지 크기 구성
관리 CLI를 사용하여 대규모 메시지의 현재 구성을 봅니다. 이 구성은 connection-factory
요소의 일부입니다. 예를 들어 포함된 기본 RemoteConnectionFactory
의 현재 구성을 읽으려면 다음 명령을 사용합니다.
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:read-attribute(name=min-large-message-size)
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:read-attribute(name=min-large-message-size)
유사한 구문을 사용하여 속성을 설정합니다.
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=min-large-message-size,value=NEW_MIN_SIZE)
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=min-large-message-size,value=NEW_MIN_SIZE)
min-large-message-size
특성 값은 바이트로 설정해야 합니다.
큰 메시지 압축 구성
빠르고 효율적인 전송을 위해 대용량 메시지를 압축하도록 선택할 수 있습니다. 모든 압축/압축 해제 작업은 클라이언트 측에서 처리됩니다. 압축 메시지가 min-large-message 크기
보다 작으면 일반 메시지로 서버로 전송됩니다. 관리 CLI를 사용하여 부울 속성 compress-large-messages
를 true
로 설정하여 대용량 메시지를 압축합니다.
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=compress-large-messages,value=true)
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=compress-large-messages,value=true)
12.2.2. 코어 API를 사용하여 대용량 메시지 크기 구성 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트 측의 코어 API를 사용하는 경우 setMinLargeMessageSize
메서드를 사용하여 대규모 메시지의 최소 크기를 지정해야 합니다. 대용량 메시지의 최소 크기(min-large-message-size
)는 기본적으로 100KB로 설정됩니다.
ServerLocator locator = ActiveMQClient.createServerLocatorWithoutHA(new TransportConfiguration(InVMConnectorFactory.class.getName())) locator.setMinLargeMessageSize(25 * 1024); ClientSessionFactory factory = ActiveMQClient.createClientSessionFactory();
ServerLocator locator = ActiveMQClient.createServerLocatorWithoutHA(new TransportConfiguration(InVMConnectorFactory.class.getName()))
locator.setMinLargeMessageSize(25 * 1024);
ClientSessionFactory factory = ActiveMQClient.createClientSessionFactory();
13장. 메시지 예약 링크 복사링크가 클립보드에 복사되었습니다!
메시지 배달을 위해 앞으로 가장 빠른 시간에 시간을 지정할 수 있습니다. 이 작업은 메시지가 전송되기 전에 _AMQ_SCHED_DELIVERY
예약된 배달 속성을 설정하여 수행할 수 있습니다.
지정된 값은 메시지를 전달할 시간(밀리초)에 해당하는 양의 길이
여야 합니다. 다음은 Jakarta Messaging API를 사용하여 예약된 메시지를 보내는 예입니다.
또한 메시지 보내기 전에 _AMQ_SCHED_DELIVERY
속성을 설정하여 코어 API를 사용하여 예약된 메시지를 보낼 수도 있습니다.
14장. 임시 대기열 및 런타임 대기열 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트에서 요청을 보내고 응답을 대기하는 요청-응답 패턴을 설계할 때 클라이언트의 런타임 인스턴스에 응답 전용 큐가 필요한지 또는 런타임 인스턴스가 공유 큐에 액세스할 수 있는지 여부와 적절한 특성을 기반으로 특정 응답 메시지를 선택해야 합니다.
여러 큐가 필요한 경우 클라이언트는 대기열을 동적으로 만드는 기능이 필요합니다. Jakarta Messaging은 임시 대기열의 개념을 사용하여 이 기능을 제공합니다. TemporaryQueue
는 세션에서 요청 시 생성됩니다
. 연결
수명 동안 존재합니다(예: 연결이 닫힐 때까지 또는 임시 큐가 삭제될 때까지). 즉, 특정 세션에서 임시 대기열을 생성하지만 동일한 연결에서 생성된 다른 세션에서 재사용할 수 있습니다.
공유 큐와 응답에 대한 개별 임시 대기열을 사용하는 장단점은 잠재적인 활성 클라이언트 인스턴스 수에 영향을 받습니다. 공유 대기열 접근법에서는 일부 공급자별 임계값에서 큐 액세스에 대한 경합이 문제가 될 수 있습니다. 이는 런타임에 큐 스토리지를 생성하는 공급자와 관련된 추가 오버헤드 및 잠재적으로 많은 임시 대기열을 호스팅하는 시스템 메모리에 미치는 영향과 대조되어야 합니다.
다음 예제에서는 시작 시 각 클라이언트에 대해 임시 대기열 및 소비자를 생성합니다. 각 메시지의 JMSReplyTo
속성을 임시 대기열로 설정한 다음 각 메시지에 상관 관계 ID를 설정하여 요청 메시지를 응답 메시지와 상호 연결합니다. 이렇게 하면 비용이 많이 드는 각 요청의 소비자를 생성 및 종료하는 오버헤드가 방지됩니다. 동일한 생산자 및 소비자는 여러 스레드에서 공유하거나 풀링할 수 있습니다. 세션이 종료될 때 아직 승인되지 않은 메시지가 수신되었지만 아직 승인되지 않은 메시지는 소비자가 다음에 큐에 액세스할 때 유지되고 재배포됩니다.
예제: 임시 대기열 코드
유사한 방식으로 Session.createTemporaryTopic()
메서드를 사용하여 임시 항목을 생성합니다.
15장. 표현식 및 메시지 선택기 필터링 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP의 messaging-activemq
하위 시스템은 SQL 92 식 구문의 하위 집합을 기반으로 강력한 필터 언어를 제공합니다.
자카르타 메시징 선택기에 사용되는 구문과 동일하지만 미리 정의된 식별자는 다릅니다. Jakarta Messaging selector 구문에 대한 설명서는 javax.jms.Message 인터페이스 Javadoc를 참조하십시오.
filter
특성은 구성 내의 여러 위치에서 찾을 수 있습니다.
사전 정의된 대기열. 큐를 사전 정의할 때 필터 표현식을 정의할 수 있습니다. 필터 표현식과 일치하는 메시지만 큐에 들어갑니다. 아래 구성 스니펫은 필터를 포함하는 큐 정의를 보여줍니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 관리 CLI에서 선택기를 사용하여 큐를 생성하려면 다음과 같은 명령을 사용합니다.
jms-queue add --queue-address=QUEUE_ADDRESS --selector=FILTER_EXPRESSION
jms-queue add --queue-address=QUEUE_ADDRESS --selector=FILTER_EXPRESSION
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 코어 브리지는 선택적 필터 표현식을 사용하여 정의할 수 있으며 일치하는 메시지만 브리지됩니다. 다음은
messaging-activemq
하위 시스템에 필터가 있는 브리지가 포함된 샘플 구성 파일의 코드 조각입니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다중 항목은 선택 사항인 필터 표현식을 사용하여 정의할 수 있으며 일치하는 메시지만 변경됩니다. 자세한 내용은 다음을 참조하십시오. 아래 코드 조각 예제는 필터를 사용하여 한 개씩 보여 줍니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
자카르타 메시징 선택기 식과 JBoss EAP 메시징 핵심 필터 식 사이에는 몇 가지 차이점이 있습니다. Jakarta Messaging 선택기 표현식은 자카르타 메시징 메시지에서 작동하는 반면 JBoss EAP 메시징 코어 필터 표현식은 핵심 메시지에서 작동합니다.
핵심 메시지의 특성을 참조하기 위해 핵심 필터 표현식에서 다음 식별자를 사용할 수 있습니다.
-
AMQP 우선 순위
. 메시지의 우선 순위를 참조하려면 다음을 수행합니다. 메시지 우선순위는0 - 9
의 유효한 값이 있는 정수입니다.0
은 가장 낮은 우선 순위이고9
는 가장 높은 우선 순위입니다. 예를 들어AMQPriority
= 3 AND animal = 'aardvark'입니다. -
AMQExpiration
. 메시지의 만료 시간을 참조하려면 다음을 수행합니다. 값은 긴 정수입니다. -
AMQDurable
. 메시지가 지속적인지 여부를 참조하려면 다음을 수행합니다. 값은 유효한 값이 있는 문자열입니다.DURABLE
또는NON_DURABLE
. -
AMQTimestamp
. 메시지가 생성된 시기의 타임 스탬프입니다. 값은 긴 정수입니다. -
AMQSize
. 메시지 크기(바이트)입니다. 값은 정수입니다.
핵심 필터 표현식에 사용되는 기타 식별자는 메시지의 속성으로 간주됩니다.
16장. 메시지 만료 설정 링크 복사링크가 클립보드에 복사되었습니다!
전송된 메시지는 지정된 시간 후에 소비자에게 전달되지 않는 경우 서버에 만료되도록 설정할 수 있습니다. 나중에 만료된 메시지를 사용하여 추가 검사를 수행할 수 있습니다.
코어 API를 사용하여 메시지 만료 설정
핵심 API를 사용하여 setExpiration
방법을 사용하여 메시지에 만료 시간을 설정할 수 있습니다.
// The message will expire 5 seconds from now message.setExpiration(System.currentTimeMillis() + 5000);
// The message will expire 5 seconds from now
message.setExpiration(System.currentTimeMillis() + 5000);
자카르타 메시징을 사용하여 메시지 만료 설정
자카르타 Messaging MessageProducer
가 메시지를 전송할 때 사용할 수 있는 시간을 설정할 수 있습니다. setTimeToLive
메서드를 사용하여 이 값을 밀리초 단위로 지정합니다.
// Messages sent by this producer will be retained for 5 seconds before expiring producer.setTimeToLive(5000);
// Messages sent by this producer will be retained for 5 seconds before expiring
producer.setTimeToLive(5000);
또한 생산자의 send
메서드에 시간을 유지하도록 설정하여 메시지 만료를 메시지별로 지정할 수도 있습니다.
// The last parameter of the send method is the time to live, in milliseconds producer.send(message, DeliveryMode.PERSISTENT, 0, 5000)
// The last parameter of the send method is the time to live, in milliseconds
producer.send(message, DeliveryMode.PERSISTENT, 0, 5000)
만료 주소에서 사용하는 만료된 메시지에는 다음과 같은 속성이 있습니다.
_AMQ_ORIG_ADDRESS
만료된 메시지의 원래 주소를 포함하는
String
속성입니다._AMQ_ACTUAL_EXPIRY
만료된 메시지의 실제 만료 시간을 포함하는
Long
속성입니다.
16.1. 만료 주소 링크 복사링크가 클립보드에 복사되었습니다!
만료 주소를 설정하여 만료된 메시지를 보낼 위치를 지정할 수 있습니다. 메시지가 만료되고 만료 주소가 지정되지 않은 경우 메시지가 큐에서 제거되고 삭제됩니다.
관리 CLI를 사용하여 address
를 설정할 수 있습니다. 아래 예에서 -setting에 대한 expiry-
addressjms.queue.exampleQueue
큐에 만료된 메시지가 jms.queue.expiryQueue
만료 주소로 전송됩니다.
/subsystem=messaging-activemq/server=default/address-setting=jms.queue.exampleQueue:write-attribute(name=expiry-address,value=jms.queue.expiryQueue)
/subsystem=messaging-activemq/server=default/address-setting=jms.queue.exampleQueue:write-attribute(name=expiry-address,value=jms.queue.expiryQueue)
16.2. 만료 리퍼 스레드 링크 복사링크가 클립보드에 복사되었습니다!
리퍼 스레드는 대기열을 정기적으로 검사하여 메시지가 만료되었는지 확인합니다. 관리 CLI를 사용하여 리퍼 스레드에 대한 검사 기간 및 스레드 우선 순위를 설정할 수 있습니다.
만료 리퍼 스레드의 검사 기간을 설정합니다. 이 기간은 밀리초 단위로 대기열을 스캔하여 만료된 메시지를 탐지합니다. 기본값은 30000
입니다. 리퍼 스레드를 비활성화하려면 이 값을 -1
로 설정할 수 있습니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=message-expiry-scan-period,value=30000)
/subsystem=messaging-activemq/server=default:write-attribute(name=message-expiry-scan-period,value=30000)
만료 리퍼 스레드에 대한 스레드 우선 순위를 설정합니다. 가능한 값은 0
에서 9 사이이며 9
는 가장 높은 우선 순위입니다. 기본값은
3
입니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=message-expiry-thread-priority,value=3)
/subsystem=messaging-activemq/server=default:write-attribute(name=message-expiry-thread-priority,value=3)
17장. 지연된 재배달 구성 링크 복사링크가 클립보드에 복사되었습니다!
주소에 대한 지연 재배달은 address-setting 구성 요소의
특성에 의해 정의됩니다. 재배달 지연이 지정되면 JBoss EAP는 메시지를 다시 보내기 전에 이 지연 기간을 기다립니다. redelivery-
delayredelivery-delay
를 0
으로 설정하면 재배달 지연이 없습니다. 지정된 address-setting
에 대한 redelivery-delay
의 현재 값을 가져오려면 다음 관리 CLI 명령을 예제로 사용합니다.
/subsystem=messaging-activemq/server=default/address-setting=YOUR_ADDRESS_SETTING:read-attribute(name=redelivery-delay)
/subsystem=messaging-activemq/server=default/address-setting=YOUR_ADDRESS_SETTING:read-attribute(name=redelivery-delay)
아래 표에는 메시지 재배달을 구성하는 데 사용할 수 있는 address-setting
의 구성 속성이 나열되어 있습니다. 다음 관리 CLI 명령을 예제로 사용하여 제공된 특성의 값을 설정합니다.
/subsystem=messaging-activemq/server=default/address-setting=YOUR_ADDRESS_SETTING:write-attribute(name=ATTRIBUTE,value=NEW_VALUE)
/subsystem=messaging-activemq/server=default/address-setting=YOUR_ADDRESS_SETTING:write-attribute(name=ATTRIBUTE,value=NEW_VALUE)
속성 | 설명 |
---|---|
max-delivery-attempts |
취소된 메시지를 |
max-redelivery-delay |
밀리초 단위의 |
redelivery-delay |
취소된 메시지를 재배달하기 전에 밀리초 단위로 대기하는 시간을 정의합니다. 기본값은 |
redelivery-multiplier |
|
address-setting 구성에 대한 자세한 내용은 주소
설정을 참조하십시오.
18장. 데드 문자 주소 구성 링크 복사링크가 클립보드에 복사되었습니다!
배달 못 한 주소는 messaging
요소에 정의됩니다. 지정된 -activemq 하위 시스템 구성의 address-
settingaddress-setting
에 대한 현재 구성을 읽으려면 다음 관리 CLI 명령을 예제로 사용합니다.
/subsystem=messaging-activemq/server=default/address-setting=ADDRESS_SETTING:read-attribute(name=dead-letter-address)
/subsystem=messaging-activemq/server=default/address-setting=ADDRESS_SETTING:read-attribute(name=dead-letter-address)
dead-letter-address
를 지정하지 않으면 max-delivery-attempts
시간을 전달한 후 메시지가 제거됩니다. 기본적으로 메시지 배달은 10번 시도됩니다. max-delivery-attempts
를 -1
로 설정하면 무한의 재배달 시도가 가능합니다. 아래 관리 CLI 명령 예제는 지정된 address-setting
에 대해 dead-letter-address
및 max-delivery-attempts
속성을 설정하는 방법을 보여줍니다.
/subsystem=messaging-activemq/server=default/address-setting=ADDRESS_SETTING:write-attribute(name=dead-letter-address,value=NEW_VALUE) /subsystem=messaging-activemq/server=default/address-setting=ADDRESS_SETTING:write-attribute(name=max-delivery-attempts,value=NEW_VALUE)
/subsystem=messaging-activemq/server=default/address-setting=ADDRESS_SETTING:write-attribute(name=dead-letter-address,value=NEW_VALUE)
/subsystem=messaging-activemq/server=default/address-setting=ADDRESS_SETTING:write-attribute(name=max-delivery-attempts,value=NEW_VALUE)
예를 들어 일치하는 주소 집합에 대해 배달 못 한 문자를 전역적으로 설정할 수 있으며 이 주소에만 무한 재배달 시도를 허용하도록 특정 주소 설정에 대해 max-delivery-attempts
를 -1
로 설정할 수 있습니다. 주소 와일드카드를 사용하여 주소 집합의 배달 못 한 설정을 구성할 수도 있습니다.
address-setting 생성 및 구성에 대한 자세한 내용은 주소
설정을 참조하십시오.
19장. 흐름 제어 링크 복사링크가 클립보드에 복사되었습니다!
흐름 제어를 사용하면 메시징 참여자가 부담을 주지 않도록 클라이언트와 서버 간의 메시징 데이터 흐름을 제한할 수 있습니다. 소비자 측과 생산자 측 모두에서 데이터 흐름을 관리할 수 있습니다.
19.1. 소비자 흐름 제어 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 메시징에는 소비자 대신 사전 가져오기할 데이터 양을 정의하고 소비자가 메시지를 사용할 수 있는 속도를 제어하는 구성이 포함되어 있습니다.
창 기반 흐름 제어
JBoss EAP 메시징은 각 소비자의 버퍼에 메시지를 사전 가져오기합니다. 버퍼 크기는 connection- factory
의 consumer-window-size
특성에 따라 결정됩니다. 아래 구성 예에서는 consumer- window
를 보여줍니다.
-size 특성이 명시적으로 설정된 connection-
factory
<connection-factory name="MyConnFactory" ... consumer-window-size="1048576" />
<connection-factory name="MyConnFactory" ... consumer-window-size="1048576" />
관리 CLI를 사용하여 지정된 connection-factory
에 대한 consumer-window-size
특성 값을 읽고 씁니다. 아래 예에서는 InVmConnectionFactory
연결 팩토리를 사용하여 수행한 방법을 보여줍니다. 이 팩토리는 서버와 동일한 가상 시스템에 상주하는 소비자의 기본값입니다(예: 로컬 MessageDrivenBean
).
-
관리 CLI에서
InVmConnectionFactory의
특성을 읽습니다.consumer
-window-size
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:read-attribute(name=consumer-window-size) { "outcome" => "success", "result" => 1048576 }
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:read-attribute(name=consumer-window-size)
{
"outcome" => "success",
"result" => 1048576
}
-
관리 CLI에서
consumer-window-size
속성을 작성합니다.
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:write-attribute(name=consumer-window-size,value=1048576) {"outcome" => "success"}
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:write-attribute(name=consumer-window-size,value=1048576)
{"outcome" => "success"}
consumer-window-size
의 값은 정수여야 합니다. 아래 표에 명시된 대로 일부 값은 특별한 의미를 갖습니다.
현재의 | 설명 |
---|---|
n |
버퍼 크기를 |
0 | 버퍼링을 끕니다. 이는 느린 소비자에게 도움이 될 수 있으며 여러 소비자에 걸쳐 결정적인 배포를 제공할 수 있습니다. |
-1 | 바인딩되지 않은 버퍼를 생성합니다. 이를 통해 신속하게 메시지를 수신하는 대로 신속하게 메시지를 가져오고 처리할 수 있는 매우 빠른 소비자가 도움이 될 수 있습니다. |
consumer-window-size
를 -1
로 설정하면 소비자가 메시지를 받는 것처럼 빠르게 메시지를 처리할 수 없는 경우 클라이언트 메모리가 오버플로될 수 있습니다.
코어 API를 사용하는 경우 set ConsumerWindowSize() 메서드를 사용하여
할 수 있습니다.
ServerLocator
에서 소비자 창 크기를 설정
Jakarta Messaging을 사용하는 경우 클라이언트는 인스턴스화 ConnectionFactory
의 setConsumerWindowSize()
메서드를 사용하여 소비자 창 크기를 지정할 수 있습니다.
속도 제한 흐름 제어
JBoss EAP 메시징은 제한이라고 하는 흐름 제어 방법인 초당 사용하는 메시지의 속도를 조정할 수 있습니다. 적절한
특성을 사용하여 소비자가 지정된 속도보다 빠른 속도로 메시지를 사용하지 않도록 합니다.
connection-factory의 consumer-max-
rate
<connection-factory name="MyConnFactory" ... consumer-max-rate="10" />
<connection-factory name="MyConnFactory" ... consumer-max-rate="10" />
기본값은 -1
로, 속도 제한 흐름 제어를 비활성화합니다.
관리 CLI는 consumer-max-rate
특성을 읽고 쓰는 데 권장되는 방법입니다. 아래 예에서는 InVmConnectionFactory
연결 팩토리(예: 로컬 MessageDrivenBean
)와 동일한 가상 시스템에 상주하는 소비자의 기본값인 InVmConnectionFactory 연결 팩토리를 사용하여 수행한 방법을 보여줍니다.
-
관리 CLI를 사용하여
consumer-max-rate
속성 읽기
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:read-attribute(name=consumer-max-rate) { "outcome" => "success", "result" => -1 }
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:read-attribute(name=consumer-max-rate)
{
"outcome" => "success",
"result" => -1
}
-
관리 CLI를 사용하여
consumer-max-rate
속성을 작성합니다.
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:write-attribute(name=consumer-max-rate,value=100) {"outcome" => "success"}
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:write-attribute(name=consumer-max-rate,value=100)
{"outcome" => "success"}
Jakarta Messaging을 사용하는 경우 인스턴스화된 ConnectionFactory
의 setConsumerMaxRate(int consumerMaxRate) 방법을 사용하여 최대 속도 크기를 설정할 수 있습니다.
Core API를 사용하는 경우 속도는 ServerLocator.setConsumerMaxRate(int consumerMaxRate)
메서드로 설정할 수 있습니다.
19.2. 생산자 흐름 제어 링크 복사링크가 클립보드에 복사되었습니다!
또한 JBoss EAP 메시징은 서버가 너무 많은 메시지를 받지 못하도록 클라이언트에서 전송되는 데이터 양을 제한할 수도 있습니다.
창 기반 흐름 제어
JBoss EAP 메시징은 메시지 생산자를 크레딧 교환을 사용하여 조정합니다. 생성자는 충분한 크레딧을 보유하는 한 주소로 메시지를 전송할 수 있습니다. 메시지를 전송하는 데 필요한 크레딧 양은 크기에 따라 결정됩니다. 생산자가 크레딧 상태가 낮을 때 서버에서 더 많은 것을 요청해야 합니다. 서버 구성 내에서 생산자가 한 번에 요청할 수 있는 크레딧 양을 connection
라고 합니다.
-factory 요소의 특성인 producer-window-
size
<connection-factory name="MyConnFactory" ... producer-window-size="1048576" />
<connection-factory name="MyConnFactory" ... producer-window-size="1048576" />
창 크기는 한 번에 진행 중일 수 있는 바이트의 양을 결정하여 원격 연결이 서버에 과부하되지 않도록 합니다.
관리 CLI를 사용하여 지정된 연결 팩토리의 producer-window-size
특성을 읽고 씁니다. 아래 예제에서는 원격 클라이언트에서 사용할 기본 구성 및 용도인 RemoteConnectionFactory
를 사용합니다.
-
관리 CLI를 사용하여
producer-window-size
특성을 읽습니다.
subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:read-attribute(name=producer-window-size) { "outcome" => "success", "result" => 65536 }
subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:read-attribute(name=producer-window-size)
{
"outcome" => "success",
"result" => 65536
}
-
관리 CLI를 사용하여
producer-window-size
특성을 작성합니다.
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=producer-window-size,value=65536) {"outcome" => "success"}
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=producer-window-size,value=65536)
{"outcome" => "success"}
Jakarta Messaging을 사용하는 경우 클라이언트는 ConnectionFactory
의 setProducerWindowSize(int producerWindowSize)
메서드를 호출하여 창 크기를 직접 설정할 수 있습니다.
코어 API를 사용하는 경우 ServerLocator
의 setProducerWindowSize(int producerWindowSize)
메서드를 사용하여 창 크기를 설정할 수 있습니다.
생산자 창 기반 흐름 제어 차단
일반적으로 메시징 서버는 항상 요청한 크레딧 수와 동일한 수를 제공합니다. 그러나 서버에서 전송한 크레딧 수를 제한할 수 있으므로 한 번에 처리할 수 있는 것보다 더 많은 메시지를 전송하는 생산자가 메모리 부족을 방지할 수 있습니다.
예를 들어 myqueue
라는 자카르타 메시징 큐가 있고 최대 메모리 크기를 10MB로 설정하면 서버는 크기가 10MB를 초과하지 않도록 대기열의 메시지 수를 조정합니다. 주소가 가득 차면 생산자가 주소에서 충분한 공간을 확보할 때까지 클라이언트 측에서 차단됩니다.
생산자 흐름 제어 차단은 생산자를 차단하지 않고 스토리지에 대한 메시지를 페이지하는 페이징에 대한 대체 접근법입니다. 자세한 내용은 Paging 정보를 참조하십시오.
address-setting
구성 요소에는 차단 생산자 흐름 제어를 관리하는 구성이 포함되어 있습니다. address-setting
은 해당 주소에 등록된 모든 큐에 구성 세트를 적용하는 데 사용됩니다. 수행 방법에 대한 자세한 내용은 주소 설정 구성을 참조하십시오.
생산자 흐름 제어를 차단해야 하는 각 address-setting
에 대해 max-size-bytes
특성의 값을 포함해야 합니다. 해당 주소에 바인딩된 모든 큐의 총 메모리는 max-size-bytes
를 초과할 수 없습니다. Jakarta Messaging 주제의 경우 주제의 모든 서브스크립션의 총 메모리는 max-size-bytes
를 초과할 수 없습니다.
또한 address-full-policy
특성을 BLOCK
(차단)으로 설정해야 하므로 서버에서 max- size-bytes
에 도달하는 경우 생산자가 차단되어야 함을 알 수 있습니다. 다음은 두 특성이 모두 설정된 address-setting
의 예입니다.
<address-setting ... name="myqueue" address-full-policy="BLOCK" max-size-bytes="100000" />
<address-setting ...
name="myqueue"
address-full-policy="BLOCK"
max-size-bytes="100000" />
위의 예제에서는 자카르타 메시징 대기열 "myqueue"의 최대 크기를 100000
바이트로 설정합니다. 생산자는 최대 크기에 도달하면 해당 주소로 전송하지 못하도록 차단됩니다.
다음 예제와 같이 관리 CLI를 사용하여 이러한 속성을 설정합니다.
-
지정된
address
설정-setting에 대해 max-size-
bytes
/subsystem=messaging-activemq/server=default/address-setting=myqueue:write-attribute(name=max-size-bytes,value=100000) {"outcome" => "success"}
/subsystem=messaging-activemq/server=default/address-setting=myqueue:write-attribute(name=max-size-bytes,value=100000)
{"outcome" => "success"}
-
지정된
address-
설정setting에 대한 address-full-
policy
/subsystem=messaging-activemq/server=default/address-setting=myqueue:write-attribute(name=address-full-policy,value=BLOCK) {"outcome" => "success"}
/subsystem=messaging-activemq/server=default/address-setting=myqueue:write-attribute(name=address-full-policy,value=BLOCK)
{"outcome" => "success"}
속도 제한 흐름 제어
JBoss EAP 메시징은 다음 예와 같이 connection-factory
에 대해 producer-max-rate
를 지정하는 경우 생산자가 초당 보낼 수 있는 메시지 수를 제한합니다.
<connection-factory name="MyConnFactory" producer-max-rate="1000" />
<connection-factory name="MyConnFactory" producer-max-rate="1000" />
기본값은 -1
로, 속도 제한 흐름 제어를 비활성화합니다.
관리 CLI를 사용하여 producer-max-rate
의 값을 읽고 씁니다. 아래 예제에서는 원격 클라이언트에서 사용할 기본 구성 및 용도인 RemoteConnectionFactory
를 사용합니다.
-
producer-max-rate
특성 값을 읽습니다.
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:read-attribute(name=producer-max-rate) { "outcome" => "success", "result" => -1 }
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:read-attribute(name=producer-max-rate)
{
"outcome" => "success",
"result" => -1
}
-
producer-max-rate
특성 값을 작성합니다.
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=producer-max-rate,value=100) {"outcome" => "success"}
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=producer-max-rate,value=100)
{"outcome" => "success"}
코어 API를 사용하는 경우 ServerLocator.setProducerMaxRate(int producerMaxRate)
메서드를 사용하여 속도를 설정합니다.
JNDI를 사용하여 연결 팩토리를 인스턴스화하고 조회하는 경우 인스턴스화 연결 팩토리의 setProducerMaxRate(int producerMaxRate)
메서드를 사용하여 클라이언트에 최대 속도를 설정할 수 있습니다.
20장. 사전 승인 구성 링크 복사링크가 클립보드에 복사되었습니다!
Jakarta Messaging은 세 가지 승인 모드를 지정합니다.
- AUTO_ACKNOWLEDGE
- CLIENT_ACKNOWLEDGE
- DUPS_OK_ACKNOWLEDGE
경우에 따라 오류 발생 시 메시지를 손실할 수 있으므로 클라이언트에 전달하기 전에 서버의 메시지를 확인하는 것이 좋습니다. 이 추가 모드는 JBoss EAP 메시징에서 지원되며 사전 잠금 모드라고 합니다.
전달하기 전에 서버에서 미리 승인하는 단점은 메시지를 승인한 후 서버의 시스템이 충돌하지만 클라이언트에 배달되기 전에 서버의 시스템이 충돌하면 메시지가 손실된다는 것입니다. 이 경우 메시지가 손실되고 시스템이 다시 시작되면 복구되지 않습니다.
메시징 케이스에 따라 사전 알림 모드는 메시지 손실로 인해 추가 네트워크 트래픽 및 CPU 사용량을 방지할 수 있습니다.
사전 통지의 사용 사례는 주가 업데이트 메시지의 예입니다. 이 메시지를 사용하면 다음 가격 업데이트 메시지가 곧 도착하여 이전 가격을 재정의하므로 충돌이 발생할 경우 메시지를 손실하는 것이 타당할 수 있습니다.
사전 잠금 모드를 사용하는 경우 트랜잭션을 커밋할 때가 아니라 서버에서 먼저 승인되는 메시지에 대한 트랜잭션 의미 체계가 손실됩니다.
20.1. 서버 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음과 같이 관리 CLI를 사용하여 pre-acknowledge 특성을 true
로 설정하여 사전acknowledge
모드를 사용하도록 연결 팩토리를 구성할 수 있습니다.
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=pre-acknowledge,value=true)
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=pre-acknowledge,value=true)
20.2. 클라이언트 구성 링크 복사링크가 클립보드에 복사되었습니다!
Pre-acknowledge 모드는 클라이언트의 JNDI 컨텍스트 환경에서 jndi.properties 파일에서 구성할 수 있습니다.
java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory connection.ConnectionFactory=tcp://localhost:8080?preAcknowledge=true
java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory
connection.ConnectionFactory=tcp://localhost:8080?preAcknowledge=true
또는 Jakarta Messaging API를 사용하여 사전 잠금 모드를 사용하려면 ActiveMQSession.PRE_ACKNOWLEDGE
상수로 자카르타 메시징 세션을 생성합니다.
// messages will be acknowledge on the server *before* being delivered to the client Session session = connection.createSession(false, ActiveMQJMSConstants.PRE_ACKNOWLEDGE);
// messages will be acknowledge on the server *before* being delivered to the client
Session session = connection.createSession(false, ActiveMQJMSConstants.PRE_ACKNOWLEDGE);
21장. 인터셉터 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 메시징은 서버에 들어오고 종료하는 패킷을 가로채는 인터셉터를 지원합니다. 들어오는 인터셉터는 각각 서버를 시작하거나 종료하는 모든 패킷에 대해 호출됩니다. 이렇게 하면 패킷 감사 또는 필터링과 같은 사용자 지정 코드를 실행할 수 있습니다. 인터셉터는 가로채는 패킷을 수정할 수 있습니다. 이로 인해 인터셉터가 강력하지만 잠재적으로 위험할 수 있습니다.
21.1. 인터셉터 구현 링크 복사링크가 클립보드에 복사되었습니다!
인터셉터는 인터셉터 인터페이스를 구현해야 합니다.
반환된 부울 값은 중요합니다.
- true가 반환되면 프로세스가 정상적으로 계속됩니다.
- false가 반환되면 프로세스가 중단되고 다른 인터셉터가 호출되지 않으며 서버에서 패킷이 추가로 처리되지 않습니다.
인터셉터 클래스는 JBoss EAP에 모듈로 추가해야 합니다. 자세한 내용은 JBoss EAP 구성 가이드에서 사용자 지정 모듈 만들기 를 참조하십시오.
21.2. 인터셉터 구성 링크 복사링크가 클립보드에 복사되었습니다!
모듈을 사용자 지정 모듈로 JBoss EAP에 추가한 후 관리 CLI를 사용하여 들어오고 나가는 인터셉터가 메시징 하위 시스템 구성에 추가됩니다.
새 인터셉터 구성이 승인되기 전에 관리자 전용 모드에서 JBoss EAP를 시작해야 합니다. 자세한 내용은 JBoss EAP 구성 가이드에서 관리 전용 모드에서 JBoss EAP 실행을 참조하십시오. 새 구성이 처리되면 서버를 일반 모드로 다시 시작합니다.
각 인터셉터는 아래 예제 관리 CLI 명령에 따라 추가해야 합니다. 이 예제에서는 각 인터셉터가 이미 JBoss EAP에 사용자 지정 모듈로 추가되었다고 가정합니다.
/subsystem=messaging-activemq/server=default:list-add(name=incoming-interceptors, value={name => "foo.bar.MyIncomingInterceptor", module=>"foo.bar.interceptors"})
/subsystem=messaging-activemq/server=default:list-add(name=incoming-interceptors, value={name => "foo.bar.MyIncomingInterceptor", module=>"foo.bar.interceptors"})
아래 예제와 같이 나가는 인터셉터를 추가하는 방법은 유사한 구문을 따릅니다.
/subsystem=messaging-activemq/server=default:list-add(name=outgoing-interceptors, value={name => "foo.bar.MyOutgoingInterceptor", module=>"foo.bar.interceptors"})
/subsystem=messaging-activemq/server=default:list-add(name=outgoing-interceptors, value={name => "foo.bar.MyOutgoingInterceptor", module=>"foo.bar.interceptors"})
22장. 메시지 그룹화 링크 복사링크가 클립보드에 복사되었습니다!
메시지 그룹은 특정 특성을 공유하는 메시지 그룹입니다.
- 메시지 그룹의 모든 메시지는 공통 그룹 ID로 그룹화됩니다. 즉, 공통 그룹 속성으로 식별할 수 있습니다.
- 메시지 그룹의 모든 메시지는 대기열의 고객 수에 관계없이 동일한 소비자가 순차적으로 처리하고 사용합니다. 즉, 고유 그룹 ID가 있는 특정 메시지 그룹은 소비자가 열면 한 소비자가 항상 처리합니다. 소비자가 메시지 그룹을 종료하면 전체 메시지 그룹이 대기열의 다른 소비자로 이동합니다.
메시지 그룹은 그룹 ID와 같은 특정 값의 메시지가 단일 소비자가 직렬로 처리해야 하는 경우 특히 유용합니다.
큐에 페이징이 활성화된 경우 메시지 그룹화가 예상대로 작동하지 않습니다. 메시지 그룹화에 대한 큐를 구성하기 전에 페이징을 비활성화해야 합니다.
메시징 서버 클러스터 내에서 메시지 그룹화를 구성하는 방법에 대한 자세한 내용은 3부에서 Clustered Message Grouping, 여러 메시징 시스템 구성을 참조하십시오.
22.1. 코어 API를 사용하여 메시지 그룹 구성 링크 복사링크가 클립보드에 복사되었습니다!
_AMQ_GROUP_ID
특성은 클라이언트 측의 Core API를 사용하여 메시지 그룹을 식별하는 데 사용됩니다. 임의의 고유한 메시지 그룹 식별자를 선택하려면 SessionFactory
에서 자동 그룹
속성을 true
로 설정할 수도 있습니다.
22.2. 자카르타 메시징을 사용하여 메시지 그룹 구성 링크 복사링크가 클립보드에 복사되었습니다!
JMSXGroupID
속성은 자카르타 메시징 클라이언트의 메시지 그룹을 식별하는 데 사용됩니다. 다른 메시지가 있는 메시지 그룹을 하나의 소비자에게 보내려면 다른 메시지에 대해 동일한 JMSXGroupID
를 설정할 수 있습니다.
대체 방법은 클라이언트에서 사용할 connection-factory의 속성인
중 하나를 사용하는 것입니다.
auto-
group 또는 group-
id
자동 그룹이
true
로 설정되면connection-factory
는 이를 통해 전송된 모든 메시지에 대해 임의의 고유한 메시지 그룹 식별자를 사용하기 시작합니다. 관리 CLI를 사용하여 자동 그룹
특성을 설정할 수 있습니다.
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=auto-group,value=true)
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=auto-group,value=true)
group-id
특성은 연결 팩토리를 통해 전송된 모든 메시지에 대해 지정된 값으로 특성 JMSXGroupID
를 설정합니다. 연결 팩토리에 특정 group-id
를 설정하려면 관리 CLI를 사용합니다.
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=group-id,value="Group-0")
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=group-id,value="Group-0")
23장. 다중 경로 링크 복사링크가 클립보드에 복사되었습니다!
diverts는 JBoss EAP 메시징에 구성된 개체로, 한 주소에서 다른 주소로 메시지를 전환하는 데 도움이 됩니다. dists는 다음 유형으로 분류할 수 있습니다.
- 배타적
- 메시지는 새 주소로만 전환되며 이전 주소로 전송되지 않습니다.
- 제외되지 않음
- 메시지가 이전 주소가 전송되고 복사본도 새 주소로 전송됩니다. 비독점 분산은 메시지 흐름을 분할하는 데 사용할 수 있습니다.
다중 경로는 동일한 서버의 주소로만 메시지를 전환합니다. 다른 서버의 주소로 전환하려는 경우 공통 패턴은 로컬 저장소 및 전달 대기열로 전환한 다음, 해당 대기열에서 사용하는 브리지를 설정하고 다른 서버의 주소로 전달합니다.
따라서 다중 경로는 매우 정교한 개념입니다. 브리지와 결합하면 다중 경로를 사용하여 흥미롭고 복잡한 라우팅을 만들 수 있습니다. 서버의 다중 집합은 메시지의 라우팅 테이블 유형으로 간주할 수 있습니다. 다종과 브리지를 결합하면 여러 지리적으로 분산된 서버 간에 안정적인 라우팅 연결의 분산 네트워크를 생성하여 글로벌 메시징 메시를 만들 수 있습니다. 브리지 사용 방법에 대한 자세한 내용은 코어 브리지 구성을 참조하십시오.
Transformer
및 선택적 메시지 필터를 적용하도록 dists를 구성할 수 있습니다. 선택적 메시지 필터는 지정된 필터와 일치하는 메시지만 전환하는 데 도움이 됩니다. 필터에 대한 자세한 내용은 필터 표현식 및 메시지 선택기를 참조하십시오.
변환기는 메시지를 다른 형식으로 변환하는 데 사용됩니다. 변환기를 지정하면 모든 변조된 메시지가 Transformer
에 의해 변환됩니다. 모든 변환기는 org.apache.activemq.artemis.core.server.cluster.Transformer
인터페이스를 구현해야 합니다.
JBoss EAP 메시징을 활성화하여 변환기 구현 인스턴스를 인스턴스화하려면 JBoss EAP 모듈에 해당 모듈을 포함한 다음 해당 모듈을 org.apache.activemq.artemis
모듈에 내보낸 종속성으로 추가해야 합니다. 사용자 지정 모듈을 생성하는 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드에서 사용자 지정 모듈 만들기를 참조하십시오. 종속 항목을 org.apache.activemq.artemis
모듈에 추가하려면 다음 예제와 같이 EAP_HOME/modules/system/layers/base/org/apache/activemq/artemis/main/module.xml
파일을 열고 <module>
을 <dependencies>
목록에 추가합니다.
23.1. 배타적 다트 링크 복사링크가 클립보드에 복사되었습니다!
다음은 구성에 표시될 수 있는 배타적 변형의 예입니다.
이 예에서는 price -divert
라는 다양한 구분선이 구성되어 있으며, 이 주소는 jms.topic. PriceUpdates
주소로 전송되는 메시지를 priceUpdates
라고 하는 자카르타 메시징 항목에 매핑하고, 다른 로컬 주소 jms.queue.priceForwarding에 해당하며 priceForwarding
이라는 로컬 자카르타 메시징 큐에 매핑됩니다.
또한 New York
값이 있는 메시지 속성이 있는
메시지 필터 문자열도 지정합니다. 다른 모든 메시지는 계속 일반 주소로 라우팅됩니다. 필터 문자열이 지정되지 않은 경우 모든 메시지가 일치하는 것으로 간주됩니다.
변환기 클래스는 지정됩니다. 이 예제에서 변환기는 변동이 발생한 시간을 기록하는 헤더를 추가합니다.
이 예제는 실제로 메시지를 로컬 저장소로 전환하고 대기열을 전달합니다. 이 대기열은 메시지를 다른 서버의 주소로 전달하는 브리지로 구성됩니다. 자세한 내용은 코어 브리지 구성을 참조하십시오.
23.2. 비독점 변형 링크 복사링크가 클립보드에 복사되었습니다!
아래는 비독점 다중 항목의 예입니다. 비 배타적 다각은 필터 및 변환기 선택 옵션으로 독점적인 다각화와 동일한 방식으로 구성할 수 있습니다.
<divert name="order-divert" address="jms.queue.orders" forwarding-address="jms.topic.spytopic" exclusive="false"/>
<divert
name="order-divert"
address="jms.queue.orders"
forwarding-address="jms.topic.spytopic"
exclusive="false"/>
위의 dist는 주문
이라는 자카르타 메시징 큐에 매핑되는 jms.queue.orders
주소로 전송된 모든 메시지의 사본을 받아 javaTopic이라는 자카르타 메시징 항목에 해당하는 jms.topic.SpyTopic
라는 로컬 주소로 전송합니다 .
다중 경로 생성
관리 CLI를 사용하여 원하는 dist 유형을 생성합니다.
/subsystem=messaging-activemq/server=default/divert=my-divert:add(divert-address=news.in,forwarding-address=news.forward)
/subsystem=messaging-activemq/server=default/divert=my-divert:add(divert-address=news.in,forwarding-address=news.forward)
비독점 변형은 기본적으로 생성됩니다. 배타적 특성을 생성하려면 다음 속성을
사용합니다.
/subsystem=messaging-activemq/server=default/divert=my-exclusive-divert:add(divert-address=news.in,forwarding-address=news.forward,exclusive=true)
/subsystem=messaging-activemq/server=default/divert=my-exclusive-divert:add(divert-address=news.in,forwarding-address=news.forward,exclusive=true)
아래 표는 다중 경로의 속성과 해당 설명을 캡처합니다. 다음 명령을 사용하여 관리 CLI에서 이 정보를 표시할 수 있습니다.
/subsystem=messaging-activemq/server=default/divert=*:read-resource-description()
/subsystem=messaging-activemq/server=default/divert=*:read-resource-description()
속성 | 설명 |
---|---|
divert-address | 다른 주소. 필수 항목입니다. |
배타적 | 스위트가 배타적인지 여부, 메시지가 새 주소로 전환되고 이전 주소로 이동하지 않음을 의미합니다. 기본값은 false입니다. |
filter | 선택적 필터 문자열입니다. 지정된 경우 필터 표현식과 일치하는 메시지만 전환합니다. |
forwarding-address | 대체 대상 주소. 필수 항목입니다. |
routing-name | 다중 항목의 라우팅 이름입니다. |
transformer-class-name | 메시지 본문 또는 속성을 전환하기 전에 메시지의 본문 또는 속성을 변환하는 데 사용되는 클래스의 이름입니다. |
24장. 스레드 관리 링크 복사링크가 클립보드에 복사되었습니다!
각 JBoss EAP 메시징 서버는 일반 용도로 단일 스레드 풀과 예약된 사용을 위해 예약된 스레드 풀을 유지 관리합니다. Java 예약 스레드 풀은 표준 스레드 풀을 사용하도록 구성할 수 없습니다. 그렇지 않으면 예약된 작업과 예약되지 않은 활동에 단일 스레드 풀을 사용할 수 있습니다.
JBoss EAP는 차단되지 않은 새로운 NIO를 사용합니다. 기본적으로 JBoss EAP 메시징은 들어오는 패킷을 처리하기 위해. getRuntime().availableProcessors()
에서 보고한 대로 코어 수 또는 하이퍼 스레드 수의 세 배에 해당하는 스레드를 사용합니다. 이 값을 재정의하려면 전송 구성에 thenio -remoting-threads
매개변수를 지정하여 스레드 수를 설정합니다. 자세한 내용은 메시징 전송 구성을 참조하십시오.
24.1. 서버 예약 스레드 풀 링크 복사링크가 클립보드에 복사되었습니다!
서버 예약 스레드 풀은 정기적으로 또는 지연을 사용하여 실행해야 하는 서버 측의 대부분의 활동에 사용됩니다. 내부적으로 java.util.concurrent.ScheduledThreadPoolExecutor 인스턴스에 매핑됩니다.
이 풀에서 사용하는 최대 스레드 수는 scheduled-thread-pool-max-size
매개변수를 사용하여 구성됩니다. 기본값은 5개 스레드입니다. 일반적으로 이 풀에는 소수의 스레드가 충분합니다. 기본 JBoss EAP 메시징 서버에 대해 이 값을 변경하려면 다음 관리 CLI 명령을 사용합니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=scheduled-thread-pool-max-size,value=10)
/subsystem=messaging-activemq/server=default:write-attribute(name=scheduled-thread-pool-max-size,value=10)
24.2. 서버 일반 용도 스레드 풀 링크 복사링크가 클립보드에 복사되었습니다!
일반적인 목적 스레드 풀은 서버 측의 대부분의 비동기 작업에 사용됩니다. 내부적으로 java.util.concurrent.ThreadPoolExecutor
인스턴스에 매핑됩니다.
이 풀에서 사용하는 최대 스레드 수는 thread-pool-max-size
특성을 사용하여 구성됩니다.
thread-pool-max-size
가 -1
로 설정된 경우 스레드 풀에는 상한이 없으며 요청을 처리하는 데 사용 가능한 스레드가 충분하지 않은 경우 필요에 따라 새 스레드가 생성됩니다. 나중에 활동이 대체되면 스레드가 시간 초과되고 닫힙니다.
thread-pool-max-size
가 0보다 큰 양의 정수로 설정되면 스레드 풀이 바인딩됩니다. 요청이 들어와 풀에 사용 가능한 스레드가 없으면 스레드를 사용할 수 있을 때까지 요청이 차단됩니다. 상한이 너무 낮은 경우 교착 상태일 수 있으므로 바인딩된 스레드 풀을 주의해서 사용하는 것이 좋습니다.
thread-pool-max-size
의 기본값은 30
입니다. 기본 JBoss EAP 메시징 서버에 새 값을 설정하려면 다음 관리 CLI 명령을 사용합니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=thread-pool-max-size,value=40)
/subsystem=messaging-activemq/server=default:write-attribute(name=thread-pool-max-size,value=40)
바인딩되지 않은(캐시됨) 및 바인딩된(고정) 스레드 풀에 대한 자세한 내용은 ThreadPoolExecutor
Javadoc 를 참조하십시오.
24.3. 서버 스레드 사용률 모니터링 링크 복사링크가 클립보드에 복사되었습니다!
스레드 사용률을 확인하여 스레드 풀의 크기를 적절하게 구성했는지 확인합니다.
스레드 사용률을 확인하려면 다음 CLI 명령을 실행합니다.
/subsystem=messaging-activemq:read-resource(include-runtime)
/subsystem=messaging-activemq:read-resource(include-runtime)
시스템에서 다음과 유사한 결과를 반환합니다.
사용률 특성 | 설명 |
---|---|
global-client-scheduled-thread-pool-active-count | 현재 작업을 실행하는 모든 ActiveMQ 클라이언트에서 사용 중인 예약된 풀 스레드 수입니다. |
global-client-scheduled-thread-pool-completed-task-count | 서버가 부팅된 이후 모든 ActiveMQ 클라이언트가 실행한 예약된 풀 스레드를 사용하는 작업 수입니다. |
global-client-scheduled-thread-pool-current-thread-count | 모든 Active MQ 클라이언트에서 사용 중인 예약된 풀의 현재 스레드 수입니다. |
global-client-scheduled-thread-pool-keepalive-time | 유휴 상태에서 예약된 스레드 풀에 스레드를 유지하는 시간입니다. |
global-client-scheduled-thread-pool-largest-thread-count | 모든 Active MQ 클라이언트에서 동시에 사용했던 예약된 풀에서 가장 많은 스레드 수. |
global-client-scheduled-thread-pool-max-size | 이 서버 내부에서 실행 중인 모든 ActiveMQ 클라이언트에서 사용하는 예약된 풀의 최대 스레드 수입니다. |
global-client-scheduled-thread-pool-task-count | 모든 Active MQ 클라이언트가 예약한 예약된 스레드 풀의 총 작업 수입니다. |
global-client-thread-pool-active-count | 현재 작업을 실행하는 모든 ActiveMQ 클라이언트가 사용하는 범용 풀 스레드 수입니다. |
global-client-thread-pool-completed-task-count | 모든 ActiveMQ 클라이언트가 실행한 범용 풀 스레드를 사용하는 작업 수입니다. |
global-client-thread-pool-current-thread-count | 모든 Active MQ 클라이언트에서 사용 중인 범용 풀의 현재 스레드 수입니다. |
global-client-thread-pool-keepalive-time | 범용 스레드 풀에서 스레드를 유휴 상태로 유지해야 하는 시간입니다. |
global-client-thread-pool-largest-thread-count | 모든 Active MQ 클라이언트에서 동시에 사용했던 범용 풀에서 가장 많은 스레드 수. |
global-client-thread-pool-max-size | 이 서버 내부에서 실행 중인 모든 ActiveMQ 클라이언트에서 사용하는 범용 풀의 최대 스레드 수입니다. |
global-client-thread-pool-task-count | 모든 Active MQ 클라이언트가 예약한 범용 스레드 풀의 총 작업 수입니다. |
24.4. 만료 리퍼 스레드 링크 복사링크가 클립보드에 복사되었습니다!
단일 스레드는 서버 측에서도 대기열에서 만료된 메시지를 스캔합니다. 이 스레드는 구성 가능한 자체 우선 순위로 실행해야 하므로 스레드 풀 중 하나를 사용할 수 없습니다.
24.5. 비동기 IO 링크 복사링크가 클립보드에 복사되었습니다!
비동기 IO에는 기본 계층에서 이벤트를 수신하고 디스패치하는 스레드 풀이 있습니다. ArtemisMQ-AIO-poller-pool
접두사가 있는 스레드 덤프에 있습니다. JBoss EAP 메시징은 저널에서 열린 파일당 하나의 스레드를 사용합니다(일반적으로 한 개).
libaio에서 쓰기를 호출하는 데 사용되는 단일 스레드도 있습니다. 성능 문제를 일으키는 libaio에서 컨텍스트 전환을 피하도록 수행됩니다. 이 스레드는 ArtemisMQ-AIO-writer-pool
접두사가 있는 스레드 덤프에서 확인할 수 있습니다.
24.6. 클라이언트 스레드 관리 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP에는 클라이언트 연결을 생성하는 데 사용되는 클라이언트 스레드 풀이 포함되어 있습니다. 이 풀은 이 장의 앞부분에서 언급한 정적 풀과 별개이며 클라이언트처럼 작동하는 경우 JBoss EAP에서 사용합니다. 예를 들어 클라이언트 스레드 풀 클라이언트는 동일한 클러스터에 있는 다른 노드와 클러스터 연결로 생성되거나 Artemis 리소스 어댑터가 JBoss EAP의 원격 인스턴스에 통합된 원격 Apache ActiveMQ Artemis 메시징 서버에 연결됩니다. 예약된 클라이언트 스레드에 대한 풀도 있습니다.
JBoss EAP 7.1이 릴리스되면서 클라이언트 스레드는 활동 없이 60초 후에 시간 초과됩니다.
관리 CLI를 사용하여 클라이언트 스레드 풀 크기 설정
관리 CLI를 사용하여 클라이언트 스레드 풀과 클라이언트 예약 스레드 풀의 크기를 구성합니다. 관리 CLI를 사용하여 설정한 풀 크기는 시스템 속성을 사용하여 설정된 크기보다 우선합니다.
아래 명령은 클라이언트 스레드 풀을 설정합니다.
/subsystem=messaging-activemq:write-attribute(name=global-client-thread-pool-max-size,value=POOL_SIZE)
/subsystem=messaging-activemq:write-attribute(name=global-client-thread-pool-max-size,value=POOL_SIZE)
이 속성에 대해 정의된 기본값은 없습니다. 특성이 정의되지 않은 경우 풀의 최대 크기는 CPU 코어 프로세서 수의 8 (8)로 결정됩니다.
현재 설정을 검토하려면 다음 명령을 사용합니다.
/subsystem=messaging-activemq:read-attribute(name=global-client-thread-pool-max-size)
/subsystem=messaging-activemq:read-attribute(name=global-client-thread-pool-max-size)
클라이언트 예약 스레드 풀 크기는 다음 명령을 사용하여 설정됩니다.
/subsystem=messaging-activemq:write-attribute(name=global-client-scheduled-thread-pool-max-size,value=POOL_SIZE)
/subsystem=messaging-activemq:write-attribute(name=global-client-scheduled-thread-pool-max-size,value=POOL_SIZE)
다음은 클라이언트 예약 스레드 풀의 현재 풀 크기를 표시합니다. 기본값은 5
입니다.
/subsystem=messaging-activemq:read-attribute(name=global-client-scheduled-thread-pool-max-size)
/subsystem=messaging-activemq:read-attribute(name=global-client-scheduled-thread-pool-max-size)
시스템 속성을 사용하여 클라이언트 스레드 풀 크기 설정
다음 시스템 속성을 사용하여 클라이언트의 글로벌 및 글로벌 예약 스레드 풀 크기를 각각 설정할 수 있습니다.
-
activemq.artemis.client.global.thread.pool.max.size
-
activemq.artemis.client.global.scheduled.thread.pool.core.size
아래 예제와 같이 시스템 속성을 XML 구성에서 참조할 수 있습니다.
관리 CLI를 사용하여 설정된 풀 크기는 시스템 속성으로 설정된 크기보다 우선합니다.
자체 스레드 풀을 사용하도록 클라이언트 구성
클라이언트는 JBoss EAP에서 제공하는 풀을 사용하지 않고 자체 클라이언트 스레드 풀을 사용하도록 각 ClientSessionFactory
인스턴스를 구성할 수 있습니다. 해당 세션에서 ClientSessionFactory
를 생성한 모든 세션은 새로 생성된 풀을 사용합니다.
자체 풀을 사용하도록 ClientSessionFactory
인스턴스를 구성하려면 팩토리를 만든 직후 적절한 setter 메서드를 호출합니다. 예를 들면 다음과 같습니다.
ServerLocator locator = ActiveMQClient.createServerLocatorWithoutHA(transportConfiguration); locator.setUseGlobalPools(true); locator.setThreadPoolMaxSize(-1); locator.setScheduledThreadPoolMaxSize(10); ClientSessionFactory myFactory = locator.createSessionFactory();
ServerLocator locator = ActiveMQClient.createServerLocatorWithoutHA(transportConfiguration);
locator.setUseGlobalPools(true);
locator.setThreadPoolMaxSize(-1);
locator.setScheduledThreadPoolMaxSize(10);
ClientSessionFactory myFactory = locator.createSessionFactory();
Jakarta Messaging API를 사용하는 경우 ClientSessionFactory
에서 동일한 매개변수를 설정할 수 있습니다. 예를 들면 다음과 같습니다.
ActiveMQConnectionFactory myConnectionFactory = ActiveMQJMSClient.createConnectionFactory(url, "ConnectionFactoryName"); myConnectionFactory.setUseGlobalPools(false); myConnectionFactory.setScheduledThreadPoolMaxSize(10); myConnectionFactory.setThreadPoolMaxSize(-1);
ActiveMQConnectionFactory myConnectionFactory = ActiveMQJMSClient.createConnectionFactory(url, "ConnectionFactoryName");
myConnectionFactory.setUseGlobalPools(false);
myConnectionFactory.setScheduledThreadPoolMaxSize(10);
myConnectionFactory.setThreadPoolMaxSize(-1);
JNDI를 사용하여 ActiveMQConnectionFactory
인스턴스를 인스턴스화하는 경우 JBoss EAP의 독립 실행형 인스턴스에 대해 아래 제공된 예제와 같이 관리 CLI를 사용하여 이러한 매개변수를 설정할 수도 있습니다.
/subsystem=messaging-activemq/server=default/connection-factory=myConnectionFactory:write-attribute(name=use-global-pools,value=false) /subsystem=messaging-activemq/server=default/connection-factory=myConnectionFactory:write-attribute(name=scheduled-thread-pool-max-size,value=10) /subsystem=messaging-activemq/server=default/connection-factory=myConnectionFactory:write-attribute(name=thread-pool-max-size,value=1)
/subsystem=messaging-activemq/server=default/connection-factory=myConnectionFactory:write-attribute(name=use-global-pools,value=false)
/subsystem=messaging-activemq/server=default/connection-factory=myConnectionFactory:write-attribute(name=scheduled-thread-pool-max-size,value=10)
/subsystem=messaging-activemq/server=default/connection-factory=myConnectionFactory:write-attribute(name=thread-pool-max-size,value=1)
위의 각 명령을 실행한 후에는 관리 CLI에서 인스턴스를 다시 로드해야 한다는 메시지를 표시합니다.
25장. 중복 메시지 탐지 구성 링크 복사링크가 클립보드에 복사되었습니다!
발신자가 메시지를 다른 서버로 보내는 경우 메시지를 보낸 후 대상 서버 또는 연결이 실패할 수 있지만, 프로세스가 성공했음을 나타내는 발신자에 대한 응답을 보내기 전에. 이러한 상황에서는 발신자가 메시지가 의도한 수신자에게 전송되었는지 여부를 결정하는 것은 매우 어렵습니다. 발신자가 마지막 메시지를 다시 보내는 경우 중복 메시지가 주소로 보내질 수 있습니다.
애플리케이션이 중복된 메시지를 필터링하는 논리를 제공하지 않도록 JBoss EAP 메시징에서 중복 메시지 탐지를 구성할 수 있습니다.
25.1. 메시지 전송에 중복 메시지 감지 사용 링크 복사링크가 클립보드에 복사되었습니다!
전송된 메시지에 대해 중복된 메시지 탐지를 사용하려면 org.apache.activemq.artemis.api.core.Message.HDR_DUPLICATE_DE¢TION
속성 값을 고유한 값으로 설정해야 합니다. 대상 서버에서 메시지를 받으면 _ID
_AMQ_DUPL_ID
속성이 설정된 경우 메모리 캐시를 확인하여 해당 헤더의 값이 있는 메시지를 이미 수신했는지 확인합니다. 있는 경우 이 메시지는 무시됩니다. 자세한 내용은 Duplicate ID Cache 구성을 참조하십시오.
_AMQ_DUPL_ID
속성 값은 코어 API를 사용하는 경우 type byte[]
또는 SimpleString
일 수 있습니다. Jakarta Messaging을 사용하는 경우 문자열
이어야 합니다.
다음 예제에서는 핵심 API의 속성을 설정하는 방법을 보여줍니다.
SimpleString myUniqueID = "This is my unique id"; // Can use a UUID for this ClientMessage message = session.createMessage(true); message.setStringProperty(HDR_DUPLICATE_DETECTION_ID, myUniqueID);
SimpleString myUniqueID = "This is my unique id"; // Can use a UUID for this
ClientMessage message = session.createMessage(true);
message.setStringProperty(HDR_DUPLICATE_DETECTION_ID, myUniqueID);
다음 예제에서는 Jakarta Messaging 클라이언트의 속성을 설정하는 방법을 보여줍니다.
String myUniqueID = "This is my unique id"; // Can use a UUID for this Message jmsMessage = session.createMessage(); message.setStringProperty(HDR_DUPLICATE_DETECTION_ID.toString(), myUniqueID);
String myUniqueID = "This is my unique id"; // Can use a UUID for this
Message jmsMessage = session.createMessage();
message.setStringProperty(HDR_DUPLICATE_DETECTION_ID.toString(), myUniqueID);
복제된 메시지는 동일한 트랜잭션 내에 전송되면 탐지되지 않습니다 _DUPLICATE_DE¢TION_ID
속성.
25.2. 중복 ID 캐시 구성 링크 복사링크가 클립보드에 복사되었습니다!
서버는 각 주소로 전송되는 _AMQ_DUPL_ID
속성 값의 캐시를 유지 관리합니다. 각 주소는 자체 주소 캐시를 유지 관리합니다.
캐시는 크기 측면에서 수정되었습니다. 캐시의 최대 크기는 id-cache-size
특성을 사용하여 구성됩니다. 이 매개 변수의 기본값은 20000
요소입니다. 캐시에 최대 크기가 n
개의 요소인 경우 저장된 (n+ 1)번째
ID는 캐시의 요소 0
을 덮어씁니다. 값은 다음 관리 CLI 명령을 사용하여 설정됩니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=id-cache-size,value=SIZE)
/subsystem=messaging-activemq/server=default:write-attribute(name=id-cache-size,value=SIZE)
또한 캐시를 디스크에 지속하도록 구성할 수도 있습니다. 이 작업은 다음 관리 CLI 명령을 사용하여 persist-id-cache
특성을 설정하여 구성할 수 있습니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=persist-id-cache,value=true)
/subsystem=messaging-activemq/server=default:write-attribute(name=persist-id-cache,value=true)
이 값을 true
로 설정하면 각 ID가 수신되는 영구 스토리지에 유지됩니다. 이 매개변수의 기본값은 true
입니다.
메시지를 다시 전송해도 캐시에 저장된 이전에 전송된 메시지를 덮어쓰지 않도록 중복 ID 캐시의 크기를 큰 크기로 설정합니다.
26장. Slow 소비자 처리 링크 복사링크가 클립보드에 복사되었습니다!
서버 측 대기열을 사용하는 느린 소비자는 서버 성능에 큰 문제가 발생할 수 있습니다. 메시지는 소비자의 서버 측 대기열에 누적되므로 메모리 사용량이 증가합니다. 결과적으로 서버에서 페이징 모드로 전환하여 성능에 부정적인 영향을 줄 수 있습니다. 또 다른 중요한 문제는 consumer-windows-size
특성이 0
보다 크면 클라이언트의 메시지 버퍼로 전송된 메시지가 계속 사용될 때까지 대기할 수 있다는 점입니다. 메시지를 신속하게 사용하지 않는 소비자가 서버와 연결을 끊을 수 있도록 기준을 설정할 수 있습니다.
느린 소비자가 MDB인 경우 JBoss EAP 서버는 연결을 관리합니다. MDB가 연결이 끊기면 MDB가 사용 중인 큐로 메시지가 반환되고 MDB가 자동으로 다시 연결되고, 이때 메시지가 대기열의 모든 MDB에 다시 부하가 분산됩니다. 이 같은 프로세스에는 지속적 주제에 대한 MDB 수신 대기가 포함됩니다. 자카르타 메시징 소비자의 경우 속도가 느리면 연결이 끊어지고 reconnects -attempts가
연결됩니다.
-1
로 설정되었거나 0
보다 큰 경우에만 다시
구성할 수 없는 자카르타 메시징 가입자 또는 비내구성 서브스크립션이 있는 MDB의 경우 연결이 끊어져 서브스크립션이 제거됩니다. 비내구성 구독자가 다시 연결되면 복원 불가능한 새 서브스크립션이 생성되고 토픽에 전송된 새 메시지만 사용됩니다.
소비자가 느린지 여부를 결정하는 계산에서는 특정 소비자가 인정한 메시지 수만 검사합니다. 예를 들어 흐름 제어가 소비자에서 활성화되었는지 또는 소비자가 큰 메시지를 스트리밍하는지 여부는 고려하지 않습니다. 느린 소비자 탐지를 구성할 때 이 점을 유념하십시오.
느린 소비자 점검은 예약된 스레드 풀을 사용하여 수행됩니다. 소비자 탐지 속도가 느린 서버의 각 대기열은 내부 java.util.concurrent.ScheduledThreadPoolExecutor
인스턴스에서 새 항목을 생성합니다. 대기열 수가 많고 slow-consumer-check-period
가 비교적 낮은 경우 일부 검사를 실행하는 데 지연이 발생할 수 있습니다. 그러나 탐지 알고리즘에 사용된 계산의 정확성에는 영향을 미치지 않습니다. 이 스레드 풀에 대한 자세한 내용은 스레드 관리를 참조하십시오.
느린 소비자 처리는 주소 설정 기반으로 이루어집니다
. address-setting 구성에 대한 자세한 내용은 주소
설정을 참조하십시오. address-setting
속성 목록은 부록을 참조하십시오. 느린 소비자를 처리하는 데는 세 가지 특성이 사용됩니다. 사용자:
- slow-consumer-check-period
-
느린 소비자에 대해 확인하는 빈도(초)입니다. 기본값은
5
입니다. - slow-consumer-policy
느린 소비자를 식별할 때 발생하는 상황을 결정합니다. 유효한 옵션은
KILL
또는NOTIFY
입니다 :-
KILL
은 소비자 연결을 종료하여 동일한 연결을 사용하는 모든 클라이언트 스레드에 영향을 미칩니다. -
NOTIFY
는CONSUMER_SLOW
관리 알림을 클라이언트에 보냅니다.
기본값은
NOTIFY
입니다.-
- slow-consumer-threshold
-
소비자가 느리기 전에 허용되는 최소 메시지 사용률입니다. 기본값은 바인딩되지 않은
-1
입니다.
관리 CLI를 사용하여 속성의 현재 값을 읽습니다. 예를 들어 다음 명령을 사용하여 이름이 myAddress
인 address
를 읽습니다.
-setting에 대한 현재 slow-
consumer-policy
/subsystem=messaging-activemq/server=default/address-setting=myAddress:read-attribute(name=slow-consumer-policy)
/subsystem=messaging-activemq/server=default/address-setting=myAddress:read-attribute(name=slow-consumer-policy)
마찬가지로 다음 예제를 사용하여 동일한 slow-consumer-policy
를 설정합니다.
/subsystem=messaging-activemq/server=default/address-setting=myAddress:write-attribute(name=slow-consumer-policy,value=<NEW_VALUE>)
/subsystem=messaging-activemq/server=default/address-setting=myAddress:write-attribute(name=slow-consumer-policy,value=<NEW_VALUE>)
III 부. 멀티노드 메시징 시스템 구성 링크 복사링크가 클립보드에 복사되었습니다!
27장. 자카르타 메시징 브리지 구성 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 메시징에는 소스 대상의 메시지를 가져와 일반적으로 다른 서버에서 대상 대상으로 보내는 Jakarta 메시징 브리지가 포함되어 있습니다.
Jakarta Messaging 브리지는 각 링크가 소스와 아래에 정의된 대상으로 구성된 대상 매핑을 지원합니다.
- 소스는 자카르타 메시징 브리지가 메시지를 수신하는 대상을 정의합니다. 소스는 Jakarta 메시징 공급자에 대한 연결을 생성하는 연결 팩토리와 해당 공급자의 메시지 소스 대상으로 구성됩니다.
- 대상은 자카르타 메시징 브리지가 소스에서 수신한 메시지를 보내는 대상을 정의합니다. 대상은 Jakarta 메시징 공급자에 대한 연결을 생성하는 연결 팩토리와 해당 공급자의 메시지 대상 대상으로 구성됩니다.
소스 대상이 주제인 경우 Jakarta Messaging 브리지는 서브스크립션을 생성합니다. client-id
및 subscription-name
특성이 Jakarta Messaging 브리지에 대해 구성된 경우 서브스크립션이 지속됩니다. 즉, Jakarta Messaging 브리지가 중지된 후 다시 시작하면 메시지가 누락되지 않습니다.
소스 및 대상 서버가 같은 클러스터에 없어도 되기 때문에 브리징은 한 클러스터에서 다른 클러스터, 예를 들어 WAN, 연결이 불안정할 수 있는 메시지를 안정적으로 보내는 데 적합합니다.
자카르타 메시징 브리지와 코어 브리지를 혼동하지 마십시오. Jakarta Messaging 브리지를 사용하여 두 Jakarta Messaging-1.1 호환 공급자를 연결하고 Jakarta Messaging API를 사용할 수 있습니다. 구성 핵심 브리지 는 두 개의 JBoss EAP 메시징 인스턴스를 브리지하는 데 사용되며 코어 API를 사용합니다. 가능한 경우 자카르타 메시징 브리지 대신 코어 브릿지를 사용합니다.
JBoss EAP Jakarta 메시징 브리지 구성 예
위의 예제 구성에서 Jakarta Messaging 브리지는 connection-factory
특성을 사용하여 다음 두 연결을 생성합니다.
- 수신된 메시지의 원래 대상을 정의하는 source-context.
- target-context - 메시지를 수신하는 대상 대상을 정의합니다.
Apache ActiveMQ Artemis 또는 Red Hat AMQ에서 제공하는 기본 구현을 사용하여 JNDI(Java Naming and Directory Interface)를 사용하여 연결 팩토리를 검색할 수 있습니다. 다른 애플리케이션 서버 또는 Jakarta 메시징 공급자의 경우 org.apache.activemq.artemis.jms.bridge.ConnectionFactoryFactory
인터페이스를 구현하여 새 구현을 제공할 수 있습니다.
관리 CLI를 사용하여 자카르타 메시징 브리지 추가
자카르타 메시징 브리지는 다음 관리 CLI 명령을 사용하여 추가할 수 있습니다. 소스 및 대상 대상은 구성에 이미 정의되어 있어야 합니다. 구성 가능한 속성의 전체 목록은 부록의 표를 참조하십시오.
/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:add(quality-of-service=AT_MOST_ONCE,module=org.apache.activemq.artemis,failure-retry-interval=500,max-retries=1,max-batch-size=10,max-batch-time=100,source-connection-factory=ConnectionFactory,source-destination=jms/queue/InQueue,source-context={},target-connection-factory=jms/RemoteConnectionFactory,target-destination=jms/queue/OutQueue,target-context={java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory,java.naming.provider.url=http-remoting://192.168.40.1:8080})
/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:add(quality-of-service=AT_MOST_ONCE,module=org.apache.activemq.artemis,failure-retry-interval=500,max-retries=1,max-batch-size=10,max-batch-time=100,source-connection-factory=ConnectionFactory,source-destination=jms/queue/InQueue,source-context={},target-connection-factory=jms/RemoteConnectionFactory,target-destination=jms/queue/OutQueue,target-context={java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory,java.naming.provider.url=http-remoting://192.168.40.1:8080})
다음 예제와 같이 관리 CLI에서 read-resource
명령을 사용하여 Jakarta Messaging 브리지의 구성을 검토할 수 있습니다.
/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:read-resource
/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:read-resource
다음 예와 같이 write-attribute
를 사용하여 Jakarta Messaging 브리지에 구성을 추가합니다.
/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:write-attribute(name=ATTRIBUTE,value=VALUE)
/subsystem=messaging-activemq/jms-bridge=my-jms-bridge:write-attribute(name=ATTRIBUTE,value=VALUE)
관리 콘솔을 사용하여 자카르타 메시징 브리지 추가
관리 콘솔을 사용하여 다음 단계에 따라 자카르타 메시징 브리지를 추가할 수도 있습니다.
- 브라우저에서 관리 콘솔을 열고 구성 → 하위 시스템 → 메시징 (ActiveMQ) → JMS 브리지로 이동합니다.
- Add (+)(추가(+)) 버튼을 클릭하고 메시지가 표시되면 필요한 정보를 제공합니다.
- 완료되면 Add(추가) 를 클릭합니다.
27.1. 서비스 품질 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP에서 QoS (Quality-of-service
)는 메시지 사용 및 승인 방법을 결정하는 구성 가능한 속성입니다. QoS (Quality -of-service
) 및 해당 설명에 유효한 값은 아래에 있습니다. Jakarta Messaging 브리지 속성의 전체 목록은 부록의 표를 참조하십시오.
- AT_MOST_ONCE
메시지는 소스에서 최대 한 번에 대상에 도달합니다. 메시지는 소스에서 사용되고 대상에 보내기 전에 승인됩니다. 따라서 소스에서 제거하거나 대상에 도착하는 사이에 오류가 발생할 경우 메시지가 손실될 수 있습니다. 이 모드가 기본값입니다.
이 모드는 지속적 및 비내구성 메시지에 모두 사용할 수 있습니다.
- DUPLICATES_OK
메시지는 소스에서 사용되고 대상에 성공적으로 전송된 후 승인됩니다. 따라서 초기 메시지가 전송된 후 승인되기 전에 오류가 발생할 경우 메시지가 다시 전송될 수 있습니다.
이 모드는 지속적 및 비내구성 메시지에 모두 사용할 수 있습니다.
- ONCE_AND_ONLY_ONCE
메시지는 소스에서 한 번만 대상에 도달합니다. 소스와 대상이 모두 동일한 서버 인스턴스에 있는 경우 동일한 로컬 트랜잭션에서 메시지를 보내고 승인하여 이를 수행할 수 있습니다. 소스와 대상이 다른 서버에 있는 경우 자카르타 트랜잭션에서 전송 및 소비 세션을 등록하면 됩니다. 이 트랜잭션은 브리지에서 set
TransactionManager() 메서드를 사용하여 설정해야
하는 트랜잭션 관리자를 통해 제어합니다.이 모드는 지속적 메시지에만 사용할 수 있습니다.
주의서비스 품질
특성이ONCE_AND_ONLY_ONCE
로 설정된 자카르타 Messaging 브리지가 배포된 서버를 종료할 때 예기치 않은 오류가 발생하지 않도록 자카르타 메시징 브리지를 사용하여 서버를 종료해야 합니다.
ONCE_AND_ONLY_ONCE
대신 DUPLICATES_OK
모드를 사용한 다음 대상에서 중복을 확인하고 폐기하여 한 번만 의미 체계를 제공할 수 있습니다. 자세한 내용은 Duplicate Message Detection 구성을 참조하십시오. 그러나 캐시는 특정 기간 동안만 유효합니다. 따라서 이 접근 방식은 ONCE_AND_ONLY_ONCE
를 사용하는 것만큼 완전하지 않지만 특정 애플리케이션 요구 사항에 따라 선택하는 것이 좋습니다.
27.2. 시간 제한 및 자카르타 메시징 브리지 링크 복사링크가 클립보드에 복사되었습니다!
특정 시점에 대상 또는 소스 서버를 사용할 수 없는 경우가 있습니다. 이 경우 브리지는 max-retries
값과 동일한 횟수를 다시 연결하려고 합니다. 시도 사이의 대기는 failure-retry-interval
로 설정됩니다.
각 Jakarta Messaging 브리지에는 자체 max-retries
매개 변수가 있으므로 reconnect-attempts
매개 변수를 설정하지 않는 연결 팩토리를 사용하거나 0
으로 설정해야 합니다. 이렇게 하면 재연결 시간이 길어질 수 있는 잠재적인 충돌이 방지됩니다. 또한 서비스 품질이
ONCE_AND_ONLY_ONCE로 설정된 자카르타 메시징 브리지에서 참조하는 연결 팩토리는
합니다.
팩토리 유형을 XA_
GENERIC, XA_
TOPIC 또는
로 설정해야XA_
QUEUE
27.3. RemoteConnectionFactory 예외 해결 링크 복사링크가 클립보드에 복사되었습니다!
자카르타 메시징 메시지 브릿지를 구성할 때 RemoteConnectionFactory
예외가 발생할 수 있습니다. 이 예외를 해결하려면 다음 단계 중 하나 또는 모두를 수행합니다.
-
필요한 경우 Java 2 Platform Enterprise Edition (J2EE) 구성 요소, 비 J2EE 구성 요소 또는 원격 구성 요소 내에서 클라이언트 연결에 따라 URL 접두사
java:/jboss/exported
를 추가합니다. 다음과 같이 연결 팩토리에 대해 두 개의 Java Naming 및 Directory Interface 이름을 사용합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow spring 8080 구성 파일의 다음 코드 조각을 사용합니다.
<jee:jndi-lookup id="jmsConnectionFactory" jndi-name="java:/ConnectionFactory" expected-type="javax.jms.ConnectionFactory" lookup-on-startup="false" />
<jee:jndi-lookup id="jmsConnectionFactory" jndi-name="java:/ConnectionFactory" expected-type="javax.jms.ConnectionFactory" lookup-on-startup="false" />
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고lookup-on-startup
및jndi-name
속성의 값은 애플리케이션에 따라 변경될 수 있습니다.
28장. 코어 브리지 구성 링크 복사링크가 클립보드에 복사되었습니다!
브리지의 기능은 한 대상의 메시지를 사용하여 일반적으로 다른 JBoss EAP 메시징 서버에 있는 다른 대상에 전달하는 것입니다.
소스 및 대상 서버가 같은 클러스터에 없어도 되기 때문에 브리징은 한 클러스터에서 다른 클러스터, 예를 들어 WAN 또는 인터넷 및 연결이 불안정할 수 있는 메시지를 안정적으로 보내는 데 적합합니다.
브리지는 장애 복구 기능이 내장되어 있으므로 대상 서버 연결이 네트워크 오류와 같이 손실된 경우 브리지는 다시 온라인 상태가 될 때까지 대상에 다시 연결을 시도합니다. 다시 온라인 상태가 되면 정상적으로 작업을 재개합니다.
브리지는 두 개의 개별 JBoss EAP 메시징 서버를 안정적으로 연결하는 방법입니다. 코어 브리지를 사용하는 경우 소스와 대상 서버는 모두 JBoss EAP 7 메시징 서버여야 합니다.
핵심 브리지를 자카르타 메시징 브리지와 혼동하지 마십시오. 코어 브리지는 두 개의 JBoss EAP 메시징 인스턴스를 연결하는 데 사용되며 코어 API를 사용합니다. Jakarta Messaging 브리지 는 두 개의 Jakarta Messaging 2.0 호환 Jakarta Messaging 공급자를 연결하는 데 사용할 수 있으며 Jakarta Messaging API를 사용합니다. 가능한 자카르타 메시징 브리지 대신 코어 브리지를 사용하는 것이 좋습니다.
다음은 JBoss EAP 메시징 코어 브리지의 구성 예입니다.
이 코어 브리지는 다음 관리 CLI 명령을 사용하여 추가할 수 있습니다. 핵심 브리지를 정의할 때 큐 이름과
을 정의해야 합니다. 구성 가능한 속성의 전체 목록은 부록의 표를 참조하십시오.
static-
connectors 또는 discovery-
group
/subsystem=messaging-activemq/server=default/bridge=my-core-bridge:add(static-connectors=[bridge-connector],queue-name=jms.queue.InQueue)
/subsystem=messaging-activemq/server=default/bridge=my-core-bridge:add(static-connectors=[bridge-connector],queue-name=jms.queue.InQueue)
28.1. 중복 탐지를 위한 코어 브리지 구성 링크 복사링크가 클립보드에 복사되었습니다!
메시지를 타겟에 전달하기 전에 메시지에 아직 없는 경우 고유한 중복 ID 값을 자동으로 추가하도록 코어 브리지를 구성할 수 있습니다. 중복 메시지 탐지를 위해 코어 브리지를 구성하려면 use-duplicate-detection
특성을 기본값인 true
로 설정합니다.
/subsystem=messaging-activemq/server=default/bridge=my-core-bridge:write-attribute(name=use-duplicate-detection,value=true)
/subsystem=messaging-activemq/server=default/bridge=my-core-bridge:write-attribute(name=use-duplicate-detection,value=true)
29장. 클러스터 개요 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 메시징 클러스터를 사용하면 메시지 처리 로드를 공유하기 위해 JBoss EAP 메시징 서버 그룹을 함께 그룹화할 수 있습니다. 클러스터의 각 활성 노드는 자체 메시지를 관리하고 자체 연결을 처리하는 활성 JBoss EAP 메시징 서버입니다.
서로 다른 버전의 JBoss EAP로 구성된 혼합 클러스터는 messaging-activemq
하위 시스템에서 지원되지 않습니다. 메시징 클러스터를 구성하는 서버는 모두 동일한 버전의 JBoss EAP를 사용해야 합니다.
클러스터는 JBoss EAP 구성 파일의 다른 노드에 대한 클러스터 연결을 선언하는 각 노드에 의해 구성됩니다. 노드가 다른 노드에 대한 클러스터 연결을 만들 때 자체와 다른 노드 간에 코어 브리지 연결을 내부적으로 생성합니다. 이 작업은 백그라운드에서 투명하게 수행됩니다. 각 노드에 대해 명시적인 브리지를 선언할 필요가 없습니다. 이러한 클러스터 연결을 통해 메시지를 클러스터의 노드 간에 전달하여 부하를 분산할 수 있습니다.
클러스터링의 중요한 부분은 서버가 클라이언트 또는 기타 서버가 최소 구성으로 연결할 수 있도록 연결 세부 정보를 브로드캐스트할 수 있는 서버 검색 입니다.
또한 이 섹션에서는 클러스터의 노드 전체에서 클라이언트 연결의 균형을 맞추기 위한 클라이언트 측 부하 분산 및 메시지 재배포 에 대해 설명합니다. 여기서 JBoss EAP 메시징은 노드 간에 메시지를 재배포하여 사용을 방지합니다.
클러스터 노드가 구성되면 대칭 클러스터를 생성하기 위해 해당 구성을 다른 노드에 복사하기만 하면 됩니다.
실제로 예기치 않은 오류가 발생하지 않도록 클러스터의 각 노드는 다음 요소에 대해 동일한 구성을 공유해야 합니다.
- cluster-connection
- broadcast-group
- discovery-group
- 대기열 및 토픽을 포함한 address-settings
그러나 JBoss EAP 메시징 파일을 복사할 때는 주의해야 합니다. 메시징 데이터, 바인딩, 저널, 대규모 메시지 디렉터리를 한 노드에서 다른 노드로 복사하지 마십시오. 클러스터 노드를 처음으로 시작하고 저널 파일을 초기화하면 저널 디렉터리에 특수 식별자가 유지됩니다. 클러스터가 올바르게 구성되려면 노드에서 식별자가 고유해야 합니다.
29.1. 서버 검색 링크 복사링크가 클립보드에 복사되었습니다!
서버 검색은 서버가 연결 세부 정보를 전파할 수 있는 메커니즘입니다.
메시징 클라이언트
메시징 클라이언트는 클러스터의 서버가 한 번에 가동되는지에 대한 구체적인 지식 없이 클러스터의 서버에 연결할 수 있기를 원합니다.
기타 서버
클러스터의 서버는 클러스터에 있는 다른 모든 서버에 대한 사전 지식 없이 서로 클러스터 연결을 생성할 수 있어야 합니다.
이 정보 또는 클러스터 토폴로지는 클라이언트 및 클러스터 연결을 통해 다른 서버로 일반 JBoss EAP 메시징 연결을 중심으로 전송됩니다. 그러나 초기 첫 번째 연결을 설정하는 방법이 필요합니다. 이 작업은 UDP 및 JGroups와 같은 동적 검색 기술을 사용하거나 초기 커넥터의 정적 목록을 제공하여 수행할 수 있습니다.
29.1.1. 브로드캐스트 그룹 링크 복사링크가 클립보드에 복사되었습니다!
브로드캐스트 그룹은 서버가 네트워크를 통해 커넥터를 브로드캐스트하는 수단입니다. 커넥터 는 클라이언트 또는 기타 서버에서 서버에 연결할 수 있는 방법을 정의합니다.
브로드캐스트 그룹은 일련의 커넥터를 가져와서 네트워크에서 브로드캐스트합니다. 클러스터를 구성하는 브로드캐스트 기술에 따라 UDP 또는 JGroups를 사용하여 커넥터 쌍 정보를 브로드캐스트합니다.
브로드캐스트 그룹은 서버 구성의 messaging-activemq
하위 시스템에서 정의됩니다. JBoss EAP 메시징 서버당 여러 개의 브로드캐스트 그룹이 있을 수 있습니다.
UDP를 사용하여 방송 그룹 설정
다음은 UDP 브로드캐스트 그룹을 정의하는 메시징 서버의 구성 예입니다. 이 구성은 messaging-group
소켓 바인딩을 사용합니다.
이 구성은 다음 관리 CLI 명령을 사용하여 수행할 수 있습니다.
messaging-group
소켓 바인딩을 추가합니다./socket-binding-group=standard-sockets/socket-binding=messaging-group:add(interface=private,port=5432,multicast-address=231.7.7.7,multicast-port=9876)
/socket-binding-group=standard-sockets/socket-binding=messaging-group:add(interface=private,port=5432,multicast-address=231.7.7.7,multicast-port=9876)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 브로드캐스트 그룹을 추가합니다.
/subsystem=messaging-activemq/server=default/broadcast-group=my-broadcast-group:add(socket-binding=messaging-group,broadcast-period=2000,connectors=[http-connector])
/subsystem=messaging-activemq/server=default/broadcast-group=my-broadcast-group:add(socket-binding=messaging-group,broadcast-period=2000,connectors=[http-connector])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
JGroups를 사용하여 방송 그룹 구성
아래는 UDP를 사용하는 기본 JGroups 브로드캐스트 그룹을 사용하는 브로드캐스트 그룹을 정의하는 메시징 서버의 구성 예입니다. JGroups를 브로드캐스트에 사용할 수 있으려면 jgroups-channel
을 설정해야 합니다.
다음 관리 CLI 명령을 사용하여 구성할 수 있습니다.
/subsystem=messaging-activemq/server=default/broadcast-group=my-broadcast-group:add(connectors=[http-connector],jgroups-cluster=activemq-cluster)
/subsystem=messaging-activemq/server=default/broadcast-group=my-broadcast-group:add(connectors=[http-connector],jgroups-cluster=activemq-cluster)
브로드캐스트 그룹 속성
아래 표에는 브로드캐스트 그룹의 구성 가능한 속성이 나열되어 있습니다.
속성 | 설명 |
---|---|
broadcast-period | 연속 브로드캐스트 간 기간(밀리초)입니다. |
커넥터 | 브로드캐스트할 커넥터의 이름입니다. |
jGroups-channel |
클러스터를 구성하기 위해 |
jgroups-cluster | 브로드캐스트 그룹과 검색 그룹 간의 통신에 사용되는 논리 이름입니다. 특정 브로드캐스트 그룹에서 메시지를 수신하려는 검색 그룹은 브로드캐스트 그룹에서 사용하는 동일한 클러스터 이름을 사용해야 합니다. |
jgroups-stack |
클러스터를 구성하는 데 사용되는 중요
|
socket-binding | 브로드캐스트 그룹 소켓 바인딩입니다. |
29.1.2. 검색 그룹 링크 복사링크가 클립보드에 복사되었습니다!
브로드캐스트 그룹은 서버에서 커넥터 정보를 브로드캐스트하는 방법을 정의하지만, 검색 그룹은 브로드캐스트 엔드포인트에서 커넥터 정보를 수신하는 방법을 정의합니다(예: UDP 멀티캐스트 주소 또는 JGroup 채널).
검색 그룹은 다른 서버에서 각 브로드캐스트마다 하나씩 커넥터 목록을 유지 관리합니다. 특정 서버에서 브로드캐스트 끝점에서 브로드캐스트 엔드포인트에서 브로드캐스트를 수신하면 해당 서버의 목록에서 해당 항목을 업데이트합니다. 시간 동안 특정 서버에서 브로드캐스트를 받지 않은 경우 목록에서 서버의 항목을 제거합니다.
검색 그룹은 JBoss EAP 메시징의 두 위치에서 사용됩니다.
- 토폴로지를 다운로드하기 위한 초기 연결을 얻는 방법을 알 수 있도록 클러스터 연결 사용.
- 클라이언트를 메시징하여 토폴로지를 다운로드하기 위한 초기 연결을 얻는 방법을 알 수 있습니다.
검색 그룹이 항상 브로드캐스트를 수락하지만 사용 가능한 라이브 및 백업 서버의 현재 목록은 초기 연결이 완료된 경우에만 사용됩니다. 그 결과 에서 서버 검색은 일반적인 JBoss EAP 메시징 연결을 통해 수행됩니다.
각 검색 그룹은 브로드캐스트 그룹 대응과 일치하는 브로드캐스트 끝점(UDP 또는 JGroups)으로 구성해야 합니다. 예를 들어 브로드캐스트 그룹이 UDP를 사용하여 구성된 경우 검색 그룹은 UDP 및 동일한 멀티캐스트 주소를 사용해야 합니다.
29.1.2.1. 서버에서 검색 그룹 설정 링크 복사링크가 클립보드에 복사되었습니다!
검색 그룹은 서버 구성의 messaging-activemq
하위 시스템에서 정의됩니다. JBoss EAP 메시징 서버당 검색 그룹이 여러 개 있을 수 있습니다.
UDP를 사용하여 검색 그룹 설정
다음은 UDP 검색 그룹을 정의하는 메시징 서버의 구성 예입니다. 이 구성은 messaging-group
소켓 바인딩을 사용합니다.
이 구성은 다음 관리 CLI 명령을 사용하여 수행할 수 있습니다.
messaging-group
소켓 바인딩을 추가합니다./socket-binding-group=standard-sockets/socket-binding=messaging-group:add(interface=private,port=5432,multicast-address=231.7.7.7,multicast-port=9876)
/socket-binding-group=standard-sockets/socket-binding=messaging-group:add(interface=private,port=5432,multicast-address=231.7.7.7,multicast-port=9876)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 검색 그룹을 추가합니다.
/subsystem=messaging-activemq/server=default/discovery-group=my-discovery-group:add(socket-binding=messaging-group,refresh-timeout=10000)
/subsystem=messaging-activemq/server=default/discovery-group=my-discovery-group:add(socket-binding=messaging-group,refresh-timeout=10000)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
JGroups를 사용하여 검색 그룹 구성
다음은 JGroups 검색 그룹을 정의하는 메시징 서버의 구성 예입니다.
다음 관리 CLI 명령을 사용하여 구성할 수 있습니다.
/subsystem=messaging-activemq/server=default/discovery-group=my-discovery-group:add(refresh-timeout=10000,jgroups-cluster=activemq-cluster)
/subsystem=messaging-activemq/server=default/discovery-group=my-discovery-group:add(refresh-timeout=10000,jgroups-cluster=activemq-cluster)
검색 그룹 속성
아래 표에는 검색 그룹의 구성 가능한 속성이 나열되어 있습니다.
속성 | 설명 |
---|---|
initial-wait-timeout | 최초 브로드캐스트가 클러스터에 하나 이상의 노드를 제공할 때까지 대기하는 기간(밀리초)입니다. |
jGroups-channel |
클러스터를 구성하기 위해 |
jgroups-cluster | 브로드캐스트 그룹과 검색 그룹 간의 통신에 사용되는 논리 이름입니다. 특정 브로드캐스트 그룹에서 메시지를 수신하려는 검색 그룹은 브로드캐스트 그룹에서 사용하는 동일한 클러스터 이름을 사용해야 합니다. |
jgroups-stack |
클러스터를 구성하는 데 사용되는 중요
|
새로 고침 시간 제한 | 검색 그룹이 특정 서버에서 마지막 브로드캐스트를 수신한 후 대기하는 동안 기다린 후 목록에서 서버의 커넥터 쌍 항목을 제거합니다. |
socket-binding | 검색 그룹 소켓 바인딩입니다. |
위에서 설명한 JGroups 특성과 UDP별 특성은 서로 배타적입니다. 검색 그룹 구성에 하나의 집합만 지정할 수 있습니다.
29.1.2.2. 클라이언트 측에서 검색 그룹 구성 링크 복사링크가 클립보드에 복사되었습니다!
자카르타 메시징 또는 핵심 API를 사용하여 연결할 수 있는 서버 목록을 검색하도록 JBoss EAP 메시징 클라이언트를 구성할 수 있습니다.
자카르타 메시징을 사용하여 클라이언트 검색 구성
Jakarta Messaging을 사용하는 클라이언트는 JNDI로 관련 ConnectionFactory
를 조회할 수 있습니다. connection-factory 또는
의 pooled-
connection-factoryentries
특성은 팩토리가 노출될 JNDI 이름을 지정합니다. 다음은 JNDI로 조회할 원격 클라이언트에 대해 구성된 ConnectionFactory
의 예입니다.
java:jboss/exported
네임스페이스에 바인딩된 JNDI 이름만 원격 클라이언트에 사용할 수 있다는 점을 기억해야 합니다. connection-factory
에 java:jboss/exported
네임스페이스에 바인딩된 항목이 있는 경우 원격 클라이언트는 java:jboss/exported
다음에 있는 텍스트를 사용하여 connection-factory
를 조회합니다. 예를 들어 RemoteConnectionFactory
는 기본적으로 java:jboss/exported/jms/RemoteConnectionFactory
에 바인딩됩니다. 즉 원격 클라이언트가 jms/RemoteConnectionFactory
를 사용하여 이 연결
팩토리를 조회합니다. pooled-connection-factory
는 원격 클라이언트에 적합하지 않기 때문에 java:jboss/exported
네임스페이스에 바인딩 된 항목이
없어야 합니다.
Jakarta Messaging 2.0 이후 기본 Jakarta Messaging 연결 팩토리는 JNDI 이름 java:comp/DefaultJMSConnectionFactory
아래 Jakarta EE 애플리케이션에서 액세스할 수 있습니다. JBoss EAP messaging-activemq
하위 시스템은 이 기본 연결 팩토리를 제공하는 데 사용되는 pooled-connection-factory
를 정의합니다. 이 pooled-connection-factory
의 매개변수 변경 사항은 JNDI 이름 java:comp/DefaultJMSConnectionFactory
에서 기본 자카르타 메시징 공급자를 찾는 자카르타 EE 애플리케이션에서 고려합니다. 다음은 *-full 및
프로필에 정의된 기본 풀링된 연결 팩토리입니다.
*-full-
ha
코어 API를 사용하여 클라이언트 검색 구성
코어 API를 사용하여 ClientSessionFactory
인스턴스를 직접 인스턴스화하는 경우 세션 팩토리를 생성할 때 직접 검색 그룹 매개변수를 지정할 수 있습니다. 예를 들면 다음과 같습니다.
DiscoveryGroupConfiguration
에서 setDiscoveryRefreshTimeout()
setter 메서드를 사용하여 기본값이 10000
밀리초인 refresh-timeout
값을 설정할 수 있습니다.
DiscoveryGroupConfiguration
에서 setDiscoveryInitialWaitTimeout()
setter 메서드를 사용하여 첫 번째 세션을 만들기 전에 세션 팩토리가 대기하는 시간을 결정하는 initial-wait-timeout
값을 설정할 수도 있습니다. 기본값은 10000
밀리초입니다.
29.1.3. 정적 검색 링크 복사링크가 클립보드에 복사되었습니다!
네트워크에서 UDP를 사용할 수 없거나 사용하지 않으려는 경우 하나 이상의 서버의 초기 목록으로 연결을 구성할 수 있습니다.
이는 모든 서버를 호스팅할 위치를 알아야 한다는 것을 의미하지는 않습니다. 이러한 서버를 신뢰할 수 있는 서버에 연결하도록 구성하고 해당 서버를 통해 전달된 연결 세부 정보를 설정할 수 있습니다.
클러스터 연결 구성
클러스터 연결의 경우 는 추가 구성이 필요하지 않습니다. 모든 커넥터가 일반적인 방식으로 정의되었는지 확인해야 합니다. 그런 다음 클러스터 연결 구성에서 이를 참조합니다.
클라이언트 연결 구성
클라이언트가 사용할 수 있는 서버의 정적 목록도 사용할 수 있습니다.
자카르타 메시징을 사용하여 클라이언트 검색 구성
Jakarta Messaging에서 정적 검색을 사용하는 권장 방법은 여러 커넥터(클러스터의 고유한 노드를 가리키는)를 사용하여 연결
팩토리를 구성하고 클라이언트가 JNDI를 사용하여 ConnectionFactory를 조회하도록 하는 것입니다. 다음은 그러한 커넥션 팩토리를 나타내는 구성 조각입니다
:
위의 예에서 http-connector
는 로컬 서버를 가리키는 HTTP 커넥터(<http-connector>
)이며 http-node1
은 server node1
을 가리키는 HTTP 커넥터입니다. 서버 구성에서 커넥터를 구성하는 방법은 커넥터 및 수락자 섹션 을 참조하십시오.
코어 API를 사용하여 클라이언트 검색 구성
코어 API를 사용하는 경우 클러스터의 각 서버에 대해 고유한 TransportConfiguration
을 생성하여 아래 예제 코드와 같이 ServerLocator
생성을 담당하는 메서드에 전달합니다.
29.1.4. 기본manila 값 링크 복사링크가 클립보드에 복사되었습니다!
이전에는-2021:2 -defaults.xml
파일을 검토하여 시간이 많이 걸리는 기본 Manila 값을 찾아야 했습니다. 검토 편의를 위해 Red Hat은 다음과 같은 기본manila 값을 나열했습니다.
29.2. 서버 측 메시지 로드 밸런싱 링크 복사링크가 클립보드에 복사되었습니다!
클러스터의 노드 간에 클러스터 연결이 정의된 경우 JBoss EAP 메시징은 클라이언트에서 특정 노드에 도착하는 메시지를 부하 분산합니다.
메시징 클러스터 연결은 다른 노드에 일치하는 소비자가 있는지 여부에 관계없이 라운드 로빈 방식으로 메시지를 부하 분산하도록 구성할 수 있습니다. 일치하는 소비자가 있는 경우에만 다른 노드에 배포하도록 구성할 수도 있습니다. 자세한 내용은 Message Redistribution(메시지 재배포 ) 섹션을 참조하십시오.
클러스터 연결 구성
클러스터 연결은 클러스터의 노드 간에 메시지를 부하 분산할 수 있도록 클러스터로 서버를 그룹화합니다. 클러스터 연결은 cluster-connection
요소를 사용하여 JBoss EAP 서버 구성에 정의됩니다.
Red Hat은 messaging-activemq
하위 시스템 내에서 하나의 cluster-connection
만 사용할 수 있도록 지원합니다.
다음은 * -
입니다. 전체 속성 목록은 클러스터 연결 속성 에서 참조하십시오.
full 및
connection*-full-
ha 프로필에 정의된 기본 cluster-
클러스터 연결 위에 표시된 경우 "jms"로 시작하는 주소로 전송된 메시지를 부하 분산합니다. 이 클러스터 연결은 기본적으로 "jms" 하위 문자열로 시작하는 핵심 큐에 매핑되므로 모든 Jakarta Messaging 대기열과 토픽에 적용됩니다.
클러스터 연결을 사용하여 패킷이 차단되고 승인 대기 중인 경우, call-timeout
특성은 예외를 발생하기 전에 응답 대기 시간을 지정합니다. 기본값은 30000
입니다. 예를 들어, 원격 자카르타 메시징 브로커가 네트워크에서 연결이 끊어지고 트랜잭션이 불완전한 경우 연결이 다시 설정될 때까지 스레드가 정지될 수 있습니다. 이 상황을 방지하려면 call-failover-timeout 속성을 call-timeout
특성과 함께 사용하는 것이 좋습니다 .
페일오버 시도 중에 호출이 수행되면 call-failover-timeout
속성이 사용됩니다. 기본값은 -1
이므로 시간 초과가 없습니다. 클라이언트 페일오버에 대한 자세한 내용은 자동 클라이언트 페일오버를 참조하십시오.
또는 클러스터 연결을 통해 검색에 정적 서버 목록을 사용하려면 static-connectors
특성을 사용할 수 있습니다. 예를 들면 다음과 같습니다.
이 예에서는 하나 이상의 서버를 사용할 수 있다는 것을 알고 있는 두 개의 서버가 정의되어 있습니다. 클러스터에 더 많은 서버가 있을 수 있지만 초기 연결이 이루어지면 이러한 커넥터 중 하나를 사용하여 검색할 수 있습니다.
중복 탐지를 위한 클러스터 연결 구성
클러스터 연결은 내부적으로 코어 브리지 를 사용하여 클러스터의 노드 간에 메시지를 이동합니다. 중복 메시지 탐지를 위해 클러스터 연결을 구성하려면 use-duplicate-detection
특성을 기본값인 true
로 설정합니다.
/subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:write-attribute(name=use-duplicate-detection,value=true)
/subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:write-attribute(name=use-duplicate-detection,value=true)
클러스터 사용자 인증 정보
클러스터 노드 간 연결을 생성하여 클러스터 연결을 구성할 때 JBoss EAP 메시징은 클러스터 사용자와 암호를 사용합니다.
다음 관리 CLI 명령을 사용하여 클러스터 사용자 및 암호를 설정할 수 있습니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=cluster-user,value="NewClusterUser") /subsystem=messaging-activemq/server=default:write-attribute(name=cluster-password,value="NewClusterPassword123")
/subsystem=messaging-activemq/server=default:write-attribute(name=cluster-user,value="NewClusterUser")
/subsystem=messaging-activemq/server=default:write-attribute(name=cluster-password,value="NewClusterPassword123")
JBoss EAP 구성 파일의 messaging-activemq
하위 시스템에 다음 XML 내용을 추가합니다.
cluster-user
의 기본값은 ACTIVEMQ.CLUSTER.ADMIN.USER
이며 cluster-password
의 기본값은 CHANGE ME입니다
. 이러한 값이 기본값에서 변경되거나 원격 클라이언트가 기본값을 사용하여 서버를 연결할 수 있어야 합니다. 기본값에서 변경되지 않으면 JBoss EAP 메시징에서 이를 탐지하고 모든 시작 시 경고를 표시합니다.
cluster-credential-reference 특성을 사용하여 클러스터
암호를 설정하는 대신 인증 정보 저장소를 참조할 수도 있습니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=cluster-credential-reference,value={clear-text=SecretStorePassword})
/subsystem=messaging-activemq/server=default:write-attribute(name=cluster-credential-reference,value={clear-text=SecretStorePassword})
29.3. 클라이언트 측 로드 밸런싱 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 메시징 클라이언트 측 부하 분산을 사용하면 단일 세션 팩토리를 사용하여 생성한 후속 세션을 클러스터의 다른 노드에 연결할 수 있습니다. 이렇게 하면 세션이 클러스터의 노드에 원활히 분배되고 특정 노드에서는 축소되지 않습니다.
클라이언트 팩토리에서 사용하는 로드 밸런싱 정책을 선언하는 권장 방법은 <connection
특성을 설정하는 것입니다. JBoss EAP 메시징은 바로 사용할 수 있는 기본 로드 밸런싱 정책을 제공하며, 자체 로드 밸런싱 정책을 구현할 수도 있습니다.
-factory> 리소스의 connection-load-balancing-policy-class-
name
- 라운드 로빈
이 정책을 사용하면 첫 번째 노드를 임의로 선택한 다음 각 후속 노드를 동일한 순서로 순차적으로 선택합니다.
예를 들어 B, C, D, A,
B
,C
,D
,A
,B
또는D
,A
,B
,C
,D
,A
,B
,C, C
순서로 노드를 선택할 수 있습니다.
org.apache.activemq.artemis.api.core.client.loadbalance.RoundRobinConnectionLoadBalancingPolicy
를connection-load-balancing-policy-class-name
으로 사용합니다.- 임의
이 정책을 사용하면 각 노드가 임의로 선택됩니다.
org.apache.activemq.artemis.api.core.client.loadbalance.RandomConnectionLoadBalancingPolicy
를connection-load-balancing-policy-class-name
으로 사용합니다.- 임의의 스티키
이 정책을 사용하면 첫 번째 노드가 임의로 선택한 다음 후속 연결에 재사용됩니다.
org.apache.activemq.artemis.api.core.client.loadbalance.RandomStickyConnectionLoadBalancingPolicy
를connection-load-balancing-policy-class-name
으로 사용합니다.- 첫 번째 요소
이 정책에서 첫 번째 또는 0번째를 사용하면 노드가 항상 반환됩니다.
org.apache.activemq.artemis.api.core.client.loadbalance.FirstElementConnectionLoadBalancingPolicy
를connection-load-balancing-policy-class-name
으로 사용합니다.
org.apache.activemq.artemis.api.core.client.loadbalance.ConnectionLoadBalancingPolicy 인터페이스를 구현하여 자체 정책을 구현할 수도 있습니다.
29.4. 메시지 재배포 링크 복사링크가 클립보드에 복사되었습니다!
메시지 재배포를 사용하면 소비자가 일치하지 않는 클러스터의 다른 노드로 다시 소비자가 없는 대기열에서 메시지를 자동으로 재배포하도록 JBoss EAP 메시징을 구성할 수 있습니다. 이 기능을 활성화하려면 클러스터 연결의 message-load-balancing-type
을 기본값인 ON_DEMAND
로 설정해야 합니다. 다음 관리 CLI 명령을 사용하여 설정할 수 있습니다.
/subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:write-attribute(name=message-load-balancing-type,value=ON_DEMAND)
/subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:write-attribute(name=message-load-balancing-type,value=ON_DEMAND)
메시지 재배포는 큐의 마지막 소비자가 종료된 직후에 시작되도록 구성하거나 큐의 마지막 소비자가 재배포하기 전에 구성 가능한 지연을 대기하도록 구성할 수 있습니다. 이는 redistribution -delay 특성을
사용하여 구성됩니다.
redistribution -delay 특성을 사용하여 마지막 소비자가 대기열에서 종료된 후 대기할 때까지 대기할 시간(밀리초)을 해당 큐에서 일치하는 클러스터의 다른 노드로 재배포
합니다. 기본값인 -1
값은 메시지가 재배포되지 않음을 의미합니다. 값이 0
이면 메시지가 즉시 재배포됩니다.
기본 JBoss EAP 구성의 address-setting
은 redistribution -delay 값을
하기 전에 1000밀리초 동안 기다립니다.
1000
으로 설정합니다. 즉, 메시지를 재배포
소비자가 종료하는 일반적인 사례이므로 재배포하기 전에 지연을 도입하는 것이 바람직하지만 다른 하나는 동일한 큐에 빠르게 생성됩니다. 이 경우 새 소비자가 곧 도착하므로 즉시 재배포하고 싶지 않을 수 있습니다.
다음은 "jms"로 시작하는 주소에 바인딩된 큐 또는 항목에 대해 redistribution
의 예입니다. 이 경우 메시지가 즉시 재배포됩니다.
-delay
를 0
으로 설정하는 address-setting
이 주소 설정은 다음 관리 CLI 명령을 사용하여 추가할 수 있습니다.
/subsystem=messaging-activemq/server=default/address-setting=jms.#:add(redistribution-delay=1000)
/subsystem=messaging-activemq/server=default/address-setting=jms.#:add(redistribution-delay=1000)
29.5. 클러스터 메시지 그룹화 링크 복사링크가 클립보드에 복사되었습니다!
이 기능은 지원되지 않습니다.
클러스터형 그룹화는 일반 메시지 그룹화 와 관련된 다른 접근 방식을 따릅니다. 클러스터에서 특정 그룹 ID가 있는 메시지 그룹은 모든 노드에 도착할 수 있습니다. 노드에서 어떤 그룹의 ID가 어떤 노드의 어떤 소비자에 바인딩되어 있는지를 결정하는 것이 중요합니다. 각 노드는 메시지 그룹이 기본적으로 도착하는 위치와 관계없이 해당 그룹 ID를 처리하는 소비자가 해당 그룹 ID를 처리하는 노드로 올바르게 라우팅하는 메시지 그룹을 담당합니다. 지정된 그룹 ID가 있는 메시지가 클러스터에서 지정된 노드에 연결된 특정 소비자에게 전송되면 소비자가 연결이 끊긴 경우에도 해당 메시지는 다른 노드로 전송되지 않습니다.
이러한 상황은 그룹화 핸들러에서 처리합니다. 각 노드에는 그룹화 핸들러가 있으며, 이 그룹화 핸들러(다른 핸들러와 함께)는 메시지 그룹을 올바른 노드로 라우팅합니다. 핸들러 그룹화에는 다음 두 가지 유형이 있습니다. LOCAL
및 REMOTE
.
로컬 핸들러는 메시지 그룹에서 사용해야 하는 경로를 결정합니다. 원격 핸들러는 로컬 핸들러와 통신하고 적절하게 작동합니다. 각 클러스터는 로컬 그룹화 핸들러가 있으려면 특정 노드를 선택해야 하며 다른 모든 노드에 원격 핸들러가 있어야 합니다.
메시지 그룹화를 클러스터에서 사용하는 경우 원격 그룹화 핸들러로 구성된 노드가 실패하면 중단됩니다. 원격 그룹화 핸들러에 대한 백업을 설정하는 것은 올바르지 않습니다.
메시지 그룹을 처음 수신하는 노드는 일반 클러스터 라우팅 조건(round-robin queue Availability)에 따라 라우팅 결정을 내립니다. 노드는 제안 사항을 수락하는 경우 메시지를 제안된 큐로 라우팅하는 각 그룹화 핸들러에게 이 결정을 제안합니다.
그룹화 핸들러가 제안을 거부하면 다른 경로를 제안하고 그에 따라 라우팅이 수행됩니다. 다른 노드는 모음을 따르고 메시지 그룹을 선택한 큐로 전달합니다. 메시지가 큐에 도착하면 해당 큐의 고객에게 고정됩니다.
관리 CLI를 사용하여 그룹화 핸들러를 구성할 수 있습니다. 다음 명령은 주소 news.europe.#
을 사용하여 LOCAL
그룹화 핸들러를 추가합니다.
/subsystem=messaging-activemq/server=default/grouping-handler=my-group-handler:add(grouping-handler-address="news.europe.#",type=LOCAL)
/subsystem=messaging-activemq/server=default/grouping-handler=my-group-handler:add(grouping-handler-address="news.europe.#",type=LOCAL)
이 작업을 수행하려면 서버를 다시 로드해야 합니다.
reload
reload
아래 표에는 grouping-handler
의 구성 가능한 속성이 나열되어 있습니다.
속성 | 설명 |
---|---|
group-timeout |
|
grouping-handler-address | 클러스터 연결 및 사용하는 주소에 대한 참조입니다. |
Reaper-period |
리퍼를 실행하여 시간 초과된 그룹 바인딩이 있는지 확인하는 빈도(로컬 핸들러에 |
timeout | 처리 결정을 내릴 때까지 기다리는 시간입니다. 이 시간 초과에 도달하면 전송 중에 예외가 발생하여 엄격한 순서가 유지됩니다. |
type |
핸들러가 의사 결정을 수행하는 클러스터의 단일 로컬 핸들러인지 또는 로컬 핸들러와 연결된 원격 핸들러인지 여부입니다. 가능한 값은 |
29.5.1. 클러스터된 메시지 그룹화 모범 사례 링크 복사링크가 클립보드에 복사되었습니다!
클러스터형 그룹화에 대한 몇 가지 모범 사례는 다음과 같습니다.
- 정기적으로 소비자를 생성하고 닫는 경우 소비자가 다른 노드에 균등하게 배포되도록 합니다. 일단 큐가 고정되면 해당 큐에서 고객을 제거하는 것에 관계없이 메시지가 해당 큐로 자동으로 전송됩니다.
- 메시지 그룹이 바인딩된 큐를 제거하려면 메시지를 전송하는 세션에서 큐를 삭제해야 합니다. 이렇게 하면 다른 노드가 제거된 후 이 대기열로 메시지를 라우팅하지 않습니다.
- 장애 조치 메커니즘으로 항상 로컬 그룹화 핸들러가 있는 노드를 복제합니다.
29.6. 메시징 클러스터 시작 및 중지 링크 복사링크가 클립보드에 복사되었습니다!
ActiveMQ Artemis 클러스터를 구성하도록 JBoss EAP 7.4 서버를 구성하는 경우, 클러스터 실행 중인 서버에 연결된 다른 서버 및 클라이언트가 있을 수 있습니다. 클러스터에서 실행 중인 JBoss EAP 7.4 서버를 종료하기 전에 연결된 클라이언트와 서버를 먼저 종료하는 것이 좋습니다. 서버가 모든 연결을 닫을 수 있는 충분한 시간을 제공하고 닫는 동안 오류가 발생하지 않게 하려면 병렬로 이 작업을 수행해야 합니다. ActiveMQ Artemis는 클러스터 노드의 자동 축소를 지원하지 않으며 모든 클러스터 노드가 다시 시작될 것으로 예상합니다.
서버를 시작할 때도 마찬가지입니다. 먼저 ActiveMQ Artemis 클러스터에서 JBoss EAP 7.4 서버를 시작해야 합니다. 시작이 완료되면 클러스터에 연결하는 다른 서버 및 클라이언트를 시작할 수 있습니다.
30장. 고가용성 링크 복사링크가 클립보드에 복사되었습니다!
고가용성은 하나 이상의 서버가 실패한 후에도 시스템이 계속 작동하도록 하는 기능입니다.
고가용성의 일부는 클라이언트 애플리케이션이 계속 작동하도록 서버 장애 발생 시 클라이언트 연결이 한 서버에서 다른 서버로 마이그레이션할 수 있는 페일오버입니다.
영구 메시지 데이터만 장애 조치(failover) 후에도 유지됩니다. 영구적이지 않은 메시지 데이터는 페일오버 후 사용할 수 없습니다.
30.1. 라이브 / 백업 쌍 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 7 메시징을 사용하면 각 라이브 서버에 백업이 있는 백업 쌍으로 서버를 라이브로 연결할 수 있습니다. 라이브 서버는 클라이언트로부터 메시지를 수신하지만, 페일오버가 발생할 때까지 백업 서버가 작동하지 않습니다. 백업 서버는 하나의 라이브 서버에서만 소유할 수 있으며 패시브 모드로 유지되므로 라이브 서버의 작업을 계속할 수 있습니다.
라이브 서버와 백업 서버 사이에는 일대일 관계가 있습니다. 라이브 서버에는 하나의 백업 서버만 있을 수 있으며 하나의 라이브 서버에서만 백업 서버를 소유할 수 있습니다.
실시간 서버가 충돌하거나 올바른 모드로 꺼지면 현재 패시브 모드에 있는 백업 서버가 새로운 라이브 서버가 됩니다. 새 라이브 서버가 자동 장애 복구를 허용하도록 구성된 경우 이전 라이브 서버가 백업되고 자동으로 중지되어 이전 라이브 서버에서 메시지를 다시 수신할 수 있습니다.
한 쌍의 라이브/백업 서버만 배포하는 경우 백업 인스턴스가 메시지를 적극적으로 처리하지 않으므로 쌍 앞에 있는 로드 밸런서를 효과적으로 사용할 수 없습니다. 또한 JNDI 및 Undertow 웹 서버와 같은 서비스는 백업 서버에서 활성화되지 않습니다. 이러한 이유로 백업 메시징 서버로 사용되는 JBoss EAP 인스턴스에 JEE 애플리케이션을 배포하는 것은 지원되지 않습니다.
30.1.1. 저널 동기화 링크 복사링크가 클립보드에 복사되었습니다!
HA를 복제 저널로 구성하면 백업이 라이브 서버와 동기화될 때까지 시간이 걸립니다.
동기화가 완료되었는지 확인하려면 CLI에서 다음 명령을 제출합니다.
/subsystem=messaging-activemq/server=default/ha-policy=replication-master:read-attribute(name=synchronized-with-backup)
/subsystem=messaging-activemq/server=default/ha-policy=replication-master:read-attribute(name=synchronized-with-backup)
결과가 true
이면 동기화가 완료됩니다.
라이브 서버를 종료하는 것이 안전한지 확인하려면 CLI에서 다음 명령을 제출합니다.
/subsystem=messaging-activemq/server=default/ha-policy=replication-slave:read-attribute(name=synchronized-with-live)
/subsystem=messaging-activemq/server=default/ha-policy=replication-slave:read-attribute(name=synchronized-with-live)
결과가 true
이면 라이브 서버를 종료하는 것이 안전합니다.
30.2. HA 정책 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 메시징은 서버를 백업하기 위한 복제 및 공유 저장소라는 두 가지 전략을 지원합니다. 서버
구성 요소의 ha-policy
특성을 사용하여 선택한 정책을 지정된 서버에 할당합니다. ha-policy
에는 4 개의 유효한 값이 있습니다.
-
replication-master
-
replication-slave
-
shared-store-master
-
shared-store-slave
위 화면과 같이 값은 서버가 데이터 복제 또는 공유 저장소 ha 정책을 사용하는지 여부와 마스터 또는 슬레이브 역할을 수행하는지 여부를 지정합니다.
관리 CLI를 사용하여 선택한 서버에 ha-policy
를 추가합니다.
아래 예제에서는 standalone-full-ha
구성 프로필을 사용하여 JBoss EAP를 실행한다고 가정합니다.
/subsystem=messaging-activemq/server=SERVER/ha-policy=POLICY:add
/subsystem=messaging-activemq/server=SERVER/ha-policy=POLICY:add
예를 들어 다음 명령을 사용하여 replication-master
정책을 기본
서버에 추가합니다.
/subsystem=messaging-activemq/server=default/ha-policy=replication-master:add
/subsystem=messaging-activemq/server=default/ha-policy=replication-master:add
replication-master
정책은 기본값으로 구성됩니다. 정책을 추가할 때 기본 구성을 재정의할 값을 포함할 수 있습니다. 관리 CLI 명령을 사용하여 현재 구성을 읽습니다. 현재 구성에서는 다음 기본 구문을 사용합니다.
/subsystem=messaging-activemq/server=SERVER/ha-policy=POLICY:read-resource
/subsystem=messaging-activemq/server=SERVER/ha-policy=POLICY:read-resource
예를 들어, 다음 명령을 사용하여 위에서 기본
서버에 추가된 replication-master
정책의 현재 구성을 읽습니다. 기본 구성을 강조 표시하기 위해 출력도 포함되어 있습니다.
30.3. 데이터 복제 링크 복사링크가 클립보드에 복사되었습니다!
복제를 사용하면 라이브 및 백업 서버 쌍이 동일한 데이터 디렉터리를 공유하지 않으며 네트워크를 통해 모든 데이터 동기화가 수행됩니다. 따라서 라이브 서버에서 수신하는 모든 (영구) 데이터가 백업에 복제됩니다.
라이브 서버가 완전히 종료되면 백업 서버가 활성화되고 클라이언트가 백업으로 장애 조치됩니다. 이 동작은 미리 결정되므로 데이터 복제를 사용할 때 구성할 수 없습니다.
백업 서버는 먼저 교체하기 전에 먼저 라이브 서버의 모든 기존 데이터를 동기화해야 합니다. 공유 스토리지와 달리, 복제 백업은 시작 후 즉시 완전히 작동하지 않습니다. 동기화가 진행되는 데 걸리는 시간은 동기화할 데이터 양과 네트워크 속도에 따라 다릅니다. 또한 백업이 시작될 때 클라이언트가 initial-replication-sync-timeout
기간 동안 차단됩니다. 이 시간 초과가 경과하면 동기화가 완료되지 않았더라도 클라이언트는 차단 해제됩니다.
장애 조치에 성공하면 백업의 저널이 라이브 서버의 데이터보다 최신 데이터를 저장하기 시작합니다. 장애 조치를 수행하도록 원래 라이브 서버를 구성하고 다시 시작되면 라이브 서버가 될 수 있습니다. 장애 복구는 라이브 서버가 다시 온라인 상태가 되기 전에 백업과 라이브 서버 간에 데이터를 동기화합니다.
두 서버가 모두 종료된 경우 관리자는 최신 데이터가 있는 서버의 저널을 확인해야 합니다. 백업 저널에 최신 데이터가 있는 경우 해당 저널을 라이브 서버에 복사합니다. 그렇지 않으면 백업이 라이브 서버에서 오래된 저널 데이터를 복제하고 자체 저널 데이터를 삭제합니다. 라이브 서버의 데이터가 최신인 경우 작업을 수행할 필요가 없으며 정상적으로 서버를 시작할 수 있습니다.
대기 시간이 길고 잠재적으로 불안정한 네트워크로 인해 데이터 센터 간에 고가용성을 위해 복제된 저널을 구성하고 사용하는 것은 권장되거나 지원되지 않습니다.
실시간 및 백업 쌍 복제는 클러스터의 일부여야 합니다. cluster-connection
구성 요소는 백업 서버가 실시간 일치를 찾는 방법을 정의합니다.
이러한 위험을 제거할 수는 없지만 복제에는 네트워크 격리의 위험을 줄이기 위해 최소 3개의 실시간/백업 쌍이 필요합니다. 3개 이상의 라이브/백업 쌍을 사용하는 경우 클러스터에서 쿼럼 투표를 사용하여 두 개의 라이브 브로커를 사용하지 않도록 할 수 있습니다.
cluster-connection
을 구성할 때 다음 세부 사항을 기억하십시오.
- 라이브 및 백업 서버 모두 동일한 클러스터의 일부여야 합니다. 간단한 실시간/백업 복제 쌍도 클러스터 구성이 필요합니다.
- 이 쌍의 각 서버에서 클러스터 사용자 및 암호가 일치해야 합니다.
<master> 및 <
요소 모두에서 slave>
group-name
속성을 구성하여 라이브/백업 서버 쌍을 지정합니다. 백업 서버는 동일한 그룹 이름을 공유하는 라이브 서버에만 연결됩니다
.
그룹 이름 사용의 예로는 세 개의 라이브 서버와 3개의 백업 서버가 있다고
가정합니다. 각 라이브 서버는 자체 백업과 연결해야 하므로 다음 그룹 이름을 할당합니다.
-
live1 및 backup1은
pair1
의 그룹
이름을 사용합니다. -
live2 및 backup2는
pair2
의 그룹
이름을 사용합니다. -
live3 및 backup3은
pair3
의 그룹
이름을 사용합니다.
이 예에서 server backup1
은 동일한 group-name
,pair1
의 라이브 서버를 검색합니다. 이 경우 서버 live1
입니다.
공유 저장소의 경우와 마찬가지로, 라이브 서버가 중지되거나 충돌하면 복제된 백업이 활성화되고 해당 작업을 대신합니다. 특히, 라이브 서버와의 연결이 끊어지면 쌍된 백업이 활성화됩니다. 이는 임시 네트워크 문제로 인해 발생할 수 있기 때문에 문제가 될 수 있습니다. 이 문제를 해결하기 위해 쌍 백업에서는 클러스터의 다른 서버에 연결할 수 있는지 여부를 결정합니다. 절반 이상의 서버에 연결할 수 있으면 활성화됩니다. 라이브 서버와 클러스터의 다른 서버 절반 이상이 통신이 끊어지면 쌍의 백업이 대기하여 라이브 서버와 다시 연결을 시도합니다. 이렇게 하면 백업과 라이브 서버가 다른 서버도 알지 못하더라도 메시지를 처리하는 "스플릿 브레인" 상황이 발생할 위험이 줄어듭니다.
이는 공유 저장소 백업과 중요한 차이점입니다. 이 백업은 활성 서버를 찾지 못하고 저널의 파일 잠금이 릴리스된 경우 백업이 활성화되고 클라이언트 요청을 제공하기 시작합니다. 또한 복제에서는 백업 서버가 보유할 수 있는 데이터가 최신 상태인지 알 수 없으므로 자동 활성화를 결정할 수 없습니다. 보유한 데이터를 사용하여 복제 백업 서버를 활성화하려면 슬레이브를 master로 변경하여 활성 서버로 구성되도록 구성을 변경해야 합니다.
30.3.1. 데이터 복제 구성 링크 복사링크가 클립보드에 복사되었습니다!
아래는 my-cluster
라는 클러스터와 group1
이라는 백업 그룹에 상주하는 라이브 및 백업 서버 모두에 대한 기본 구성을 보여줍니다.
아래 단계에서는 관리 CLI를 사용하여 my-cluster
라는 클러스터와 group1
이라는 백업 그룹에 상주하는 라이브 및 백업 서버 모두에 대한 기본 구성을 제공합니다.
아래 예제에서는 standalone-full-ha
구성 프로필을 사용하여 JBoss EAP를 실행한다고 가정합니다.
데이터 복제를 위한 라이브 서버를 구성하기 위한 관리 CLI 명령
라이브 서버에
ha-policy
추가/subsystem=messaging-activemq/server=default/ha-policy=replication-master:add(check-for-live-server=true,cluster-name=my-cluster,group-name=group1)
/subsystem=messaging-activemq/server=default/ha-policy=replication-master:add(check-for-live-server=true,cluster-name=my-cluster,group-name=group1)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow check-for-live-server
특성은 클러스터 내에 다른 서버에 지정된 ID가 없는지 확인하기 위해 라이브 서버에 지시합니다. 이 속성의 기본값은 JBoss EAP 7.0에서false입니다
. JBoss EAP 7.1 이상에서는 기본값은true
입니다.ha-policy
를 백업 서버에 추가합니다./subsystem=messaging-activemq/server=default/ha-policy=replication-slave:add(cluster-name=my-cluster,group-name=group1)
/subsystem=messaging-activemq/server=default/ha-policy=replication-slave:add(cluster-name=my-cluster,group-name=group1)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 공유
클러스터-커넥션
이 있는지 확인합니다.라이브 서버와 백업 서버 간의 적절한 통신에는
클러스터 연결이 필요합니다
. 다음 관리 CLI 명령을 사용하여 동일한cluster-connection
이 라이브 및 백업 서버에 모두 구성되어 있는지 확인합니다. 이 예제에서는 standalone-
을 사용하며 대부분의 사용 사례에 충분해야 합니다. 클러스터 연결을 구성하는 방법에 대한 자세한 내용은 클러스터 연결 구성을 참조하십시오.full-ha 구성 프로필에 있는 기본 cluster-
connection다음 관리 CLI 명령을 사용하여 라이브 및 백업 서버가 모두 동일한 cluster-connection을 사용하고 있는지 확인합니다.
/subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:read-resource
/subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:read-resource
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cluster-connection
이 있으면 출력에서 현재 구성을 제공합니다. 그렇지 않으면 오류 메시지가 표시됩니다.
모든 구성 속성에 대한 자세한 내용은 모든 복제 구성을 참조하십시오.
30.3.2. 모든 복제 설정 링크 복사링크가 클립보드에 복사되었습니다!
관리 CLI를 사용하여 추가한 후 정책에 구성을 추가할 수 있습니다. 이를 수행하는 명령은 아래 기본 구문을 따릅니다.
/subsystem=messaging-activemq/server=default/ha-policy=POLICY:write-attribute(name=ATTRIBUTE,value=VALUE)
/subsystem=messaging-activemq/server=default/ha-policy=POLICY:write-attribute(name=ATTRIBUTE,value=VALUE)
예를 들어 restart-backup
특성 값을 true
로 설정하려면 다음 명령을 사용합니다.
/subsystem=messaging-activemq/server=default/ha-policy=replication-slave:write-attribute(name=restart-backup,value=true)
/subsystem=messaging-activemq/server=default/ha-policy=replication-slave:write-attribute(name=restart-backup,value=true)
다음 표에서는 replication -master 노드 및
구성 요소의 HA 구성 속성을 제공합니다.
replication-
slave
속성 | 설명 |
---|---|
Check-for-live-server |
시작할 때 동일한 서버 ID를 사용하는 다른 서버의 클러스터를 확인하도록 이 서버에 알리려면 |
cluster-name | 복제에 사용되는 클러스터의 이름입니다. |
group-name |
설정되어 있는 경우 백업 서버는 일치하는 |
initial-replication-sync-timeout |
시작 복제가 동기화될 때까지 밀리초 단위로 대기하는 시간입니다. 기본값은 |
synchronized-with-backup | 실시간 서버 및 복제 서버의 저널이 동기화되었는지를 나타냅니다. |
속성 | 설명 |
---|---|
allow-failback |
요청을 다른 위치에 배치할 때 이 서버가 자동으로 중지되는지 여부입니다. 일반적인 사용 사례는 다시 시작 또는 실패 복구 후 활성 처리를 다시 시작하도록 요청하는 라이브 서버 요청입니다. |
cluster-name | 복제에 사용되는 클러스터의 이름입니다. |
group-name |
설정되어 있는 경우 백업 서버는 일치하는 |
initial-replication-sync-timeout |
시작 복제가 동기화될 때까지 밀리초 단위로 대기하는 시간입니다. 기본값은 |
max-saved-replicated-journal-size |
시작 시 파일을 이동한 후 복제된 백업 서버를 다시 시작할 수 있는 횟수를 지정합니다. 최대값에 도달하면 가 다시 실패하면 서버가 영구적으로 중지됩니다. 기본값은 |
restart-backup |
실패한 상태로 인해 백업 서버가 중지되면 이 백업 서버를 다시 시작하도록 지시하려면 |
Syncd-with-live | 복제 서버의 저널이 라이브 서버와 동기화되었는지를 나타냅니다. 즉, 라이브 서버를 안전하게 종료합니다. |
30.3.3. 클러스터 연결 시간 제한 방지 링크 복사링크가 클립보드에 복사되었습니다!
각 라이브 및 백업 쌍은 클러스터 연결을 사용하여
통신합니다. cluster-
특성은 클러스터에서 다른 서버로 호출한 후 서버가 응답을 기다리는 시간을 설정합니다. connection의 call-
timeoutcall-timeout
의 기본값은 30초로, 대부분의 사용 사례에 충분합니다. 그러나 백업 서버가 라이브 서버에서 들어오는 복제 패킷을 처리할 수 없는 경우가 있습니다. 예를 들어, 디스크 작업 속도가 느리거나 journal- min-files
의 큰 값으로 인해 저널 파일의 초기 사전 생성에 시간이 너무 오래 걸릴 수 있습니다. 이와 같은 시간 초과가 발생하면 로그에 다음 행과 유사한 행이 표시됩니다.
AMQ222207: The backup server is not responding promptly introducing latency beyond the limit. Replication server being disconnected now.
AMQ222207: The backup server is not responding promptly introducing latency beyond the limit. Replication server being disconnected now.
위와 같은 행이 로그에 표시되면 복제 프로세스가 중지되었음을 의미합니다. 복제를 다시 시작하려면 백업 서버를 다시 시작해야 합니다.
클러스터 연결 시간 초과를 방지하려면 다음 옵션을 고려하십시오.
-
cluster
시간을 늘립니다. 자세한 내용은 클러스터 연결 구성을 참조하십시오.-connection
의 호출 -
journal-min-file의 값을 줄입니다
. 자세한 내용은 지속성 구성을 참조하십시오.
30.3.4. 이전 저널 디렉토리 제거 링크 복사링크가 클립보드에 복사되었습니다!
백업 서버는 라이브 서버와 동기화를 시작할 때 저널을 새 위치로 이동합니다. 기본적으로 저널 디렉터리는 EAP_HOME
디렉터리에 있습니다. 도메인의 경우 각 서버에 /standalone의 data/
activemqEAP_HOME
디렉토리가 있습니다. 디렉터리의 이름은 /domain/servers 아래에 자체 serverX/data/
activemq바인딩
,저널
,largemessages
및 페이징
입니다. 이러한 디렉터리에 대한 자세한 내용은 지속성 구성 및 페이징 구성을 참조하십시오.
이동한 후 새 디렉토리의 이름은 oldreplica.X
로, 여기서 X
는 숫자 접미사입니다. 새 페일오버로 인해 다른 동기화가 시작되는 경우 "이동된" 디렉토리의 접미사는 1만큼 증가합니다. 예를 들어 첫 번째 동기화에서는 저널 디렉터리가 두 번째, oldreplica.
로 이동됩니다. 원래 디렉토리는 라이브 서버에서 동기화된 데이터를 저장합니다.
2 등과 같이 oldreplica.
1
기본적으로 백업 서버는 두 번 장애 조치(failing) 및 실패(failing)를 관리하도록 구성됩니다. 그런 다음 정리 프로세스가 트리거되면 oldreplica.X
디렉터리를 제거합니다. 백업 서버에서 max-saved-replicated-journal-size
특성을 사용하여 정리 프로세스를 트리거하는 장애 조치 발생 수를 변경할 수 있습니다.
라이브 서버에는 max-saved-replicated-journal-size
가 2
로 설정됩니다. 이 값은 변경할 수 없습니다
30.3.5. 전용 라이브 및 백업 서버 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
각 서버가 JBoss EAP의 자체 인스턴스에서 실행되는 전용 토폴로지에 라이브 및 백업 서버가 배포된 경우 다음 단계를 수행하여 클러스터를 원활하게 업데이트하고 다시 시작합니다.
- 백업 서버를 완전히 종료합니다.
- 라이브 서버를 완전히 종료합니다.
- 라이브 및 백업 서버의 구성을 업데이트합니다.
- 라이브 서버 시작.
- 백업 서버를 시작합니다.
30.3.6. 브로커의 네트워크 분리 감지 링크 복사링크가 클립보드에 복사되었습니다!
브로커의 네트워크 분리를 감지하려면 구성 가능한 호스트 목록을 ping할 수 있습니다. 다음 매개 변수 중 하나를 사용하여 네트워크에서 브로커의 상태를 감지하는 방법을 구성합니다.
-
network-check-NIC
:InetAddress.isReachable
메서드에서 사용할 NIC(Network Interface Controller)를 사용하여 네트워크 가용성을 확인합니다. -
network-check-period
: 네트워크 상태를 확인하는 빈도를 정의하는 시간(밀리초)을 나타냅니다. -
network-check-timeout
: 네트워크 연결이 만료되기 전 대기 시간을 나타냅니다. -
network-check-list
: 네트워크 상태를 감지하기 위해 ping되는 IP 주소 목록을 나타냅니다. -
network-check-URL-list
: 네트워크 유효성 검사에 사용되는 http URI 목록을 나타냅니다. -
network-check-ping-command
: IPv4 네트워크에서 네트워크 상태를 감지하는 데 사용되는 ping 명령 및 해당 매개변수를 나타냅니다. -
network-check-ping6-command
: IPv6 네트워크에서 네트워크 상태를 감지하는 데 사용되는 ping 명령 및 해당 매개변수를 나타냅니다.
절차
다음 명령을 사용하여 구성 가능한 호스트 목록을 ping하여 브로커의 네트워크 격리를 감지합니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=<parameter-name>, value="<ip-address>")
/subsystem=messaging-activemq/server=default:write-attribute(name=<parameter-name>, value="<ip-address>")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
예제
IP 주소 10.0.0.1
을 ping하여 네트워크 상태를 확인하려면 다음 명령을 실행합니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=network-check-list, value="10.0.0.1")
/subsystem=messaging-activemq/server=default:write-attribute(name=network-check-list, value="10.0.0.1")
30.3.7. 데이터 복제의 제한 사항: Brain 처리 분할 링크 복사링크가 클립보드에 복사되었습니다!
라이브 서버와 해당 백업이 동시에 활성 상태일 때 "분리" 상황이 발생합니다. 두 서버 모두 다른 서버는 인식하지 않고도 클라이언트 및 프로세스 메시지를 제공할 수 있습니다. 이 경우 라이브 서버와 백업 서버 간에 더 이상 메시지 복제가 없습니다. 두 서버 간에 네트워크 오류가 발생하는 경우 분할이 발생할 수 있습니다.
예를 들어, 라이브 서버와 네트워크 라우터 간의 연결이 끊어지면 백업 서버에서 라이브 서버와의 연결이 끊어집니다. 그러나 백업은 여전히 클러스터의 절반 이상의 서버에 연결할 수 있으므로 활성화됩니다. 활성 백업 쌍이 하나뿐이고 백업 서버가 라이브 서버에 대한 연결이 손실되는 경우에도 백업이 활성화됩니다. 두 서버가 모두 클러스터 내에서 활성 상태일 때 바람직하지 않은 두 가지 상황이 발생할 수 있습니다.
- 원격 클라이언트가 백업 서버로 페일오버하지만 MDB와 같은 로컬 클라이언트는 라이브 서버를 사용합니다. 두 노드 모두 완전히 다른 저널을 가지므로 분할된 블록 처리가 생성됩니다.
- 원격 클라이언트가 백업 서버로 이미 실패한 경우 라이브 서버에 대한 연결이 끊어졌습니다. 이전 클라이언트에서 백업을 계속 사용하는 동안 새 클라이언트가 라이브 서버에 연결되어 새 클라이언트도 분할된 씬 시나리오가 됩니다.
고객은 데이터 복제를 사용할 때 분할 블록 처리의 위험을 줄이기 위해 각 라이브 및 백업 서버 쌍 간에 신뢰할 수 있는 네트워크를 구현해야 합니다. 예를 들어 중복된 네트워크 인터페이스 카드 및 기타 네트워크 이중화를 사용합니다.
30.5. 라이브 서버로 돌아가기 실패 링크 복사링크가 클립보드에 복사되었습니다!
라이브 서버가 실패하고 백업이 작업을 대신한 후 라이브 서버를 다시 시작하고 클라이언트가 다시 실패하게 할 수 있습니다.
공유 저장소의 경우 원래 라이브 서버를 다시 시작하고 프로세스 자체를 종료하여 새 라이브 서버를 종료합니다. 또는 슬레이브에서 allow-fail-back
을 true
로 설정하여 마스터가 다시 온라인 상태가 되면 강제로 중지할 수 있습니다. allow-fail-back을
설정하는 관리 CLI 명령은 다음과 같습니다.
/subsystem=messaging-activemq/server=default/ha-policy=shared-store-slave:write-attribute(name=allow-fail-back,value=true)
/subsystem=messaging-activemq/server=default/ha-policy=shared-store-slave:write-attribute(name=allow-fail-back,value=true)
복제 HA 모드에서 마스터 구성에서 check-for-live-server
특성이 true
로 설정되어 있는지 확인해야 합니다. JBoss EAP 7.1부터는 기본값입니다.
/subsystem=messaging-activemq/server=default/ha-policy=replication-master:write-attribute(name=check-for-live-server,value=true)
/subsystem=messaging-activemq/server=default/ha-policy=replication-master:write-attribute(name=check-for-live-server,value=true)
true
로 설정하면 활성 서버에서 nodeID를 사용하여 다른 서버를 시작하는 동안 클러스터를 검색합니다. 이를 찾으면 이 서버에 접속하여 "fail-back"을 시도합니다. 이는 원격 복제 시나리오이므로 원본 라이브 서버는 해당 데이터를 해당 ID와 실행 중인 백업과 동기화해야 합니다. 동기화되면 백업 서버를 종료하도록 요청하여 활성 처리를 대신할 수 있습니다. 이 동작을 통해 원본 라이브 서버에서 장애 조치가 있는지 여부를 확인하고 해당 작업을 수행한 서버가 실행 중인지 여부를 확인할 수 있습니다.
백업으로 장애 조치가 발생한 후 실시간 서버를 다시 시작하면 check-for-live-server
특성을 true
로 설정해야 합니다. 그렇지 않은 경우 백업 서버가 실행되고 있는지 확인하지 않고 라이브 서버가 한 번에 시작됩니다. 이로 인해 live 및 backup이 동시에 실행되므로 새로 연결된 모든 클라이언트에 중복 메시지를 전달합니다.
공유 저장소의 경우 일반 서버가 종료되면 페일오버가 발생하여 다음과 같이 마스터 또는 슬레이브의 HA 구성에서 이 세트 failover-on-server-shutdown
을 true
로 설정할 수도 있습니다.
/subsystem=messaging-activemq/server=default/ha-policy=shared-store-slave:write-attribute(name=failover-on-server-shutdown,value=true)
/subsystem=messaging-activemq/server=default/ha-policy=shared-store-slave:write-attribute(name=failover-on-server-shutdown,value=true)
원본 라이브 서버가 다시 가동되면 실행 중인 백업 서버가 강제로 종료되어 allow-failback
을 true
로 설정하여 원래 라이브 서버가 자동으로 인계될 수 있습니다.
/subsystem=messaging-activemq/server=default/ha-policy=shared-store-slave:write-attribute(name=allow-failback,value=true)
/subsystem=messaging-activemq/server=default/ha-policy=shared-store-slave:write-attribute(name=allow-failback,value=true)
30.6. 공동 배치된 백업 서버 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP를 사용하면 동일한 JVM에 백업 메시징 서버를 다른 라이브 서버와 함께 배치할 수도 있습니다. 예를 들어 각 라이브 서버가 다른 독립 실행형 서버에 대한 백업을 공동 배치하는 독립 실행형 서버의 간단한 노드 클러스터 2개를 예로 들 수 있습니다. 이러한 방식으로 서버를 배치할 때 공유 저장소 또는 복제된 HA 정책을 사용할 수 있습니다. 공동 배치를 위해 메시징 서버를 구성할 때 두 가지 중요한 점을 기억해야 합니다.
먼저 구성의 각 서버
요소에는 자체 원격 연결기 및 원격
어셉터 또는
가 필요합니다. 예를 들어, http-
connector 및 http-
acceptorremote-acceptor
가 있는 라이브 서버는 포트 5445
에서 수신 대기하도록 구성할 수 있으며, 함께 배치된 백업 의 원격
승인자는 5446
포트를 사용합니다. 포트는 기본 socket-binding-
group에 추가해야 하는 socket-binding
요소에 정의됩니다. http-acceptors
의 경우 라이브 및 공동 배치 백업이 동일한 http-listener
를 공유할 수 있습니다. 각 서버 구성에서 클러스터 관련 구성 요소는 서버에서
사용하는 원격 연결기
또는 http 연결기
를 사용합니다. 관련 구성은 다음 각 예제에 포함됩니다.
두 번째는 저널 관련 디렉터리에 대한 경로를 올바르게 구성해야 합니다. 예를 들어 공유 저장소의 공동 배치 토폴로지에서는 다른 라이브 서버에 공동 배치된 라이브 서버와 해당 백업 모두 바인딩 및 메시지 저널의 디렉터리 위치, 대용량 메시지 및 페이징 의 디렉터리 위치를 공유하도록 구성해야 합니다.
30.7. 페일오버 모드 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 메시징은 다음 두 가지 유형의 클라이언트 페일오버를 정의합니다.
- 자동 클라이언트 장애 조치
- 애플리케이션 수준 클라이언트 장애 조치
또한 JBoss EAP 메시징은 동일한 서버에 연결의 100% 투명한 자동 재연결을 제공합니다(예: 일시적인 네트워크 문제인 경우). 이는 동일한 서버에 다시 연결되어 있으며 클라이언트 재커넥션 및 세션 재연결에서 논의된다는 점을 제외하고 장애 조치와 유사합니다.
장애 조치 중에 클라이언트가 영구 또는 임시 대기열에 있는 소비자가 있는 경우 백업 노드의 장애 조치 중에 해당 큐가 자동으로 다시 생성됩니다. 백업 노드에는 영구 대기열에 대한 지식이 없습니다.
30.7.1. 자동 클라이언트 페일오버 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 메시징 클라이언트는 클라이언트에서 연결 오류가 발생하는 경우(실시간 서버 연결) 오류가 발생할 경우 클라이언트가 실패를 감지하고 백업 서버에 다시 연결할 수 있도록 모든 라이브 및 백업 서버에 대한 정보를 수신하도록 구성할 수 있습니다. 그런 다음 백업 서버는 페일오버 전에 각 연결에 존재하는 모든 세션과 소비자를 자동으로 다시 생성하므로 사용자가 수동 재커넥션 논리를 직접 코딩하지 않아도 됩니다.
JBoss EAP 메시징 클라이언트는 Detecting Dead Connections 에 설명된 대로 client-failure-check-period
에서 지정한 시간 내에 서버에서 패킷을 수신하지 않은 경우 연결 오류를 감지합니다.
클라이언트가 할당된 시간 내에 데이터를 수신하지 않으면 연결이 실패하고 페일오버를 시도했다고 가정합니다. 운영 체제에서 소켓을 닫는 경우 서버 하드웨어가 충돌하는 대신 서버 프로세스가 종료될 수 있습니다. 클라이언트가 즉시 페일오버합니다.
JBoss EAP 메시징 클라이언트는 다양한 방법으로 라이브 백업 서버 쌍 목록을 검색하도록 구성할 수 있습니다. 예를 들어 명시적 엔드포인트를 사용하여 구성할 수 있지만 가장 일반적인 방법은 클라이언트가 먼저 클러스터에 연결할 때 클러스터 토폴로지에 대한 정보를 받는 것입니다. 자세한 내용은 Server Discovery 를 참조하십시오.
기본 HA 구성에는 클러스터 통신에 권장되는
이 포함됩니다. 이는 원격 클라이언트가 기본 http-connector를 사용하는 cluster-
connectionRemoteConnectionFactory
를 사용하여 서버에 연결할 때 사용하는 http-connector
와 동일합니다. 권장되지 않지만 다른 커넥터를 사용할 수 있습니다. 고유한 커넥터를 사용하는 경우 원격 클라이언트와 클러스터 노드에서 사용하는 cluster
에 대한 구성의 일부로 포함되어 있는지 확인합니다. 커넥터 및 클러스터 연결에 대한 자세한 내용은 메시징 전송 및 클러스터 연결 구성을 참조하십시오.
-connection
모두 connection-factory
자카르타 메시징 클라이언트가 사용할 connection-factory
에 정의된 커넥터
는 클러스터에서 사용하는 cluster-connection
에 정의된 것과 동일해야 합니다. 그렇지 않으면 클라이언트에서 기본 라이브/백업 쌍의 토폴로지를 업데이트할 수 없으므로 백업 서버의 위치를 알 수 없습니다.
CLI 명령을 사용하여 connection -factory 및
의 구성을 검토합니다. 예를 들어 cluster-
connectionRemoteConnectionFactory
라는 connection-factory
의 현재 구성을 읽으려면 다음 명령을 사용합니다.
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:read-resource
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:read-resource
마찬가지로 아래 명령은 my-cluster
라는 cluster-connection
에 대한 구성을 읽습니다.
/subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:read-resource
/subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:read-resource
자동 클라이언트 장애 조치를 활성화하려면 0이 아닌 재커넥션 시도를 허용하도록 클라이언트를 구성해야 합니다. 자세한 내용은 클라이언트 재커넥션 및 세션 재연결 을 참조하십시오. 기본적으로 장애 조치는 라이브 서버에 대해 하나 이상의 연결이 완료된 후에만 발생합니다. 즉, 클라이언트가 라이브 서버에 초기 연결하지 못하는 경우 페일오버가 발생하지 않습니다. 초기 시도에 실패하는 경우 클라이언트는 reconnect-attempts
속성에 따라 라이브 서버에 대한 연결을 재시도하고 구성된 횟수 이후에 실패합니다.
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=reconnect-attempts,value=<NEW_VALUE>)
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=reconnect-attempts,value=<NEW_VALUE>)
이 규칙의 예외는 백업 서버 및 다른 라이브 서버가 없는 한 쌍의 라이브 서버만 있고 원격 MDB가 라이브 서버에 연결되어 있는 경우입니다. MDB에서 @ActivationConfigProperty(propertyName = "rebalanceConnections", propertyValue = "true")
를 구성한 경우 해당 연결을 다른 라이브 서버로 리밸런싱하려고 시도하고 백업에 장애 조치(failover)하지 않습니다.
초기 연결에서 오버 페일오버
클라이언트에서 첫 번째 연결이 완료된 후에 전체 토폴로지를 알지 못하므로 백업에 대해 모르는 시간이 있습니다. 이 시점에 오류가 발생하면 클라이언트는 원래 라이브 서버에만 다시 연결할 수 있습니다. 클라이언트에서 시도 횟수를 구성하려면 ClientSessionFactoryImpl 또는
에서 속성 ActiveMQConnectionFactory
initialConnectAttempts
를 설정할 수 있습니다.
또는 서버 구성에서 클라이언트에서 사용하는 연결 팩토리의 initial-connect-attempts
특성을 설정할 수 있습니다. 기본값은 0
, 즉 한 번만 시도합니다. 시도 횟수가 완료되면 예외가 발생합니다.
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=initial-connect-attempts,value=<NEW_VALUE>)
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:write-attribute(name=initial-connect-attempts,value=<NEW_VALUE>)
서버 복제 정보
JBoss EAP 메시징은 라이브 서버와 백업 서버 간에 전체 서버 상태를 복제하지 않습니다. 백업에서 새 세션이 자동으로 다시 생성되면 해당 세션 중에 전송되거나 승인된 메시지에 대한 지식은 없습니다. 페일오버 시점에 진행 중인 모든 전송 또는 승인이 손실될 수 있습니다.
JBoss EAP 메시징은 전체 서버 상태를 복제함으로써 이론적으로 100% 투명한 페일오버를 제공하여 메시지나 감사가 손실되지 않도록 할 수 있었습니다. 그러나 이 작업을 수행하는 것은 대기열 및 세션을 포함하여 전체 서버 상태를 복제하는 데 큰 비용이 듭니다. 이를 위해서는 전체 서버 상태 시스템의 복제가 필요합니다. 즉 일관된 복제 상태를 보장하기 위해 실시간 서버의 모든 작업을 정확히 동일한 글로벌 복제 서버에 복제해야 합니다. 여러 스레드가 라이브 서버 상태를 동시에 변경하는 것을 고려하는 것은 고성능이고 확장 가능한 방식으로는 매우 어렵습니다.
가상 신디온과 같은 기술을 사용하여 전체 상태 시스템 복제를 제공할 수 있지만, 제대로 확장되지 않고 모든 작업을 단일 스레드로 직렬화하여 동시성이 크게 줄어듭니다. 잠금 상태 복제 또는 스레드 스케줄링 복제와 같은 다중 스레드 활성 복제 기법이 있지만 이는 Java 수준에서 달성하기가 매우 어렵습니다.
결과적으로 100% 투명한 페일오버를 위해 성능과 동시성을 줄일 필요가 없었습니다. 100% 투명한 페일오버가 없어도 중복 탐지와 트랜잭션 재시도를 사용하여 실패하는 경우에도 한 번만 간편하게 제공할 수 있습니다. 그러나 클라이언트 코드에 100% 투명하지는 않습니다.
30.7.1.1. 페일오버 중 차단 호출 처리 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트 코드가 서버에 대한 호출을 차단하는 경우, 즉, 페일오버 중에 새 세션에 진행 중인 호출에 대한 정보가 없습니다. 차단된 호출은 영속적으로 중단될 수 있으며, 전달되지 않을 응답을 기다립니다.
이를 방지하기 위해 JBoss EAP 메시징은 장애 조치 시 진행 중인 모든 차단 호출을 차단 해제합니다. javax.jms.JMSException
, Jakarta Messaging을 사용하는 경우 또는 코어 API를 사용하는 경우 오류 코드 ActiveMQException
.UNBLOCKED를 사용하여 ActiveMQException.UNBLOCKED
가 있는 ActiveMQException. 클라이언트 코드에서 이 예외를 감지하고 필요한 경우 작업을 다시 시도합니다.
unblocked 메서드가 commit() 또는 prepare() 호출인 경우, 코어 API를 사용하는 경우 트랜잭션이 자동으로 롤백되고 JBoss EAP 메시징에서 javax.jms.TransactionRolledBackException
, Jakarta Messaging을 사용하는 경우 오류 코드
가 있는 ActiveMQException이 발생합니다.
ActiveMQException
.TRANSACTION_ROLLED_BACK
30.7.1.2. 트랜잭션을 사용하여 페일오버 처리 링크 복사링크가 클립보드에 복사되었습니다!
세션이 트랜잭션 중이고 현재 트랜잭션에서 메시지가 이미 전송되거나 승인된 경우 서버에서 장애 조치 중에 메시지 또는 승인이 손실되었는지 확인할 수 없습니다.
결과적으로 트랜잭션은 롤백 전용으로 표시되며, 코어 API를 사용하는 경우 javax.jms.TransactionRolledBackException, 즉 오류 코드
코드 ActiveMQException.
TRANSACTION_ROLLED_BACK가 발생하게 됩니다. 코어 API를 사용하는 경우 오류ActiveMQException.TRANSACTION_ROLLED_BACK
가 있는 ActiveMQException.
이 규칙의 주의 사항은 XA를 자카르타 메시징을 통해 또는 핵심 API를 통해 사용할 때입니다. 2단계 커밋을 사용하고 prepare()
가 이미 호출된 경우 롤백하면 HeuristicMixedException
이 발생할 수 있습니다. 이로 인해 커밋에 XAException.XA_RETRY
예외가 발생합니다. 이는 트랜잭션 관리자가 나중에 커밋을 다시 시도해야 한다는 것을 알립니다. 부작용으로 인해 지속되지 않는 메시지가 손실됩니다. 이 문제가 발생하지 않도록 하려면 XA를 사용할 때 영구 메시지를 사용해야 합니다. prepare()
가 호출되기 전에 서버에 플러시되므로 이 문제는 문제가 되지 않습니다.
사용자가 예외를 감지하고 필요에 따라 클라이언트 측 로컬 롤백 코드를 수행합니다. 이미 롤백되었으므로 세션을 수동으로 롤백할 필요가 없습니다. 사용자는 동일한 세션에서 트랜잭션 작업을 다시 시도할 수 있습니다.
커밋 호출이 실행될 때 페일오버가 발생하면 이전에 설명한 대로 서버는 응답이 반환되지 않으므로 호출 차단을 해제하여 중지를 방지합니다. 이 경우 클라이언트가 오류가 발생하기 전에 실시간 서버에서 트랜잭션 커밋이 실제로 처리되었는지 여부를 쉽게 확인할 수 없습니다.
XA가 Jakarta Messaging 또는 코어 API를 통해 사용되는 경우 XAException.XA_RETRY
가 throw됩니다. 이는 트랜잭션 관리자에게 특정 시점에 재시도가 수행되어야 함을 알리는 것입니다. 나중에 트랜잭션 관리자가 커밋을 다시 시도합니다. 원래 커밋이 발생하지 않은 경우 계속 존재하며 커밋됩니다. 트랜잭션 관리자가 경고를 기록할 수 있지만 커밋된 것으로 가정됩니다.
이를 해결하기 위해 클라이언트는 트랜잭션에서 중복 탐지를 활성화하고 호출이 차단 해제된 후 트랜잭션 작업을 다시 시도할 수 있습니다. 서버에 탐지를 구성하는 방법에 대한 자세한 내용은 메시지 탐지 중복 을 참조하십시오. 실제로 페일오버 전에 트랜잭션이 라이브 서버에 커밋된 경우 중복 탐지는 트랜잭션에 있는 지속적 메시지를 무시하여 트랜잭션 재시도 시 두 번 이상 전송되지 않도록 합니다.
30.7.1.3. 연결 오류 알림 받기 링크 복사링크가 클립보드에 복사되었습니다!
Jakarta Messaging은 연결 실패 비동기 알림( java.jms.ExceptionListener
)을 전송하는 표준 메커니즘을 제공합니다. 이 수업에 대한 자세한 내용은 Jakarta Messaging javadoc 를 참조하십시오. 또한 핵심 API는 org.apache.activemq.artemis.core.client.SessionFailureListener
클래스의 형태로 유사한 기능을 제공합니다.
연결이 성공적으로 실패했는지 여부에 관계없이 ExceptionListener
또는 SessionFailureListener
인스턴스는 연결 실패 시 JBoss EAP에서 항상 호출됩니다. 그러나 SessionfailureListener
의 connectionFailed()
또는 다음 중 하나일 javax.jms.JMSException의 error 코드에 전달된
failedOver
플래그의 값을 검사하여 재연결 또는 재연결이 발생했는지 확인할 수 있습니다.
JMSException 오류 코드
오류 코드 | 설명 |
---|---|
페일오버 | 페일오버가 발생했으며 성공적으로 다시 연결 또는 재연결되었습니다. |
연결 끊기 | 페일오버가 발생하지 않았으며 연결이 끊어졌습니다. |
30.7.2. 애플리케이션 레벨 페일오버 링크 복사링크가 클립보드에 복사되었습니다!
경우에 따라 자동 클라이언트 페일오버를 원하지 않을 수 있으며 연결 오류를 직접 처리하고 자체 장애 처리기에서 직접 직접 재커넥션 논리를 코딩하는 것을 선호할 수 있습니다. 페일오버는 사용자 애플리케이션 수준에서 처리되므로 이를 애플리케이션 수준 장애 조치(failover)로 정의합니다.
Jakarta Messaging을 사용하는 경우 애플리케이션 수준 페일오버를 구현하려면 Jakarta Messaging 연결에 ExceptionListener
클래스를 설정합니다. 연결 오류가 감지되는 경우 JBoss EAP 메시징에서 ExceptionListener
를 호출합니다. ExceptionListener
에서는 이전 Jakarta Messaging 연결을 닫고 JNDI에서 새로운 연결 팩토리 인스턴스를 찾고 새 연결을 생성할 수 있습니다.
코어 API를 사용하는 경우 절차가 매우 유사합니다. 핵심 ClientSession
인스턴스에 FailureListener
를 설정합니다.
30.8. 데드 커넥션 감지 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 TTL(연결 시간)에 대해 설명하고, JBoss EAP 메시징에서 리소스를 완전히 닫지 않고 종료한 충돌한 클라이언트 및 클라이언트를 처리하는 방법을 설명합니다.
서버에서 Dead 연결 리소스 정리
JBoss EAP 클라이언트 애플리케이션이 종료되기 전에 finally
블록을 사용하여 제어된 방식으로 리소스를 종료해야 합니다.
다음은 finally
블록에서 세션 및 세션 팩토리를 적절하게 닫는 핵심 클라이언트의 예입니다.
다음은 제대로 작동하는 자카르타 메시징 클라이언트 애플리케이션의 예입니다.
안타깝게도 클라이언트가 충돌하여 리소스를 정리할 기회가 없는 경우가 있습니다. 이 경우 서버 측 리소스가 서버에 중단될 수 있습니다. 이러한 리소스가 제거되지 않으면 서버에서 리소스 누수가 발생하고 시간이 지남에 따라 서버에 메모리 또는 기타 리소스가 부족해질 수 있습니다.
배달되지 않은 클라이언트 리소스를 정리하는 경우 클라이언트와 서버 간에 네트워크가 실패하고 다시 돌아와 클라이언트가 다시 연결할 수 있다는 사실을 알고 있어야 합니다. JBoss EAP는 클라이언트 재커넥션을 지원하므로 너무 빨리 "데드" 서버 측 리소스를 정리하지 않아야 합니다. 그렇지 않으면 클라이언트가 서버에서 이전 세션을 다시 연결하고 다시 얻을 수 없게 됩니다.
JBoss EAP는 이 모든 구성 가능한. ClientSessionFactory가 구성된 각 ClientSessionFactory
, Time-To-Live 또는 TTL에 대해 속성을 사용하여 클라이언트에서 데이터가 없을 때 서버에서 연결을 밀리초 단위로 활성 상태로 유지하는 기간을 설정할 수 있습니다. 클라이언트는 서버가 연결을 종료하지 못하도록 주기적으로 "ping" 패킷을 자동으로 전송합니다. 서버가 TTL 시간 동안 연결 시 패킷을 받지 않으면 해당 연결과 관련된 서버의 모든 세션을 자동으로 종료합니다.
Jakarta Messaging을 사용하는 경우 연결 TTL은 ActiveMQConnectionFactory
인스턴스의 ConnectionTTL
속성에 의해 정의되거나 서버 측의 JNDI로 직접 Jakarta Messaging 연결 팩토리 인스턴스를 배포하는 경우 connectionTtl
매개 변수를 사용하여 xml 구성에서 지정할 수 있습니다.
http-connector
와 같은 네트워크 기반 연결의 ConnectionTTL
기본값은 60000
입니다(예: 1분). 내부 연결의 연결 TTL 기본값(예: in-vm
연결)은 -1
입니다. ConnectionTTL
의 값 -1
은 서버가 서버 측의 연결이 시간 초과되지 않음을 의미합니다.
클라이언트가 자체 연결 TTL을 지정하지 않도록 하려면 서버 측에 전역 값을 설정할 수 있습니다. 이 작업은 서버 구성에 connection-ttl-override
특성을 지정하여 수행할 수 있습니다. connection-ttl-override
의 기본값은 -1
이므로 클라이언트가 자체 값을 사용할 수 있게 합니다.
코어 세션 또는 자카르타 메시징 연결 닫기
모든 핵심 클라이언트 세션 및 Jakarta Messaging 연결은 사용을 완료하면 항상 finally
블록에서 명시적으로 닫혀야 합니다.
이렇게 하지 못하면 JBoss EAP는 가비지 컬렉션 시 이를 감지합니다. 그런 다음 연결을 종료하고 다음과 유사한 경고를 기록합니다.
Jakarta Messaging을 사용하는 경우 경고에는 클라이언트 세션이 아닌 Jakarta Messaging 연결이 포함됩니다. 또한 로그는 닫지 않은 자카르타 메시징 연결 또는 코어 클라이언트 세션이 인스턴스화된 정확한 코드 행을 알려줍니다. 이렇게 하면 코드의 오류를 찾아 적절하게 수정할 수 있습니다.
클라이언트 측에서 오류 감지
클라이언트가 서버에서 데이터를 수신하는 한 연결은 활성 상태로 간주됩니다. 클라이언트에서 client-failure-check-period
밀리초 패킷을 수신하지 못하면 연결이 실패하고 페일오버를 시작하거나 클라이언트 구성 방법에 따라 Jakarta Messaging을 사용하는 경우 FailureListener
인스턴스 또는 ExceptionListener
인스턴스를 호출합니다.
Jakarta Messaging을 사용하는 경우 이 동작은 ActiveMQConnectionFactory
인스턴스의 ClientFailureCheckPeriod
특성에 의해 정의됩니다.
네트워크 연결의 클라이언트 장애 확인 기간(예: HTTP 연결)의 기본값은 30000
또는 30초입니다. in-vm 연결의 클라이언트 장애 확인 기간의 기본값은 -1
입니다. 값 -1
은 서버에서 데이터를 수신하지 않으면 클라이언트가 클라이언트 측에서 연결이 실패하지 않음을 의미합니다. 어떤 연결 유형이건 간에 일반적으로 확인 기간은 서버의 연결 TTL 값보다 훨씬 낮으므로 클라이언트가 전송 오류가 발생할 경우 다시 연결할 수 있습니다.
비동기 연결 실행 구성
서버 측에서 수신된 대부분의 패킷은 원격
스레드에서 실행됩니다. 이러한 패킷은 단기 작업을 나타내며 성능상의 이유로 항상 리모팅
스레드에서 실행됩니다.
그러나 기본적으로 스레드 풀의 스레드를 사용하여 일부 종류의 패킷이 실행되므로 원격
스레드가 너무 오랫동안 연결되어 있지 않습니다. 다른 스레드에서 처리 작업을 비동기적으로 수행할 경우 약간의 대기 시간이 추가됩니다. 이러한 패킷은 다음과 같습니다.
비동기 연결 실행을 비활성화하려면 매개 변수 async-connection-execution-enabled
를 false로 설정합니다
. 기본값은 true
입니다.
30.9. 클라이언트 재커넥션 및 세션 재연결 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트와 서버 간의 연결에서 오류가 감지되는 경우 서버에 자동으로 다시 연결하거나 다시 연결하도록 JBoss EAP 메시징 클라이언트를 구성할 수 있습니다.
투명한 세션 다시 첨부
임시 네트워크 중단과 같은 일시적인 원인으로 인해 오류가 발생하고 대상 서버가 다시 시작되지 않은 경우 클라이언트에서 connection-ttl
값보다 많은 경우 세션이 여전히 서버에 존재합니다. Detecting Dead Connections 를 참조하십시오.
이 시나리오에서 재연결할 때 JBoss EAP는 서버 세션에 클라이언트 세션을 자동으로 다시 연결합니다. 100% 투명하게 수행되며 클라이언트는 아무 일도 없던 것처럼 정확하게 계속할 수 있습니다.
JBoss EAP 메시징 클라이언트는 명령을 서버에 보낼 때 전송된 각 명령을 메모리 내 버퍼에 저장합니다. 연결이 실패하고 클라이언트가 재연결 프로토콜의 일부로 동일한 서버에 다시 연결을 시도하면 서버는 클라이언트가 성공적으로 수신한 마지막 명령의 id를 클라이언트에 제공합니다.
클라이언트가 페일오버 전에 수신한 것보다 많은 명령을 전송한 경우 클라이언트와 서버가 상태를 조정할 수 있도록 버퍼에서 전송된 명령을 다시 재생할 수 있습니다.
이 버퍼의 크기(바이트)는 confirmationWindowSize
속성에 의해 설정됩니다. 서버가 확인WindowSize
명령 바이트를 수신하고 처리하면 클라이언트에 명령 확인을 다시 보내 클라이언트가 버퍼의 공간을 확보할 수 있습니다.
서버에서 Jakarta Messaging 서비스를 사용하여 Jakarta Messaging 연결 팩토리 인스턴스를 JNDI로 로드하는 경우 선택한 connection-factory
의 confirmation-window-size
특성을 설정하여 서버 구성에서 이 속성을 구성할 수 있습니다. Jakarta Messaging을 사용하지만 JNDI를 사용하지 않는 경우 적절한 setter 방법을 사용하여 ActiveMQConnectionFactory
인스턴스에서 이러한 값을 직접 설정할 수 있습니다. setConfirmationWindowSize
. 코어 API를 사용하는 경우 ServerLocator
인스턴스에 setConfirmationWindowSize
메서드도 노출됩니다.
verifyWindowSize
를 기본값인 -1
로 설정하면 버퍼링을 비활성화하고 재연결이 발생하지 않도록 하여 재연결을 강제 실행합니다.
세션 재커넥션
또는 충돌 후 서버가 다시 시작되었거나 중지되었을 수 있습니다. 이러한 경우 세션이 서버에 더 이상 존재하지 않으므로 100% 투명하게 다시 연결할 수 없습니다.
이 경우 JBoss EAP는 자동으로 연결을 다시 연결하고 클라이언트의 세션 및 소비자에 해당하는 서버에서 세션과 소비자를 다시 생성합니다. 이 프로세스는 백업 서버로 장애가 발생했을 때 발생하는 절차와 정확히 동일합니다.
클라이언트 재커넥션은 코어 브리지와 같은 구성 요소에서도 내부적으로 사용되므로 대상 서버에 다시 연결할 수 있습니다.
자동 클라이언트 장애(Automatic Client Failover ) 섹션을 참조하여 재연결 중에 트랜잭션 및 트랜잭션되지 않은 세션이 재연결되는 방식과 한 번만 제공 보장을 유지 관리하기 위해 수행해야 하는 사항에 대해 완벽하게 이해할 수 있습니다.
재커넥션 속성 구성
클라이언트 재커넥션은 다음 속성을 설정하여 구성됩니다.
-
retryInterval. 이 선택적 매개 변수는 대상 서버에 대한 연결이 실패한 경우 후속 재연결 시도 간격(밀리초)을 설정합니다. 기본값은
2000
밀리초입니다. retryIntervalMultiplier. 이 선택적 매개 변수는 마지막 재시도 이후 시간을 다음 재시도에 계산한 후 에 적용할 승수를 설정합니다. 이렇게 하면 재시도 시도 간에 지수 백오프를 구현할 수 있습니다.
예를 들어
retryInterval
을1000
ms로 설정하고 retryIntervalMultiplier를2.0
으로 설정하면 첫 번째 재연결 시도가 실패하면 클라이언트는1000
ms를 기다린 다음 이후 다시 연결 시도 사이에4000
ms를 기다립니다.
기본값은
1.0
이므로 각 재연결 시도는 동일한 간격으로 공백이 지정됩니다.-
maxRetryInterval. 이 선택적 매개변수는 사용할 최대 재시도 간격을 설정합니다.
retryIntervalMultiplier
를 설정할 때 후속 재시도 횟수가 기하급수적으로 큰 값으로 증가할 수 있습니다. 이 매개변수를 설정하면 해당 값에 대한 상한을 설정할 수 있습니다. 기본값은2000
밀리초입니다. -
reconnectAttempts. 이 선택적 매개변수는 포기 및 종료하기 전에 수행할 총 재연결 시도 횟수를 설정합니다. 값
-1
은 시도 횟수를 나타냅니다. 기본값은0
입니다.
클라이언트에서 Jakarta Messaging 및 JNDI를 사용하여 Jakarta Messaging 연결 팩토리 인스턴스를 조회하는 경우 JNDI 컨텍스트 환경에서 이러한 매개변수를 지정할 수 있습니다. 예를 들어 jndi.properties
파일은 다음과 같을 수 있습니다.
java.naming.factory.initial = ActiveMQInitialContextFactory connection.ConnectionFactory=tcp://localhost:8080?retryInterval=1000&retryIntervalMultiplier=1.5&maxRetryInterval=60000&reconnectAttempts=1000
java.naming.factory.initial = ActiveMQInitialContextFactory
connection.ConnectionFactory=tcp://localhost:8080?retryInterval=1000&retryIntervalMultiplier=1.5&maxRetryInterval=60000&reconnectAttempts=1000
Jakarta Messaging을 사용 중이지만 Jakarta Messaging 연결 팩토리를 직접 인스턴스화하는 경우 ActiveMQConnectionFactory
에서 적절한 setter 메서드를 사용하여 즉시 매개변수를 지정할 수 있습니다.
코어 API를 사용하고 ServerLocator 인스턴스를 직접 인스턴스화하는 경우 ServerLocator
를 만든 직후에 적절한 setter 메서드를 사용하여 매개변수를 지정할 수도 있습니다.
클라이언트가 다시 연결하지만 서버에서 세션을 더 이상 사용할 수 없는 경우, 예를 들어 서버가 다시 시작되었거나 시간 초과된 경우 클라이언트가 다시 연결할 수 없으며 연결 또는 세션에 등록된 ExceptionListener
또는 FailureListener
인스턴스가 호출됩니다.
ExceptionListeners 및 SessionFailureListeners
클라이언트가 다시 연결하거나 다시 연결하면 등록된 Jakarta Messaging ExceptionListener
또는 코어 API SessionFailureListener
가 호출됩니다.
31장. 리소스 어댑터 링크 복사링크가 클립보드에 복사되었습니다!
자카르타 커넥터 리소스 어댑터를 사용하면 애플리케이션이 모든 메시징 공급자와 통신할 수 있습니다. MDB 및 기타 Jakarta Enterprise Bean과 같은 Jakarta EE 구성 요소와 서블릿이 메시지를 보내거나 받는 방법을 구성합니다.
31.1. 통합 Artemis 리소스 어댑터 정보 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 7에는 pooled-connection-factory
요소를 사용하여 리소스 어댑터의 아웃바운드 및 인바운드 연결을 구성하는 통합 Artemis 리소스 어댑터가 포함되어 있습니다.
아웃바운드 연결
아웃바운드 커넥션은 pooled-connection-factory
요소를 사용하여 정의되며, 이 요소는 Jakarta Enterprise Beans 및 서블릿에서 대기열 또는 토픽에서 메시지를 보내고 메시지를 받는 데 사용됩니다. 연결 팩토리에서 생성된 연결은 애플리케이션 서버 범위에서 생성되므로 다음과 같은 애플리케이션 서버 기능을 사용할 수 있습니다.
- 연결 풀링
- 애플리케이션 서버에서 정의한 보안 도메인을 사용한 인증
- 트랜잭션 관리자를 사용하여 XA 트랜잭션에 참여
이는 InVmConnectionFactory 또는
와 같은 기본 RemoteConnectionFactory
연결 팩토리에서
의 주요 차이점입니다. 또한 이러한 기능을 사용할 수 없으므로 pooled-connection
-factorypooled-connection-factory
를 사용하여 정의된 연결 팩토리에서는 외부 독립 실행형 Jakarta Messaging 클라이언트에서 JNDI를 사용하여 조회를 수행할 수 없습니다.
인바운드 연결
인바운드 연결은 대기열 또는 주제에서 메시지를 받는 데 MDB(메시지 기반 빈)에서만 사용됩니다. MDB는 대기열 또는 토픽에서 수신 대기하는 상태 비저장 세션 빈입니다. 메시지를 대기열 또는 토픽으로 전송할 때 호출되는 public onMessage(Message message)
메서드를 구현해야 합니다. Artemis 리소스 어댑터는 대기열 또는 항목에서 메시지를 수신하여 onMessage(Message 메시지)
메서드에 전달합니다. 이를 위해 통합된 Artemis 서버의 위치 및 몇 가지 추가 요소를 정의하는 인바운드 연결을 구성합니다.
각 MDB 세션 빈은 클라이언트 스레드 풀의 스레드를 사용하여 대상의 메시지를 사용합니다. 최대 풀 크기가 정의되지 않은 경우 CPU 코어 프로세서 수의 8 (8) 배로 결정됩니다. 테스트 모음과 같이 많은 MDB 세션이 있는 시스템의 경우 스레드가 고갈될 수 있으며 MDB가 풀에서 자유 스레드를 대기하도록 할 수 있습니다. 관리 CLI를 사용하여 클라이언트 스레드 풀의 최대 풀 크기를 늘릴 수 있습니다. 다음 명령은 최대 클라이언트 스레드 풀 크기를 128
으로 설정합니다.
/subsystem=messaging-activemq:write-attribute(name=global-client-thread-pool-max-size,value=128)
/subsystem=messaging-activemq:write-attribute(name=global-client-thread-pool-max-size,value=128)
클라이언트 스레드 풀 크기를 구성하는 방법에 대한 자세한 내용은 클라이언트 스레드 관리를 참조하십시오. MDB에 대한 자세한 내용은 Message Driven Beans in Developing Jakarta Enterprise Beans for JBoss EAP를 참조하십시오.
31.2. 원격 연결을 위한 통합 Artemis 리소스 어댑터 사용 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP에는 통합된 ActiveMQ Artemis 메시징 서버에 연결할 수 있는 리소스 어댑터가 포함되어 있습니다. 기본적으로 messaging
는 어댑터를 사용하여 연결을 만듭니다. 그러나 동일한 리소스 어댑터를 사용하여 JBoss EAP의 원격 인스턴스 내에서 실행되는 Artemis 서버에 연결할 수 있습니다.
-activemq 하위 시스템에 정의된 pooled-connection-
factory
messaging-activemq 하위 시스템에서 기본적으로 구성된 The
풀링 연결 팩토리에는 activemq-
rajava:jboss/DefaultJMSConnectionFactory
항목이 할당되어 있습니다. 이 항목은 messaging-activemq
하위 시스템에서 필요합니다. the activemq-ra
풀링된 연결 팩토리를 제거하기로 결정한 경우 이 항목을 다른 연결 팩토리에 할당해야 합니다. 그렇지 않으면 배포 시 서버 로그에 다음 오류가 표시됩니다.
WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.jboss.DefaultJMSConnectionFactory"]
WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.jboss.DefaultJMSConnectionFactory"]
JBoss EAP의 원격 인스턴스 내에서 실행되는 Artemis 서버에 연결하려면 아래 단계에 따라 새 pooled-connection-factory
를 생성합니다.
원격 메시징 서버를 가리키는 아웃바운드-소켓-바인딩을 생성합니다.
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-server:add(host=<server host>, port=8080)
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-server:add(host=<server host>, port=8080)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 1단계에서 생성된 아웃바운드-소켓-바인딩을 참조하는 원격 연결기를 만듭니다.
/subsystem=messaging-activemq/server=default/http-connector=remote-http-connector:add(socket-binding=remote-server,endpoint=http-acceptor)
/subsystem=messaging-activemq/server=default/http-connector=remote-http-connector:add(socket-binding=remote-server,endpoint=http-acceptor)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 2단계에서 생성된 원격 연결을 참조하는 pooled-connection-factory를 생성합니다.
/subsystem=messaging-activemq/server=default/pooled-connection-factory=remote-artemis:add(connectors=[remote-http-connector], entries=[java:/jms/remoteCF])
/subsystem=messaging-activemq/server=default/pooled-connection-factory=remote-artemis:add(connectors=[remote-http-connector], entries=[java:/jms/remoteCF])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고Artemis 1.x는 대상 이름에 접두사가 필요함(주제의 경우 jms.topic, 대기열의 경우 jms.queue). Artemis 2.x는 접두사가 필요하지 않지만 Artemis 1.x와의 호환성을 위해 EAP는 접두사를 계속 추가하고 호환성 모드에서 실행되도록 Artemis를 지시합니다. 원격 Artemis 2.x 서버에 연결하는 경우 호환성 모드가 아니므로 접두사가 필요하지 않을 수 있습니다. 접두사 없이 대상을 사용할 때는
enable-amq1-prefix
속성을 false 로 설정하여 접두사를 포함하지 않도록 연결 팩토리를 구성할 수 있습니다.
pooled-connection-factory를 사용하도록 MDB 구성
pooled-connection-factory
가 원격 Artemis 서버에 연결하도록 구성된 후 원격 서버에서 메시지를 읽고자 하는 Message-Driven Beans(MDB)에는 pooled-connection-factory
리소스 이름을 사용하여 @ResourceAdapter
주석에 주석을 달아야 합니다.
MDB에서 원격 서버에 메시지를 보내야 하는 경우 JNDI 항목
중 하나를 사용하여 조회하여 pooled-connection-factory
를 삽입해야 합니다.
@Inject @JMSConnectionFactory("java:/jms/remoteCF") private JMSContext context;
@Inject
@JMSConnectionFactory("java:/jms/remoteCF")
private JMSContext context;
자카르타 메시징 대상 구성
또한 MDB는 메시지를 사용할 대상을 지정해야 합니다. 이 작업을 수행하는 표준 방법은 로컬 서버의 JNDI 조회에 해당하는 destinationLookup
활성화 구성 속성을 정의하는 것입니다.
로컬 서버에 원격 Artemis 서버에 대한 JNDI 바인딩이 포함되지 않은 경우 대상 활성화 구성 속성을 사용하여 원격 Artemis 서버에 구성된 대로 대상
이름을 지정하고 useJNDI
활성화 구성 속성을 false로 설정합니다
. 이는 JNDI 조회 없이도 Jakarta Messaging 대상을 자동으로 생성하도록 Artemis 리소스 어댑터에 지시합니다.
위의 예에서 활성화 구성 속성은 원격 Artemis 서버에서 호스팅되는 myQueue
라는 Jakarta Messaging Queue의 메시지를 사용하도록 MDB를 구성합니다. 대부분의 경우 MDB는 사용된 메시지를 처리하기 위해 다른 대상을 조회할 필요가 없으며 메시지에 정의된 경우 JMSReplyTo
대상을 사용할 수 있습니다.
MDB에 원격 서버에 정의된 다른 Jakarta Messaging 대상이 필요한 경우 클라이언트 측 JNDI를 사용해야 합니다. 자세한 내용은 서버에 연결을 참조하십시오.
31.3. Red Hat AMQ에 연결하도록 Artemis 리소스 어댑터 구성 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat AMQ 7의 원격 설치에 연결하도록 통합된 Artemis 리소스 어댑터를 구성할 수 있습니다. 그러면 JBoss EAP 7.4 애플리케이션의 자카르타 메시징 공급자가 됩니다. 이를 통해 JBoss EAP는 원격 Red Hat AMQ 7 서버의 클라이언트가 될 수 있습니다.
AMQP 또는 STOMP와 같은 다른 메시징 프로토콜에 대한 지원이 필요한 경우 Red Hat AMQ 7을 메시징 브로커로 구성해야 합니다. 그런 다음 JBoss EAP 서버에 통합된 Artemis 리소스 어댑터를 사용하여 배포된 애플리케이션의 메시지를 처리할 수 있습니다.
통합 리소스 어댑터의 제한 사항
큐 및 주제의 동적 생성
JBoss EAP 7.4에 통합된 Artemis 리소스 어댑터는 Red Hat AMQ 7 브로커에서 대기열과 토픽의 동적 생성을 지원하지 않습니다. 원격 Red Hat AMQ 7 서버에서 모든 대기열 및 주제 대상을 직접 구성해야 합니다.
연결 팩트 생성
Red Hat AMQ를 사용하면 pooled-connection-factory와
를 모두 사용하여 연결 팩토리를 구성할 수 있지만 각 연결 팩토리가 생성되는 방식에서 차이가 있습니다. external-
contextexternal-context
를 사용하여 연결 팩토리를 만들 때 Jakarta Messaging 사양에 정의된 대로 간단한 Jakarta Messaging 연결 팩토리를 생성합니다. 새로 생성된 연결 팩토리는 기본적으로 messaging-activemq
하위 시스템에서 정의되는 RemoteConnectionFactory
와 동일합니다. 이 연결 팩토리는 애플리케이션 서버의 다른 구성 요소와 독립적입니다. 즉, 트랜잭션 관리자나 보안 관리자와 같은 다른 구성 요소와도 사용할 수 없습니다. 이러한 이유로 pooled-connection-factory
만 JBoss EAP 7에서 연결 팩토리를 만드는 데 사용할 수 있습니다. external-context
는 원격 AMQ 7 브로커에 이미 구성된 Jakarta Messaging 대상을 JBoss EAP 7 서버의 JNDI 트리에 등록하는 데만 사용할 수 있으므로 로컬 배포에서 조회하거나 주입할 수 있습니다.
external-context 또는
요소를 구성하여 만든 연결 팩토리는 Artemis 리소스 어댑터를 사용하지 않으므로 원격 AMQ 7 브로커에 연결하는 데 사용할 수 없습니다. connection-
factorypooled-connection-factory
요소를 구성하여 생성된 연결 팩토리만 원격 AMQ7 브로커에 연결할 때 지원됩니다.
원격 Red Hat AMQ Server를 사용하도록 JBoss EAP 구성
관리 CLI를 사용하여 다음 단계에 따라 Red Hat AMQ 7의 원격 설치를 메시징 공급자로 사용하도록 JBoss EAP를 구성할 수 있습니다.
Red Hat AMQ 7
broker.xml
배포 설명자 파일에서 큐를 구성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고JBoss EAP에 포함된 Artemis 리소스 어댑터는 ActiveMQ Artemis Jakarta Messaging Client 2.x를 사용합니다. 이 클라이언트에는 주소에
anycastPrefix
및multicastPrefix
접두사가 필요합니다. 또한 큐 이름이 주소 이름과 같을 것으로 예상됩니다.원격 커넥터를 만듭니다.
/subsystem=messaging-activemq/remote-connector=netty-remote-throughput:add(socket-binding=messaging-remote-throughput)
/subsystem=messaging-activemq/remote-connector=netty-remote-throughput:add(socket-binding=messaging-remote-throughput)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그러면
messaging
가 생성됩니다.-activemq 하위 시스템에서 다음과 같은 remote-
connector<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> ... <remote-connector name="netty-remote-throughput" socket-binding="messaging-remote-throughput"/> ... </subsystem>
<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> ... <remote-connector name="netty-remote-throughput" socket-binding="messaging-remote-throughput"/> ... </subsystem>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 원격 대상 아웃바운드 소켓 바인딩을 추가합니다.
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=messaging-remote-throughput:add(host=localhost, port=61616)
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=messaging-remote-throughput:add(host=localhost, port=61616)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이렇게 하면 outbound-
socket
이 생성됩니다.-binding 요소 구성에 다음과 같은 remote-
destination<outbound-socket-binding name="messaging-remote-throughput"> <remote-destination host="localhost" port="61616"/> </outbound-socket-binding>
<outbound-socket-binding name="messaging-remote-throughput"> <remote-destination host="localhost" port="61616"/> </outbound-socket-binding>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 원격 커넥터에 대해 풀링된 연결 팩토리를 추가합니다.
/subsystem=messaging-activemq/pooled-connection-factory=activemq-ra-remote:add(transaction=xa,entries=[java:/RemoteJmsXA, java:jboss/RemoteJmsXA],connectors=[netty-remote-throughput])
/subsystem=messaging-activemq/pooled-connection-factory=activemq-ra-remote:add(transaction=xa,entries=[java:/RemoteJmsXA, java:jboss/RemoteJmsXA],connectors=[netty-remote-throughput])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그러면
messaging
가 생성됩니다.-activemq 하위 시스템에 다음과 같은 pooled-connection-
factory<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> ... <pooled-connection-factory name="activemq-ra-remote" entries="java:/RemoteJmsXA java:jboss/RemoteJmsXA" connectors="netty-remote-throughput"/> ... </subsystem>
<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> ... <pooled-connection-factory name="activemq-ra-remote" entries="java:/RemoteJmsXA java:jboss/RemoteJmsXA" connectors="netty-remote-throughput"/> ... </subsystem>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고Artemis 1.x는 대상 이름에 접두사가 필요함(주제의 경우 jms.topic, 대기열의 경우 jms.queue). Artemis 2.x는 접두사가 필요하지 않지만 Artemis 1.x와의 호환성을 위해 EAP는 접두사를 계속 추가하고 호환성 모드에서 실행되도록 Artemis를 지시합니다. 원격 Artemis 2.x 서버에 연결하는 경우 호환성 모드가 아니므로 접두사가 필요하지 않을 수 있습니다. 접두사 없이 대상을 사용할 때는
enable-amq1-prefix
속성을 false 로 설정하여 접두사를 포함하지 않도록 연결 팩토리를 구성할 수 있습니다.큐 및 토픽에 대한
external-context
바인딩을 만듭니다./subsystem=naming/binding=java\:global\/remoteContext:add(binding-type=external-context, class=javax.naming.InitialContext, module=org.apache.activemq.artemis, environment=[java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory, java.naming.provider.url=tcp://127.0.0.1:61616, queue.MyQueue=MyQueue, queue.MyOtherQueue=MyOtherQueue, topic.MyTopic=MyTopic])
/subsystem=naming/binding=java\:global\/remoteContext:add(binding-type=external-context, class=javax.naming.InitialContext, module=org.apache.activemq.artemis, environment=[java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory, java.naming.provider.url=tcp://127.0.0.1:61616, queue.MyQueue=MyQueue, queue.MyOtherQueue=MyOtherQueue, topic.MyTopic=MyTopic])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이렇게 하면
네이밍
하위 시스템에서 다음과 같은external-context
바인딩이 생성됩니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow JNDI 이름을 Red Hat AMQ 7 주소 이름 값으로 설정하여 Jakarta Messaging 대기열 및 토픽에 대한 조회 항목을 생성합니다. 이렇게 하면 JNDI 이름과 Red Hat AMQ 7 주소 이름 사이에 매핑이 생성됩니다.
/subsystem=naming/binding=java\:\/MyQueue:add(lookup=java:global/remoteContext/MyQueue,binding-type=lookup) /subsystem=naming/binding=java\:\/MyOtherQueue:add(lookup=java:global/remoteContext/MyOtherQueue,binding-type=lookup) /subsystem=naming/binding=java\:\/MyTopic:add(lookup=java:global/remoteContext/MyTopic,binding-type=lookup)
/subsystem=naming/binding=java\:\/MyQueue:add(lookup=java:global/remoteContext/MyQueue,binding-type=lookup) /subsystem=naming/binding=java\:\/MyOtherQueue:add(lookup=java:global/remoteContext/MyOtherQueue,binding-type=lookup) /subsystem=naming/binding=java\:\/MyTopic:add(lookup=java:global/remoteContext/MyTopic,binding-type=lookup)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이렇게 하면
네이밍
하위 시스템에서 다음조회
구성이 생성됩니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 또는 명명 하위 시스템을 구성하는 대신
/subsystem=messaging-activemq/external-jms-queue
또는/subsystem=messaging-activemq/external-jms-topic
리소스를 정의합니다. 예를 들면 다음과 같습니다./subsystem=messaging-activemq/external-jms-queue=MyQueue:add(entries=[java:/MyQueue])
/subsystem=messaging-activemq/external-jms-queue=MyQueue:add(entries=[java:/MyQueue])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이렇게 하면 다음 리소스가 생성됩니다.
<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> ... <external-jms-queue name="MyQueue" entries="java:/MyQueue"/> ... </subsystem>
<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> ... <external-jms-queue name="MyQueue" entries="java:/MyQueue"/> ... </subsystem>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고external-jms-queue
리소스는 대기열 관리 및 통계를 위한 작업을 제공하지 않습니다.
이제 Red Hat AMQ 7의 원격 설치를 메시징 프로바이더로 사용하도록 JBoss EAP가 구성되어 있습니다.
31.4. 원격 Artemis 기반 브로커에 대한 자카르타 메시징 리소스 구성 링크 복사링크가 클립보드에 복사되었습니다!
관리 CLI에서 @JMSConnectionFactoryDefinition 주석 또는
주석을 사용하여 Red Hat AMQ 7과 같은 원격 Artemis 기반 브로커의 Jakarta Messaging 리소스를 구성할 수 있습니다. 관리 콘솔에서 리소스를 구성할 수도 있습니다.
@JMSDestinationDefinition
원격 ActiveMQ 서버 리소스에는 Artemis의 로컬 인스턴스가 필요하지 않습니다. 이를 통해 JBoss EAP 이미지의 메모리 및 CPU 공간을 줄일 수 있습니다.
31.4.1. JMSConnectionFactoryDefinition Annotation을 사용한 자카르타 메시징 리소스 구성 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP는 @JMSConnectionFactoryDefinition
주석을 사용하여 연결 팩토리를 정의합니다. 이 연결 팩토리는 로컬 또는 원격 Artemis 브로커에 연결할 수 있습니다. 그런 다음 @JMSConnectionFactoryDefinition
주석의 resourceAdapter
요소는 원격 Artemis 브로커에 연결할 수 있는 messaging
의 이름을 나타냅니다. -subsystem에 정의된 pooled-
connection-factoryresourceAdapter
요소는 연결 팩토리를 만드는 데 사용되는 리소스 어댑터 또는 연결 팩토리가 정의된 리소스 어댑터를 정의합니다.
resourceAdapter
요소가 @JMSConnectionFactoryDefinition
주석에 정의되지 않은 경우 messaging-activemq
하위 시스템은 기본적으로 연결 팩토리의 JNDI 이름을 사용합니다. 이를 기본 바인딩이라고 합니다. 기본 바인딩은 /subsystem=ee/service=default
특성을 사용하여 정의됩니다. -bindings에서 jms-connection-
factoryresourceAdapter
요소를 지정하거나 jms-connection-factory
의 기본 바인딩에서 정의할 수 있으며 원격 브로커에 대한 pooled-connection-factory
인 경우 이를 사용하여 원격 브로커에 연결할 수 있습니다.
messaging-activemq 하위 시스템에
의 기본 바인딩에서 가져올 수 없는 경우 Jakarta Messaging 리소스를 생성하는 작업은 resourceAdapter
가 정의되지 않거나 jms-
connection-factory리소스 어댑터의
admin-objects 및
s 하위 시스템에 위임됩니다.connection-definitions 리소스를 기반으로 resource-
adapter
다음 섹션에서는 @JMSConnectionFactoryDefinition
주석을 구성하고 사용하는 방법에 대한 예를 제공합니다.
기본 리소스 어댑터를 사용하여 @JMSConnectionFactoryDefinition 구성
원격 인스턴스에 대한 소켓 바인딩을 생성합니다.
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=messaging-remote-throughput:add(host=127.0.0.2, port=5445)
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=messaging-remote-throughput:add(host=127.0.0.2, port=5445)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 커넥터를 생성합니다.
/subsystem=messaging-activemq/remote-connector=remote-amq:add(socket-binding="messaging-remote-throughput")
/subsystem=messaging-activemq/remote-connector=remote-amq:add(socket-binding="messaging-remote-throughput")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 풀링된 연결 팩토리를 생성합니다.
/subsystem=messaging-activemq/pooled-connection-factory=activemq-ra-remote:add(entries=["java:/jms/remote-amq/JmsConnectionFactory"],connectors=["remote-amq"]
/subsystem=messaging-activemq/pooled-connection-factory=activemq-ra-remote:add(entries=["java:/jms/remote-amq/JmsConnectionFactory"],connectors=["remote-amq"]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ee
하위 시스템에 대한 기본 Jakarta Messaging 연결 팩토리를 정의합니다./subsystem=ee/service=default-bindings:write-attribute(name=jms-connection-factory, value="java:/jms/remote-amq/JmsConnectionFactory")
/subsystem=ee/service=default-bindings:write-attribute(name=jms-connection-factory, value="java:/jms/remote-amq/JmsConnectionFactory")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 애플리케이션 코드에서
@JMSConnectionFactoryDefinition
주석을 사용합니다.@JMSConnectionFactoryDefinition(name="java:/jms/remote-amq/JmsConnectionFactory")
@JMSConnectionFactoryDefinition(name="java:/jms/remote-amq/JmsConnectionFactory")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
원격 Artemis Broker를 사용하여 @JMSConnectionFactoryDefinition 구성
커넥터를 생성합니다.
/subsystem=messaging-activemq/remote-connector=remote-amq:add(socket-binding="messaging-remote-throughput")
/subsystem=messaging-activemq/remote-connector=remote-amq:add(socket-binding="messaging-remote-throughput")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 풀링된 연결 팩토리를 생성합니다.
/subsystem=messaging-activemq/pooled-connection-factory=activemq-ra-remote:add(entries=["java:/jms/remote-amq/JmsConnectionFactory"],connectors=["remote-amq"])
/subsystem=messaging-activemq/pooled-connection-factory=activemq-ra-remote:add(entries=["java:/jms/remote-amq/JmsConnectionFactory"],connectors=["remote-amq"])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ee
하위 시스템에 대한 기본 Jakarta Messaging 연결 팩토리를 정의합니다./subsystem=ee/service=default-bindings:write-attribute(name=jms-connection-factory, value="java:/jms/remote-amq/JmsConnectionFactory")
/subsystem=ee/service=default-bindings:write-attribute(name=jms-connection-factory, value="java:/jms/remote-amq/JmsConnectionFactory")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 애플리케이션 코드에서
@JMSConnectionFactoryDefinition
주석을 사용합니다.@JMSConnectionFactoryDefinition( name="java:app/myCF" resourceAdapter="myPCF" )
@JMSConnectionFactoryDefinition( name="java:app/myCF" resourceAdapter="myPCF" )
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
타사 JMS 리소스 어댑터를 사용하여 @JMSConnectionFactoryDefinition 구성
커넥터를 생성합니다.
/subsystem=messaging-activemq/remote-connector=remote-amq:add(socket-binding="messaging-remote-throughput")
/subsystem=messaging-activemq/remote-connector=remote-amq:add(socket-binding="messaging-remote-throughput")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 풀링된 연결 팩토리를 생성합니다.
/subsystem=messaging-activemq/pooled-connection-factory=activemq-ra-remote:add(entries=["java:/jms/remote-amq/JmsConnectionFactory"],connectors=["remote-amq"])
/subsystem=messaging-activemq/pooled-connection-factory=activemq-ra-remote:add(entries=["java:/jms/remote-amq/JmsConnectionFactory"],connectors=["remote-amq"])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ee
하위 시스템에 대한 기본 Jakarta Messaging 연결 팩토리를 정의합니다./subsystem=ee/service=default-bindings:write-attribute(name=jms-connection-factory, value="java:/jms/remote-amq/JmsConnectionFactory")
/subsystem=ee/service=default-bindings:write-attribute(name=jms-connection-factory, value="java:/jms/remote-amq/JmsConnectionFactory")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 애플리케이션 코드에서
@JMSConnectionFactoryDefinition
주석을 사용합니다.@JMSConnectionFactoryDefinition( name="java:app/myCF" resourceAdapter="wsmq" )
@JMSConnectionFactoryDefinition( name="java:app/myCF" resourceAdapter="wsmq" )
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
31.4.2. JMSDestinationDefinition 주석을 사용한 자카르타 메시징 리소스 구성 링크 복사링크가 클립보드에 복사되었습니다!
서버 리소스를 사용하여 로컬 브로커에 pooled-connection-factory
에 필요한 대상을 생성할 수 있습니다.
resourceAdapter
요소가 pooled-connection-factory
이름을 가리키고 로컬 브로커(예: /subsystem/messaging-activemq/server=default
)에 정의된 경우 로컬 Artemis 브로커에 대상을 생성합니다.
원격 Artemis-based 브로커에서 대상을 생성해야 하는 경우 pooled-connection-factory
는 messaging-activemq
하위 시스템에 정의해야 합니다.
@JMSDestinationDefinition
주석에 설정된
resourceAdapter
요소가 messaging-activemq 하위 시스템에서
의 커넥터가 로컬 또는 원격 Artemis 브로커를 가리키는지 여부에 관계없이 이 브로커에 대상이 생성됩니다.
서버에
대해 정의된 resourceAdapter 요소와 일치하는 경우, pooled-
connection-factory
JMSDestinationDefinition 주석을 사용하여 자카르타 메시징 리소스 구성
커넥터를 생성합니다.
/subsystem=messaging-activemq/remote-connector=remote-amq:add(socket-binding="messaging-remote-throughput")
/subsystem=messaging-activemq/remote-connector=remote-amq:add(socket-binding="messaging-remote-throughput")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 풀링된 연결 팩토리를 생성합니다.
/subsystem=messaging-activemq/pooled-connection-factory=activemq-ra-remote:add(entries=["java:/jms/remote-amq/JmsConnectionFactory"],connectors=["remote-amq"])
/subsystem=messaging-activemq/pooled-connection-factory=activemq-ra-remote:add(entries=["java:/jms/remote-amq/JmsConnectionFactory"],connectors=["remote-amq"])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ee
하위 시스템에 대한 기본 Jakarta Messaging 연결 팩토리를 정의합니다./subsystem=ee/service=default-bindings:write-attribute(name=jms-connection-factory, value="java:/jms/remote-amq/JmsConnectionFactory")
/subsystem=ee/service=default-bindings:write-attribute(name=jms-connection-factory, value="java:/jms/remote-amq/JmsConnectionFactory")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 애플리케이션 코드에서
@JMSDestinationDefinition
주석을 사용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
31.4.3. 관리 콘솔을 사용하여 원격 ActiveMQ 서버 리소스 구성 링크 복사링크가 클립보드에 복사되었습니다!
관리 콘솔에서 다음 원격 ActiveMQ 서버 리소스를 구성할 수 있습니다.
- 일반 커넥터
- VM 커넥터
- HTTP 커넥터
- 원격 커넥터
- 검색 그룹
- 연결 팩토리
- 풀링된 연결 팩토리
- 외부 JMS 대기열
- 외부 JMS 주제
관리 콘솔에서 원격 ActiveMQ 서버 리소스를 구성하려면 다음을 수행합니다.
- 관리 콘솔에 액세스하여 Configuration → Subsystems → Messaging (ActiveMQ) → Remote ActiveMQ Server 로 이동하여 보기를 클릭합니다.
- 네비게이션 창에서 구성할 리소스를 클릭합니다.
31.5. Red Hat JBoss A-MQ 리소스 어댑터 배포 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat JBoss A-MQ 제품에서 제공하는 리소스 어댑터를 배포하고 Red Hat JBoss A-MQ 6.3.0과 같이 JBoss EAP의 외부 자카르타 메시징 공급자가 될 수 있습니다.
Red Hat JBoss A-MQ 리소스 어댑터를 배포하고 구성하는 방법에 대한 자세한 내용은 Red Hat JBoss A-MQ 설명서 모음에 있는 JBoss Enterprise Application Platform과 통합 에서 ActiveMQ 리소스 어댑터 설치를 참조하십시오.
제품 이름이 6.x 릴리스의 Red Hat JBoss A-MQ에서 7.x 릴리스의 Red Hat AMQ로 변경되었습니다.
31.5.1. Red Hat JBoss A-MQ 6 리소스 어댑터 문제 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP는 종속되지 않은 리소스를 찾아 애플리케이션을 추적 및 모니터링합니다. 대부분의 경우 유용하지만 애플리케이션에서 단일 메서드에서 닫힌
UserTransaction
인스턴스를 다시 사용하려고 할 때 이러한 모니터링으로 예기치 않은 동작이 발생할 수 있습니다. 애플리케이션이 이러한 방식으로 연결을 재사용하는 경우 Red Hat JBoss A-MQ 리소스 어댑터를 구성할 때 <connection-definition/>
요소에tracking="false"
속성을 추가합니다.<connection-definition class-name="..." tracking="false" ... />
<connection-definition class-name="..." tracking="false" ... />
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Red Hat JBoss A-MQ 6 리소스 어댑터는 JBoss EAP에서 사용하는 Narayana API에서
XAResourceWrapper
를 구현하지 않습니다. 결과적으로 트랜잭션 관리자가 모든 XA 트랜잭션 참가자에게 커밋을 보낸 다음 응답을 기다리는 동안 충돌하는 경우, 커밋된 트랜잭션의 레코드가 해당 오브젝트 저장소에서 제거될 때까지 무기한 경고를 기록합니다. Red Hat JBoss A-MQ 6 리소스 어댑터는 네트워크 연결 해제와 같은 오류가 발생하면 커밋 메서드 프로토콜을 호출하는 동안 발생하는 코드
XAER_RMERR
을 반환합니다. 이 동작은 올바른 반환 코드가 XAER_RMFAIL 또는 XA
사양이 중단됩니다. 결과적으로 트랜잭션이 메시지 브로커 측에서 알 수 없는 상태로 유지되므로 경우에 따라 데이터 불일치가 발생할 수 있습니다. 예기치 않은 오류 코드가 반환되면 아래 메시지와 비슷한 메시지가 기록됩니다.ER_
RETRY여야 하므로 XAWARN [com.arjuna.ats.jtax] ...: XAResourceRecord.rollback caused an XA error: ARJUNA016099: Unknown error code:0 from resource ... in transaction ...: javax.transaction.xa.XAException: Transaction ... has not been started.
WARN [com.arjuna.ats.jtax] ...: XAResourceRecord.rollback caused an XA error: ARJUNA016099: Unknown error code:0 from resource ... in transaction ...: javax.transaction.xa.XAException: Transaction ... has not been started.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Red Hat JBoss A-MQ 6.x는 Java EE 6에 포함된 JMS 1.1 사양을 지원합니다. Jakarta EE 8에서 도입되었으며 JBoss EAP 7에서 지원되는 Jakarta Messaging 2.0 사양을 지원하지 않습니다. 원격 Red Hat JBoss A-MQ 브로커에 메시지를 보내려면 애플리케이션 코드 내에서 JMS 1.1 API 를 사용해야 합니다. Red Hat JBoss A-MQ 6.x 지원 표준에 대한 자세한 내용은 Red Hat JBoss A-MQ 지원 표준 및 프로토콜을 참조하십시오.
31.6. IBM MQ 리소스 어댑터 배포 링크 복사링크가 클립보드에 복사되었습니다!
IBM MQ 정보
IBM MQ는 분산 시스템의 애플리케이션이 서로 통신할 수 있도록 하는 IBM의 MOM(Messaging Oriented Middleware) 제품입니다. 이 작업은 메시지 및 메시지 큐를 사용하여 수행됩니다. IBM MQ는 메시지 큐에 메시지를 전달하고 메시지 채널을 사용하여 다른 대기열 관리자에게 데이터를 전송하는 일을 담당합니다. IBM MQ에 대한 자세한 내용은 IBM 제품 웹 사이트의 IBM MQ 를 참조하십시오.
요약
IBM MQ는 JBoss EAP 7.4의 외부 자카르타 메시징 공급자로 구성할 수 있습니다. 이 섹션에서는 JBoss EAP에서 IBM MQ 리소스 어댑터를 배포하고 구성하는 단계를 다룹니다. 이 배포 및 구성은 관리 CLI 도구 또는 웹 기반 관리 콘솔을 사용하여 수행할 수 있습니다. IBM MQ의 지원되는 구성에 대한 최신 정보는 JBoss EAP 지원 구성을 참조하십시오.
구성 변경 사항을 적용하려면 IBM MQ 리소스 어댑터를 구성한 후 시스템을 다시 시작해야 합니다.
사전 요구 사항
시작하기 전에 IBM MQ 리소스 어댑터 버전을 확인하고 구성 속성을 이해해야 합니다.
-
IBM MQ 리소스 어댑터는
wmq.jmsra.rar
라는 RR(리소스 아카이브) 파일로 제공됩니다./opt/
파일을 가져올 수 있습니다. JBoss EAP의 각 릴리스에서 지원되는 특정 버전에 대한 정보는 JBoss EAP 지원 구성을 참조하십시오.mqm/java/lib/jca/wmq.jmsra.rar에서 w
mq.jmsra.rar 다음 IBM MQ 구성 값을 알아야 합니다. 이러한 값에 대한 자세한 내용은 IBM MQ 제품 설명서를 참조하십시오.
- MQ_QUEUE_MANAGER: IBM MQ 큐 관리자의 이름
- MQ_HOST_NAME: IBM MQ 큐 관리자 연결에 사용되는 호스트 이름
- MQ_CHANNEL_NAME: IBM MQ 큐 관리자에 연결하는 데 사용되는 서버 채널
- MQ_QUEUE_NAME: 대상 큐의 이름
- MQ_TOPIC_NAME: 대상 주제의 이름
- MQ_PORT: IBM MQ 큐 관리자에 연결하는 데 사용되는 포트
- MQ_CLIENT: 전송 유형
아웃바운드 연결의 경우 다음 구성 값에 익숙해야 합니다.
- MQ_CONNECTIONFACTORY_NAME: 원격 시스템에 대한 연결을 제공할 연결 팩토리 인스턴스의 이름
절차
다음은 IBM에서 제공하는 기본 구성이며 변경될 수 있습니다. 자세한 내용은 IBM MQ 설명서를 참조하십시오.
-
먼저
wmq.jmsra.rar
파일을EAP_HOME/standalone/deployments/
디렉터리에 복사하여 리소스 어댑터를 수동으로 배포합니다. 그런 다음 관리 CLI를 사용하여 리소스 어댑터를 추가하고 구성합니다.
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:add(archive=wmq.jmsra.rar, transaction-support=XATransaction)
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:add(archive=wmq.jmsra.rar, transaction-support=XATransaction)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 트랜잭션 지원
요소가XATransaction
으로 설정되었는지 확인합니다. 트랜잭션을 사용할 때는 아래 예제와 같이 XA 복구 데이터 소스의 보안 도메인을 제공해야 합니다./subsystem=resource-adapters/resource-adapter=test/connection-definitions=test:write-attribute(name=recovery-security-domain,value=myDomain)
/subsystem=resource-adapters/resource-adapter=test/connection-definitions=test:write-attribute(name=recovery-security-domain,value=myDomain)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow XA 복구에 대한 자세한 내용은 JBoss EAP 구성 가이드에서 XA 복구 구성을 참조하십시오.
트랜잭션이 아닌 배포의 경우
트랜잭션 지원
값을NoTransaction
으로 변경합니다./subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:add(archive=wmq.jmsra.rar, transaction-support=NoTransaction)
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:add(archive=wmq.jmsra.rar, transaction-support=NoTransaction)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이제 리소스 어댑터가 생성되었으므로 필요한 구성 요소를 추가할 수 있습니다.
큐에 대한
admin-object
를 추가하고 해당 속성을 구성합니다./subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao:add(class-name=com.ibm.mq.connector.outbound.MQQueueProxy, jndi-name=java:jboss/MQ_QUEUE_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao/config-properties=baseQueueName:add(value=MQ_QUEUE_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao/config-properties=baseQueueManagerName:add(value=MQ_QUEUE_MANAGER)
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao:add(class-name=com.ibm.mq.connector.outbound.MQQueueProxy, jndi-name=java:jboss/MQ_QUEUE_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao/config-properties=baseQueueName:add(value=MQ_QUEUE_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao/config-properties=baseQueueManagerName:add(value=MQ_QUEUE_MANAGER)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 주제의
admin-object
를 추가하고 해당 속성을 구성합니다./subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao:add(class-name=com.ibm.mq.connector.outbound.MQTopicProxy, jndi-name=java:jboss/MQ_TOPIC_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao/config-properties=baseTopicName:add(value=MQ_TOPIC_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao/config-properties=brokerPubQueueManager:add(value=MQ_QUEUE_MANAGER)
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao:add(class-name=com.ibm.mq.connector.outbound.MQTopicProxy, jndi-name=java:jboss/MQ_TOPIC_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao/config-properties=baseTopicName:add(value=MQ_TOPIC_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao/config-properties=brokerPubQueueManager:add(value=MQ_QUEUE_MANAGER)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 관리되는 연결 팩토리에 대한 연결 정의를 추가하고 해당 속성을 구성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
JBoss EAP의 EJB3 메시징 시스템의 기본 프로바이더를 JBoss EAP 7 메시징에서 IBM MQ로 변경하려면 관리 CLI를 사용하여 다음과 같이
ejb3
하위 시스템을 수정합니다./subsystem=ejb3:write-attribute(name=default-resource-adapter-name,value=wmq.jmsra.rar)
/subsystem=ejb3:write-attribute(name=default-resource-adapter-name,value=wmq.jmsra.rar)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같이 MDB 코드에서
@ActivationConfigProperty
및@ResourceAdapter
주석을 구성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow @ResourceAdapter
값의 VERSION 을 RAR 이름의 실제 버전으로 바꿉니다.리소스 어댑터를 활성화합니다.
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:activate()
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:activate()
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
31.6.1. IBM MQ 리소스 어댑터의 제한 사항 및 알려진 문제 링크 복사링크가 클립보드에 복사되었습니다!
다음 표에는 IBM MQ 리소스 어댑터의 알려진 문제가 나열되어 있습니다. 버전 열의 확인 표시(cd)
는 해당 버전의 리소스 어댑터에 문제가 있음을 나타냅니다.
JIRA | 문제 설명 | IBM MQ 8 | IBM MQ 9 |
---|---|---|---|
IBM MQ 리소스 어댑터는 | ✔ | ✔ | |
다음 제한 사항은 IBM MQ의 message 속성 이름에 적용됩니다.
각 버전의 리소스 어댑터에 대한 메시지 속성 이름 제한 전체 목록은 IBM MQ, 버전 8.0 및 IBM MQ의 속성 이름 제한사항, IBM 9.0 에 대한 속성 이름 제한 사항을 참조하십시오. | ✔ | ✔ | |
@ActivationConfigProperty(propertyName = "destination", propertyValue = "QUEUE")
| ✔ | ✔ | |
IBM MQ 리소스 어댑터를 사용하여 | ✔ | ✔ | |
IBM MQ 리소스 어댑터는 연결이 시작되기 전에 대기열과 주제에서 메시지를 읽을 수 있습니다. 즉, 소비자는 연결을 시작하기 전에 메시지를 사용할 수 있습니다. 이 문제를 방지하려면 원격 IBM MQ 브로커에서 만든 연결 팩토리를 사용하여 | ✔ | ✔ | |
다음 코드 예에서 @Inject @JMSConnectionFactory("jms/CF") @JMSPasswordCredential(userName="myusername", password="mypassword") @JMSSessionMode(JMSContext.DUPS_OK_ACKNOWLEDGE) transient JMSContext context3;
| ✔ | ✔ | |
자카르타 메시징 사양에 따라 | ✔ | ✔ | |
| ✔ | ✔ | |
| ✔ | ✔ | |
잘못된 인증 정보가 사용되는 경우 IBM MQ 리소스 어댑터는 WARN [org.jboss.jca.core.connectionmanager.pool.strategy.PoolByCri] (EJB default - 7) IJ000604: Throwable while attempting to get a new connection: null: com.ibm.mq.connector.DetailedResourceException: MQJCA1011: Failed to allocate a {JMS} connection., error code: MQJCA1011 An internal error caused an attempt to allocate a connection to fail. See the linked exception for details of the failure.
다음은 이 문제를 일으킬 수 있는 코드의 예입니다. QueueConnection qc = queueConnectionFactory.createQueueConnection("invalidUserName", "invalidPassword");
| ✔ | ✔ | |
SVR-ERROR: Expected JMSException, received com.ibm.mq.connector.outbound.MQQueueProxy cannot be cast to com.ibm.mq.jms.MQDestination
이는 대기열 또는 토픽 조회에 사용되는 JNDI 이름이 | ✔ | ✔ | |
| ✔ | ✔ | |
| ✔ | ✔ | |
연결을 닫고 동일한 ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /jmsServlet-1.0-SNAPSHOT/: com.ibm.msg.client.jms.DetailedJMSRuntimeException: MQJCA0002: An exception occurred in the IBM MQ layer. See the linked exception for details. A call to IBM MQ classes for Java(tm) caused an exception to be thrown.
이 문제는 동일한 | ✔ | ✔ | |
CMT(컨테이너 관리 트랜잭션)에서 상태 저장 세션 빈이 토픽으로 메시지를 보내려고 하면 전송된 메시지가 실패하고 다음 메시지가 표시됩니다. SVR-ERROR: com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ2007: Failed to send a message to destination 'MDB_NAME TOPIC_NAME'
스택 추적은 다음과 같은 예외로 인해 발생하는 것으로 표시됩니다. com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2072' ('MQRC_SYNCPOINT_NOT_AVAILABLE')
| ✔ | ✔ | |
JBoss EAP에서 IBM MQ 8 또는 IBM MQ 9 리소스 어댑터 WARN [org.jboss.as.connector.deployers.RADeployer] (MSC service thread 1-8) IJ020017: Invalid archive: file:/<path-to-jboss>/jboss-eap-7.4/standalone/tmp/vfs/temp/tempa02bdd5ee254e590/content-135e13d4f38704fc/contents/
IBM MQ v9.0.0.4 리소스 어댑터는 JBoss EAP 7.4에 대한 자카르타 메시징 공급자 테스트의 일부로 테스트되었습니다. 이 경고 메시지를 무시하도록 선택하거나 /subsystem=jca/archive-validation=archive-validation:write-attribute(name=enabled, value=false)
| ✔ | ✔ |
31.7. 일반 자카르타 메시징 리소스 어댑터 배포 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP는 타사 Jakarta Messaging 프로바이더와 작동하도록 구성할 수 있지만 모든 Jakarta Messaging 공급자가 자카르타 애플리케이션 플랫폼과의 통합을 위한 Jakarta Messaging Jakarta Connectors 리소스 어댑터를 생성하는 것은 아닙니다. 이 절차에서는 자카르타 메시징 공급자에 연결하기 위해 JBoss EAP에 포함된 일반 자카르타 메시징 리소스 어댑터를 구성하는 데 필요한 단계를 설명합니다. 이 절차에서 Tibco 8은 자카르타 메시징 공급자의 예로 사용됩니다. 다른 Jakarta Messaging 공급자는 다른 구성이 필요할 수 있습니다.
일반 자카르타 메시징 리소스 어댑터를 사용하기 전에 Jakarta Messaging 공급자와 함께 JBoss EAP와 함께 사용할 수 있는 자체 리소스 어댑터가 있는지 확인합니다. 일반 Jakarta Messaging Jakarta Connectors 리소스 어댑터는 자카르타 메시징 공급자가 자체 리소스 어댑터를 제공하지 않는 경우에만 사용해야 합니다.
일반 리소스 어댑터를 구성하려면 다음을 수행해야 합니다.
- Jakarta Messaging 공급자 서버가 이미 구성되어 있어야 하며 사용할 준비가 되어 있어야 합니다. 공급자의 Jakarta Messaging 구현에 필요한 모든 바이너리가 필요합니다.
연결 팩토리, 큐 또는 토픽과 같은 자카르타 메시징 리소스를 조회할 수 있으려면 다음 Jakarta Messaging 공급자 속성의 값을 알아야 합니다.
-
java.naming.factory.initial
-
java.naming.provider.url
-
java.naming.factory.url.pkgs
-
이 절차에서 사용되는 예제 XML에서 이러한 매개 변수는 각각 PROVIDER_FACTORY_INITIAL,
PROVIDER_
URL, PROVIDER_CONNECTION_FACTORY
로 작성됩니다. 이러한 자리 표시자를 사용자 환경의 Jakarta Messaging 공급자 값으로 교체합니다.
31.7.1. 타사 자카르타 메시징 공급자와 함께 사용할 일반 자카르타 메시징 리소스 어댑터 구성 링크 복사링크가 클립보드에 복사되었습니다!
리소스 어댑터 모듈을 생성하고 구성합니다.
Jakarta Messaging 프로바이더와 연결하고 통신하는 데 필요한 모든 라이브러리를 포함하는 JBoss EAP 모듈을 생성합니다. 이 모듈의 이름은 org.jboss.genericjms.provider 로 지정됩니다.
-
다음 디렉토리 구조를 생성합니다.
EAP_HOME/modules/org/jboss/genericjms/provider/main
공급자의 Jakarta Messaging 구현에 필요한 바이너리를
EAP_HOME/modules/org/jboss/genericjms/provider/main
에 복사합니다.참고Tibco의 경우 필요한 바이너리는 Tibco 설치의
lib
디렉토리의tibjms.jar
및 tibcryptEAP_HOME/modules/org/jboss/genericjms/provider/main
에서module.xml
파일을 다음과 같이 생성하여 이전 단계의 JAR 파일을 리소스로 나열합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 CLI 명령을 사용하여 모듈을 the
ee
하위 시스템에 추가합니다./subsystem=ee:list-add(name=global-modules, value={"name" => "org.jboss.genericjms.provider", "slot" =>"main"}
/subsystem=ee:list-add(name=global-modules, value={"name" => "org.jboss.genericjms.provider", "slot" =>"main"}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
다음 디렉토리 구조를 생성합니다.
자카르타 메시징 공급자에 대한 Java 네이밍 및 디렉터리 인터페이스 외부 컨텍스트를 생성하고 구성합니다.
연결 팩토리 및 대상과 같은 자카르타 메시징 리소스는 자카르타 메시징 공급자에서 조회됩니다. 이 리소스에 대한 모든 로컬 조회가 원격 자카르타 메시징 프로바이더에서 자동으로 리소스를 조회하도록 JBoss EAP 인스턴스에 외부 컨텍스트를 추가합니다.
참고이 절차에서
EAP_HOME/standalone/configuration/standalone-full.xml
은 JBoss EAP 구성 파일로 사용됩니다.관리 CLI를 사용하여 외부 Java Naming 및 Directory Interface 컨텍스트를 생성하고 구성 속성을 포함합니다. 아래 예제의 속성은 원격 자카르타 메시징 공급자에 연결하려면 올바른 값으로 교체해야 합니다. 예를 들어 Tibco¢와 같은 일부 자카르타 메시징 프로바이더는 Java Naming 및 Directory Interface
lookup(Name)
메서드를 지원하지 않습니다. 이 경우 이 문제를 해결하기 위해true
값을 사용하여org.jboss.as.naming.lookup.by.string
속성을 추가합니다. 필수 속성 및 해당 값에 대한 정보는 어댑터의 설명서를 확인하십시오./subsystem=naming/binding="java:global/remoteJMS":add(binding-type=external-context,module=org.jboss.genericjms.provider,class=javax.naming.InitialContext,environment=[java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory,java.naming.provider.url=tcp://<hostname>:7222,org.jboss.as.naming.lookup.by.string=true])
/subsystem=naming/binding="java:global/remoteJMS":add(binding-type=external-context,module=org.jboss.genericjms.provider,class=javax.naming.InitialContext,environment=[java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFactory,java.naming.provider.url=tcp://<hostname>:7222,org.jboss.as.naming.lookup.by.string=true])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 외부 컨텍스트가 올바르게 구성된 경우
java:global/remoteJMS/
로 시작하는 리소스에 대한 모든 Java Naming 및 Directory Interface 조회가 원격 자카르타 메시징 프로바이더에서 수행됩니다. 예를 들어 메시지 기반 빈이java:global/remoteJMS/Queue1
에 대해 Java Naming 및 Directory Interface 조회를 수행하는 경우 외부 컨텍스트가 원격 자카르타 메시징 프로바이더에 연결하고Queue1
리소스에 대한 조회를 수행합니다.또는 Java Naming 및 Directory Interface 이름을 찾을 때
external-context
를 사용하지 않고 Java Naming 및 Directory Interface를 원격 서버에 조회할 수 있습니다. 이렇게 하려면 CLI를 사용하여 아래 예제와 같이external-context
를 참조하는 새 바인딩을 만듭니다./subsystem=naming/binding=java\:\/jms\/queue\/myQueue:add(binding-type=lookup, lookup=java:global/remoteJMS/jms/queue/myQueue)
/subsystem=naming/binding=java\:\/jms\/queue\/myQueue:add(binding-type=lookup, lookup=java:global/remoteJMS/jms/queue/myQueue)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 위의 예에서
java:/jms/queue/myQueue
에 대한 Java 네이밍 및 디렉터리 인터페이스 조회를 수행하는 애플리케이션은 원격 서버에서myQueue
라는 큐를 찾습니다.일반 자카르타 메시징 리소스 어댑터를 생성합니다.
관리 CLI를 사용하여 리소스 어댑터 생성
/subsystem=resource-adapters/resource-adapter=generic-ra:add(module=org.jboss.genericjms,transaction-support=XATransaction)
/subsystem=resource-adapters/resource-adapter=generic-ra:add(module=org.jboss.genericjms,transaction-support=XATransaction)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 일반 자카르타 메시징 리소스 어댑터를 구성합니다.
관리 CLI를 사용하여 리소스 어댑터의
connection-definition
및 기타 요소를 구성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 일반 리소스 어댑터를 사용하도록
ejb3
하위 시스템에서 기본 메시지 기반 빈 풀을 구성합니다./subsystem=ejb3:write-attribute(name=default-resource-adapter-name, value=generic-ra)
/subsystem=ejb3:write-attribute(name=default-resource-adapter-name, value=generic-ra)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
이제 일반 자카르타 메시징 리소스 어댑터가 구성되어 사용할 준비가 되었습니다. 다음은 새 메시지 기반 빈을 만들 때 리소스 어댑터를 사용하는 예입니다.
예제: 일반 리소스 어댑터를 사용한 코드
일반 자카르타 메시징 리소스 어댑터를 사용하는 경우 잠재적인 NullPointerException
오류를 방지하려면 세션이 트랜잭션되도록 설정해야 합니다. 이 오류는 자카르타 EE 사양에 처리되지 않을 것임을 명시할 때 일반 Jakarta Messaging 리소스 어댑터가 매개 변수 처리를 시도하기 때문에 발생합니다. 이는 connection.createSession(true, Session.SESSION_TRANSACTED)을 수행하여 수행합니다.
리소스 어댑터에서 풀링된 연결 팩토리를 사용할 수도 있습니다.
@Resource(lookup = "java:/jms/XAQCF") private ConnectionFactory cf;
@Resource(lookup = "java:/jms/XAQCF")
private ConnectionFactory cf;
외부 컨텍스트의 리소스를 직접 주입할 수는 없지만 외부 컨텍스트를 주입한 다음 조회를 수행할 수 있습니다. 예를 들어 Tibco¢ 브로커에 배포된 큐에 대한 조회는 다음과 같습니다.
@Resource(lookup = "java:global/remoteJMS") private Context context; ... Queue queue = (Queue) context.lookup("Queue1")
@Resource(lookup = "java:global/remoteJMS")
private Context context;
...
Queue queue = (Queue) context.lookup("Queue1")
31.8. 리소스 주석 사용 링크 복사링크가 클립보드에 복사되었습니다!
@Resource
주석을 사용하여 Jakarta Enterprise Beans는 Jakarta Messaging 리소스 또는 연결 팩토리를 직접 주입할 수 있습니다. @Resource
주석을 사용하여 다음 매개변수를 지정할 수 있습니다.
-
lookup
-
name
-
mappedName
리소스를 주입하려면 이러한 매개변수 중 하나에서 리소스의 JNDI(Java Naming and Directory Interface) 이름을 지정해야 합니다.
31.8.1. 자카르타 메시징 리소스 삽입 링크 복사링크가 클립보드에 복사되었습니다!
다음과 같이 큐를 정의합니다.
<jms-queue name="OutQueue" entries="jms/queue/OutQueue java:jboss/exported/jms/queue/OutQueue"/>
<jms-queue name="OutQueue" entries="jms/queue/OutQueue java:jboss/exported/jms/queue/OutQueue"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow @Resource
주석의lookup
, name 또는mappedName
매개변수에 Java Naming 및 Directory Interface이름을
지정하여 이 큐를 주입합니다. 예를 들면 다음과 같습니다.@Resource(lookup = "java:jboss/exported/jms/queue/OutQueue") public Queue myOutQueue;
@Resource(lookup = "java:jboss/exported/jms/queue/OutQueue") public Queue myOutQueue;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
31.8.2. 연결 팩트 삽입 링크 복사링크가 클립보드에 복사되었습니다!
연결 팩토리를 다음과 같이 정의합니다. 이 예제에서는
JmsXA
풀링된 연결 팩토리를 보여줍니다.<pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" transaction="xa"/>
<pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" transaction="xa"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같이 default
activemq-ra
풀링된 연결 팩토리를 주입합니다.@Resource(lookup = "java:/JmsXA") private ConnectionFactory cf;
@Resource(lookup = "java:/JmsXA") private ConnectionFactory cf;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
31.8.3. 일반 자카르타 메시징 리소스 어댑터에 대한 제한 사항 및 알려진 문제 링크 복사링크가 클립보드에 복사되었습니다!
자카르타 메시징 API는 자카르타 메시징 리소스를 생성하는 프로그래밍 방식을 제공하지 않으며 자카르타 메시징 2.0 사양에 정의된 기능만 지원됩니다. 사양에 대한 자세한 내용은 Jakarta Messaging 2.0 사양을 참조하십시오.
EE.5.18.4 자카르타 메시징 연결 팩토리 리소스 정의
이는 애플리케이션이 자카르타 메시징
ConnectionFactory
리소스를 정의할 수 있는 기능입니다.EE.5.18.5 자카르타 메시징 대상 정의
이는 애플리케이션이 자카르타 메시징
대상
리소스를 정의하는 기능입니다.
32장. 이전 및 앞으로의 호환성 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP는 HornetQ를 JBoss EAP와 같은 메시징 브로커로 사용하던 기존 버전의 JBoss EAP와 이전 버전과의 호환성을 모두 지원합니다. 이 두 가지 호환성 모드는 HornetQ의 코어 프로토콜을 지원하는 ActiveMQ Artemis의 기본 제공 메시징 서버인 ActiveMQ Artemis에서 제공합니다.
- 전달 호환성: HornetQ를 사용하는 레거시 자카르타 메시징 클라이언트는 ActiveMQ Artemis를 실행하는 JBoss EAP 7 서버에 연결할 수 있습니다.
- 이전 버전과 호환성: JBoss EAP 메시징을 사용하는 JBoss EAP 7 Jakarta Messaging 클라이언트는 HornetQ를 실행하는 레거시 JBoss EAP 6 서버에 연결할 수 있습니다.
32.1. 전달 호환성 링크 복사링크가 클립보드에 복사되었습니다!
전달 호환성에는 기존 JBoss EAP 6 Jakarta Messaging 클라이언트에 대한 코드 변경이 필요하지 않습니다. 지원은 JBoss EAP messaging-activemq
하위 시스템과 해당 리소스에서 제공합니다. 전달 호환성을 지원하려면 JBoss EAP 7 서버의 구성을 다음과 같이 변경합니다. 독립 실행형 서버에 대한 관리 CLI 명령 예제는 각 단계에 대해 제공됩니다.
원격 레거시 클라이언트의 포트 4447에서
소켓 바인딩
을 만듭니다./socket-binding-group=standard-sockets/socket-binding=legacy-remoting:add(port=4447)
/socket-binding-group=standard-sockets/socket-binding=legacy-remoting:add(port=4447)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 단계에서 만든
socket-binding
을 사용할 레거시 원격/subsystem=remoting/connector=legacy-remoting-connector:add(socket-binding=legacy-remoting)
/subsystem=remoting/connector=legacy-remoting-connector:add(socket-binding=legacy-remoting)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 포트 5445에서 수신 대기
하는 레거시 메시징 소켓
바인딩을 설정합니다./socket-binding-group=standard-sockets/socket-binding=legacy-messaging:add(port=5445)
/socket-binding-group=standard-sockets/socket-binding=legacy-messaging:add(port=5445)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 단계의 바인딩을 사용하는 messaging
-
를 설정합니다.activemq 하위 시스템에서 remote-
connector
및 remote-acceptor/subsystem=messaging-activemq/server=default/remote-connector=legacy-messaging-connector:add(socket-binding=legacy-messaging) /subsystem=messaging-activemq/server=default/remote-acceptor=legacy-messaging-acceptor:add(socket-binding=legacy-messaging)
/subsystem=messaging-activemq/server=default/remote-connector=legacy-messaging-connector:add(socket-binding=legacy-messaging) /subsystem=messaging-activemq/server=default/remote-acceptor=legacy-messaging-acceptor:add(socket-binding=legacy-messaging)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow messaging-activemq
하위 시스템의 legacy-connection-factory 요소에 레거시
HornetQ Jakarta Messaging ConnectionFactory를 만듭니다./subsystem=messaging-activemq/server=default/legacy-connection-factory=legacy-discovery:add(entries=[java:jboss/exported/jms/LegacyRemoteConnectionFactory], connectors=[legacy-messaging-connector])
/subsystem=messaging-activemq/server=default/legacy-connection-factory=legacy-discovery:add(entries=[java:jboss/exported/jms/LegacyRemoteConnectionFactory], connectors=[legacy-messaging-connector])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 레거시 HornetQ Jakarta Messaging 대상을 만들고 jms
-
속성을 포함합니다.queue 또는
entriesjms-
topic 리소스에 legacy-jms-queue add --queue-address=myQueue --entries=[java:jboss/exported/jms/myQueue-new] --legacy-entries=[java:jboss/exported/jms/myQueue] jms-topic add --topic-address=myTopic --entries=[java:jboss/exported/jms/myTopic-new] --legacy-entries=[java:jboss/exported/jms/myTopic]
jms-queue add --queue-address=myQueue --entries=[java:jboss/exported/jms/myQueue-new] --legacy-entries=[java:jboss/exported/jms/myQueue] jms-topic add --topic-address=myTopic --entries=[java:jboss/exported/jms/myTopic-new] --legacy-entries=[java:jboss/exported/jms/myTopic]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 아래 예제에 따라 기존 대기열 또는 토픽에
legacy-entries
를 추가할 수 있습니다./subsystem=messaging-activemq/server=default/jms-queue=myQueue:write-attribute(name=legacy-entries,value=[java:jboss/exported/jms/myQueue])
/subsystem=messaging-activemq/server=default/jms-queue=myQueue:write-attribute(name=legacy-entries,value=[java:jboss/exported/jms/myQueue])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow entry
특성은
JBoss EAP 메시징 메시징 클라이언트에서 사용하지만legacy-entries
는 레거시 HornetQ Jakarta Messaging 클라이언트에서 사용합니다. 레거시 Jakarta Messaging 클라이언트는 JBoss EAP 7과 통신하기 위해 레거시 Jakarta Messaging 리소스를 조회합니다.참고레거시 Jakarta Messaging 클라이언트의 코드 변경 사항을 방지하려면
messaging-activemq
하위 시스템에서 구성된 레거시 JNDI 항목이 레거시 Jakarta Messaging 클라이언트에서 예상되는 조회와 일치해야 합니다.
관리 CLI 마이그레이션 작업
관리 CLI migrate
작업을 실행하여 메시징
하위 시스템 구성을 업데이트할 때 부울 인수 add-legacy-entries
가 true
로 설정된 경우 messaging-activemq
하위 시스템은 legacy-connection-factory
리소스를 생성하고 legacy-entries
를 jms-queue
및 jms-topic
리소스에 추가합니다. 마이그레이션된 messaging-activemq
하위 시스템의 레거시 항목은 레거시 메시징
하위 시스템에 지정된 항목에 해당하며 일반 항목은 -new
접미사로 생성됩니다.
마이그레이션
작업을 실행할 때 부울 인수 add-legacy-entries
가 false
로 설정된 경우 messaging-activemq
하위 시스템에서 레거시 리소스가 생성되지 않으며 레거시 Jakarta Messaging 클라이언트는 JBoss EAP 7 서버와 통신할 수 없습니다.
32.2. 이전 호환성 링크 복사링크가 클립보드에 복사되었습니다!
이전 버전과의 호환성을 위해 레거시 JBoss EAP 7 서버에서 구성을 변경할 필요가 없습니다. JBoss EAP 7 Jakarta Messaging 클라이언트는 기존 서버에서 리소스를 찾지 않고 클라이언트 측 JNDI를 사용하여 자카르타 메시징 리소스를 생성합니다. JBoss EAP 7 Jakarta Messaging 클라이언트는 이러한 리소스를 사용하여 HornetQ 코어 프로토콜을 사용하여 레거시 서버와 통신할 수 있습니다.
JBoss EAP 5 서버에 대한 JBoss EAP 7 클라이언트 연결은 현재 지원되지 않습니다.
JBoss EAP 메시징은 클라이언트 측 JNDI를 지원하여 자카르타 메시징 ConnectionFactory
및 대상
리소스를 생성합니다.
예를 들어 JBoss EAP 7 Jakarta Messaging 클라이언트가 "myQueue"라는 자카르타 메시징 큐를 사용하여 기존 서버와 통신하려는 경우 다음 속성을 사용하여 JNDI InitialContext
를 구성해야 합니다.
java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory connectionFactory.jms/ConnectionFactory=tcp://<legacy server address>:5445? \ protocolManagerFactoryStr=org.apache.activemq.artemis.core.protocol.hornetq.client.HornetQClientProtocolManagerFactory queue.jms/myQueue=myQueue
java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory
connectionFactory.jms/ConnectionFactory=tcp://<legacy server address>:5445? \
protocolManagerFactoryStr=org.apache.activemq.artemis.core.protocol.hornetq.client.HornetQClientProtocolManagerFactory
queue.jms/myQueue=myQueue
그런 다음 클라이언트는 jms/ConnectionFactory
이름을 사용하여 Jakarta Messaging ConnectionFactory
를 생성하고 jms/myQueue
를 사용하여 자카르타 메시징 대기열
을 생성할 수 있습니다. 레거시 연결 팩토리의 URL을 지정할 때 protocolManagerFactoryStr=org.apache.activemq.artemis.core.protocol.wonetq.client.HornetQClientProtocolManagerFactory
속성이 필요합니다. 이를 통해 JBoss EAP 메시징 자카르타 메시징 클라이언트에서 레거시 서버의 HornetQ 브로커와 통신할 수 있습니다.
IV 부. 성능 튜닝 링크 복사링크가 클립보드에 복사되었습니다!
33장. 메시징 통계 모니터링 링크 복사링크가 클립보드에 복사되었습니다!
messaging-activemq 하위 시스템에서 메시징 서버에 대한 통계 수집을 활성화하면 메시징
서버의 리소스에 대한 런타임 통계를 볼 수 있습니다.
33.1. 메시징 통계 활성화 링크 복사링크가 클립보드에 복사되었습니다!
성능에 부정적인 영향을 줄 수 있기 때문에 messaging-activemq
하위 시스템의 통계 컬렉션은 기본적으로 활성화되어 있지 않습니다. 대기열의 메시지 수 또는 큐에 추가된 메시지 수와 같은 기본 정보를 얻기 위해 대기열 통계를 활성화할 필요가 없습니다. 이러한 통계는 통계를 true
로 설정하지 않고도 큐 특성을 사용하여 사용할 수
있습니다.
관리 CLI 또는 관리 콘솔을 사용하여 추가 통계 컬렉션을 활성화할 수 있습니다.
관리 CLI를 사용하여 메시징 통계 활성화
다음 관리 CLI 명령은 기본
메시징 서버에 대한 통계 컬렉션을 활성화합니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=statistics-enabled,value=true)
/subsystem=messaging-activemq/server=default:write-attribute(name=statistics-enabled,value=true)
풀링된 연결 팩토리 통계는 다른 메시징 서버 통계와 별도로 활성화됩니다. 다음 명령을 사용하여 풀링된 연결 팩토리에 대한 통계를 활성화합니다.
/subsystem=messaging-activemq/server=default/pooled-connection-factory=activemq-ra:write-attribute(name=statistics-enabled,value=true)
/subsystem=messaging-activemq/server=default/pooled-connection-factory=activemq-ra:write-attribute(name=statistics-enabled,value=true)
변경 사항을 적용하려면 서버를 다시 로드합니다.
관리 콘솔을 사용하여 메시징 통계 활성화
관리 콘솔을 사용하여 메시징 서버에 대한 통계 컬렉션을 활성화하려면 다음 단계를 사용합니다.
- Configuration → Subsystems → Messaging (ActiveMQ) → 서버로 이동합니다.
- 서버를 선택하고 View(보기 )를 클릭합니다.
- Statistics (통계) 탭에서 Edit (편집)를 클릭합니다.
- Statistics Enabled(통계 활성화됨) 필드를 ON (켜짐)으로 설정하고 Save(저장 )를 클릭합니다.
풀링된 연결 팩토리 통계는 다른 메시징 서버 통계와 별도로 활성화됩니다. 다음 단계를 사용하여 풀링된 연결 팩토리에 대한 통계 컬렉션을 활성화합니다.
- Configuration → Subsystems → Messaging (ActiveMQ) → 서버로 이동합니다.
- 서버를 선택하고 Connections (연결)를 선택한 다음 View(보기 )를 클릭합니다.
- Pooled Connection factory(풀링 연결 팩토리 ) 탭을 선택합니다.
- pooled 연결 팩토리를 선택하고 Attributes (특성) 탭에서 Edit(편집 )를 클릭합니다.
- Statistics Enabled(통계 활성화됨) 필드를 ON (켜짐)으로 설정하고 Save(저장 )를 클릭합니다.
- 변경 사항을 적용하려면 서버를 다시 로드합니다.
33.2. 메시징 통계 보기 링크 복사링크가 클립보드에 복사되었습니다!
관리 CLI 또는 관리 콘솔을 사용하여 메시징 서버에 대한 런타임 통계를 볼 수 있습니다.
관리 CLI를 사용하여 메시징 통계 보기
다음 관리 CLI 명령을 사용하여 메시징 통계를 볼 수 있습니다. 통계가 런타임 정보이므로 include-runtime=true
인수를 포함해야 합니다.
큐에 대한 통계 보기.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 항목에 대한 통계 보기.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 풀링된 연결 팩토리에 대한 통계를 봅니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고풀링된 연결 팩토리 통계는 다른 메시징 서버 통계와 별도로 활성화됩니다. 지침은 메시징 통계 활성화 를 참조하십시오.
관리 콘솔을 사용하여 메시징 통계 보기
관리 콘솔에서 메시징 통계를 보려면 Runtime (런타임) 탭에서 Messaging (ActiveMQ) 하위 시스템으로 이동하여 서버를 선택합니다. 통계를 보려면 대상을 선택합니다.
준비된 트랜잭션 페이지는 준비된 트랜잭션을 보고, 커밋 및 롤백할 수 있는 위치입니다. 자세한 내용은 메시징 저널 준비 트랜잭션 관리를 참조하십시오.
사용 가능한 모든 통계에 대한 자세한 목록은 메시징 통계를 참조하십시오.
33.3. 메시지 카운터 구성 링크 복사링크가 클립보드에 복사되었습니다!
메시징 서버에 대해 다음 메시지 카운터 특성을 구성할 수 있습니다.
-
message-counter-max-day-history
: 메시지 카운터 기록이 유지되는 일 수입니다. -
message-counter-sample-period
: 밀리초 단위로 대기열을 샘플링하는 빈도입니다.
관리 CLI 명령은 이러한 옵션을 구성하는 데 다음 구문을 사용합니다. STATIST _NAME
및 STAT IST¢_VALUE
를 구성하려는 통계 이름과 값으로 교체해야 합니다.
/subsystem=messaging-activemq/server=default::write-attribute(name=STATISTICS_NAME,value=STATISTICS_VALUE)
/subsystem=messaging-activemq/server=default::write-attribute(name=STATISTICS_NAME,value=STATISTICS_VALUE)
예를 들어 다음 명령을 사용하여 message-counter-max-day-history
를 5일로 설정하고 message-counter-sample-period
를 2초로 설정합니다.
/subsystem=messaging-activemq/server=default:write-attribute(name=message-counter-max-day-history,value=5) /subsystem=messaging-activemq/server=default:write-attribute(name=message-counter-sample-period,value=2000)
/subsystem=messaging-activemq/server=default:write-attribute(name=message-counter-max-day-history,value=5)
/subsystem=messaging-activemq/server=default:write-attribute(name=message-counter-sample-period,value=2000)
33.4. 대기열에 대한 메시지 카운터 및 기록 보기 링크 복사링크가 클립보드에 복사되었습니다!
다음 관리 CLI 작업을 사용하여 큐의 메시지 카운터 및 메시지 카운터 기록을 볼 수 있습니다.
-
list-message-counter-as-json
-
list-message-counter-as-html
-
list-message-counter-history-as-json
-
list-message-counter-history-as-html
관리 CLI 명령으로 이러한 값을 표시하려면 다음 구문을 사용합니다. QUEUE_NAME 및
을 사용하려는 큐 이름 및 작업으로 교체해야 합니다.
OPERATION_
NAME
/subsystem=messaging-activemq/server=default/jms-queue=QUEUE_NAME:OPERATION_NAME
/subsystem=messaging-activemq/server=default/jms-queue=QUEUE_NAME:OPERATION_NAME
예를 들어 다음 명령을 사용하여 JSON 형식의 TestQueue
큐에 대한 메시지 카운터를 확인합니다.
/subsystem=messaging-activemq/server=default/jms-queue=TestQueue:list-message-counter-as-json { "outcome" => "success", "result" => "{\"destinationName\":\"TestQueue\",\"destinationSubscription\":null,\"destinationDurable\":true,\"count\":0,\"countDelta\":0,\"messageCount\":0,\"messageCountDelta\":0,\"lastAddTimestamp\":\"12/31/69 7:00:00 PM\",\"updateTimestamp\":\"2/20/18 2:24:05 PM\"}" }
/subsystem=messaging-activemq/server=default/jms-queue=TestQueue:list-message-counter-as-json
{
"outcome" => "success",
"result" => "{\"destinationName\":\"TestQueue\",\"destinationSubscription\":null,\"destinationDurable\":true,\"count\":0,\"countDelta\":0,\"messageCount\":0,\"messageCountDelta\":0,\"lastAddTimestamp\":\"12/31/69 7:00:00 PM\",\"updateTimestamp\":\"2/20/18 2:24:05 PM\"}"
}
33.5. 큐에 대한 메시지 카운터 재설정 링크 복사링크가 클립보드에 복사되었습니다!
reset -message-counter 관리 CLI 작업을 사용하여 큐에 대한 메시지 카운터를 재설정할
수 있습니다.
/subsystem=messaging-activemq/server=default/jms-queue=TestQueue:reset-message-counter { "outcome" => "success", "result" => undefined }
/subsystem=messaging-activemq/server=default/jms-queue=TestQueue:reset-message-counter
{
"outcome" => "success",
"result" => undefined
}
33.6. 관리 콘솔을 사용한 런타임 작업 링크 복사링크가 클립보드에 복사되었습니다!
관리 콘솔을 사용하여 다음을 수행할 수 있습니다.
- 다른 메시징 서버로의 강제 페일오버 수행
- 메시징 서버의 모든 메시지 카운터 재설정
- 메시징 서버의 모든 메시지 카운터 기록 재설정
- 메시징 서버와 관련된 정보 보기
- 메시징 서버 연결 닫기
- 트랜잭션 롤백
- 트랜잭션 커밋
다른 메시징 서버로 강제 페일오버 수행
관리 콘솔에 액세스하고 다음 중 하나를 사용하여 Server 로 이동합니다.
- 런타임→ 찾아보기 → 호스트 → 서버
- 런타임→ 찾아보기 → 서버 그룹 → 서버 그룹 → 서버
- 메시징 ActiveMQ → 서버클릭
- View (보기) 옆에 있는 화살표 버튼을 클릭하고 Force Failover (강제 실패)를 클릭합니다.
- Force Failover(강제 Failover ) 창에서 Yes (예)를 클릭합니다.
메시징 서버의 모든 메시지 카운터 재설정
관리 콘솔에 액세스하고 다음 중 하나를 사용하여 Server 로 이동합니다.
- 런타임→ 찾아보기 → 호스트 → 서버
- 런타임→ 찾아보기 → 서버 그룹 → 서버 그룹 → 서버
- 메시징 ActiveMQ → 서버클릭
- View (보기) 옆에 있는 화살표 버튼을 클릭하고 Reset(재설정 )을 클릭합니다.
Reset(재설정) 창에서 Reset all message counters(모든 메시지 카운터 재설정) 옆의 토글 버튼을 클릭하여 기능을 활성화합니다.
이제 버튼이 파란색
바탕에 ON
으로 표시됩니다.- Reset(재설정 )을 클릭합니다.
메시징 서버에 대한 메시지 카운터 기록 재설정
관리 콘솔에 액세스하고 다음 중 하나를 사용하여 Server 로 이동합니다.
- 런타임→ 찾아보기 → 호스트 → 서버
- 런타임→ 찾아보기 → 서버 그룹 → 서버 그룹 → 서버
- 메시징 ActiveMQ → 서버클릭
- View (보기) 옆에 있는 화살표 버튼을 클릭하고 Reset(재설정 )을 클릭합니다.
Reset(재설정) 창에서 Reset ( 모든 메시지 카운터) 기록 재설정 옆에 있는 토글 버튼을 클릭하여 기능을 활성화합니다.
이제 버튼이 파란색
바탕에 ON
으로 표시됩니다.- Reset(재설정 )을 클릭합니다.
메시징 서버와 관련된 정보 보기
관리 콘솔을 사용하여 메시징 서버와 관련된 다음 정보 목록을 볼 수 있습니다.
- 연결
- 소비자
- 생산자
- 커넥터
- 역할
- 트랜잭션
메시징 서버와 관련된 정보를 보려면 다음을 수행합니다.
관리 콘솔에 액세스하고 다음 중 하나를 사용하여 Server 로 이동합니다.
- 런타임→ 찾아보기 → 호스트 → 서버
- 런타임→ 찾아보기 → 서버 그룹 → 서버 그룹 → 서버
- Messaging ActiveMQ → Server 를 클릭한 다음 View(보기 )를 클릭합니다.
- 네비게이션 창에서 해당 항목을 클릭하여 오른쪽 창의 항목 목록을 봅니다.
메시징 서버 연결 닫기
IP 주소, ActiveMQ 주소 일치 또는 사용자 이름을 제공하여 연결을 종료할 수 있습니다.
메시징 서버 연결을 닫으려면 다음을 수행합니다.
관리 콘솔에 액세스하고 다음 중 하나를 사용하여 Server 로 이동합니다.
- 런타임→ 찾아보기 → 호스트 → 서버
- 런타임→ 찾아보기 → 서버 그룹 → 서버 그룹 → 서버
- Messaging ActiveMQ → Server 를 클릭한 다음 View(보기 )를 클릭합니다.
- 탐색 창에서 Connections (연결)를 클릭합니다.
- Close(닫기 ) 창에서 닫을 연결을 기준으로 적절한 탭을 클릭합니다.
- 선택 사항에 따라 IP 주소, ActiveMQ 주소 일치 또는 사용자 이름을 입력한 다음 Close(닫기 )를 클릭합니다.
메시징 서버의 백 트랜잭션 롤링
관리 콘솔에 액세스하고 다음 중 하나를 사용하여 Server 로 이동합니다.
- 런타임→ 찾아보기 → 호스트 → 서버
- 런타임→ 찾아보기 → 서버 그룹 → 서버 그룹 → 서버
- Messaging ActiveMQ → Server 를 클릭한 다음 View(보기 )를 클릭합니다.
- 네비게이션 창에서 Transactions(거래 )를 클릭합니다.
- 롤백할 트랜잭션을 선택하고 롤백 을 클릭합니다.
메시징 서버에 대한 트랜잭션 커밋
관리 콘솔에 액세스하고 다음 중 하나를 사용하여 Server 로 이동합니다.
- 런타임→ 찾아보기 → 호스트 → 서버
- 런타임→ 찾아보기 → 서버 그룹 → 서버 그룹 → 서버
- Messaging ActiveMQ → Server 를 클릭한 다음 View(보기 )를 클릭합니다.
- 네비게이션 창에서 Transactions(거래 )를 클릭합니다.
- 커밋할 트랜잭션을 선택하고 Commit(커밋 )을 클릭합니다.
34장. 자카르타 메시징 조정 링크 복사링크가 클립보드에 복사되었습니다!
Jakarta Messaging API를 사용하는 경우 성능 향상 방법에 대한 팁은 다음 정보를 확인하십시오.
메시지 ID를 비활성화합니다.
메시지 ID가 필요하지 않은 경우
MessageProducer
클래스에서setDisableMessageID()
메서드를 사용하여 비활성화합니다. 값을true
로 설정하면 고유한 ID를 생성하는 오버헤드가 제거되고 메시지 크기가 줄어듭니다.메시지 타임스탬프를 비활성화합니다.
메시지 타임스탬프가 필요하지 않은 경우
MessageProducer
클래스에서setDisableMessageTimeStamp()
메서드를 사용하여 비활성화합니다. 값을true
로 설정하면 타임스탬프 생성에 대한 오버헤드가 제거되고 메시지 크기가 줄어듭니다.ObjectMessage
를 사용하지 마십시오.ObjectMessage
는 메시지 본문 또는 페이로드를 나타내는 직렬화된 개체가 포함된 메시지를 바이트 스트림으로 전송하는 데 사용됩니다. 소규모 객체의 Java 직렬화 형태는 상당히 크며, 와이어에 많은 공간을 차지합니다. 또한 사용자 지정 마샬링 기술과 비교할 때 속도가 느립니다. 예를 들어 런타임까지 페이로드 유형을 모르는 경우와 같이 다른 메시지 유형 중 하나를 사용할 수 없는 경우에만ObjectMessage
를 사용합니다.차단
(_ACKNOWLEDGE
).소비자의 승인 모드를 선택하면 네트워크를 통해 전송된 승인 메시지를 전송하여 발생하는 추가 오버헤드 및 트래픽 때문에 성능에 영향을 미칩니다. 클라이언트에서 수신한 각 메시지에 대해 서버에서 승인을 보내야 하므로 이 오버헤드가 발생하여 이 오버헤드가
발생합니다
. 지연된 방식으로 메시지를 인식하는DUPS_OK_ACKNOWLEDGE
를 사용할 수 있는 경우CLIENT_ACKNOWLEDGE
를 사용합니다. 즉, 클라이언트 코드가 메시지를 인정하는 메서드를 호출하거나 트랜잭션된 세션에서 하나의 승인 또는 커밋으로 많은 감사를 일괄 처리합니다.지속적 메시지 방지.
기본적으로 자카르타 메시징 메시지는 지속적입니다. 지속적 메시지가 필요하지 않은 경우 복구
불가로 설정합니다
. 지속적 메시지는 스토리지에 지속되므로 많은 오버헤드가 발생합니다.TRANSACTED_SESSION
모드를 사용하여 단일 트랜잭션에서 메시지를 보내고 받습니다.JBoss EAP에 통합된 ActiveMQ Artemis 서버에는 단일 트랜잭션으로 메시지를 배치하면 모든 전송 또는 수신이 아닌 커밋에 하나의 네트워크 왕복만 필요합니다.
35장. 지속성 튜닝 링크 복사링크가 클립보드에 복사되었습니다!
메시지 저널을 자체 물리 볼륨에 둡니다.
추가 전용 저널의 장점 중 하나는 디스크 헤드 이동이 최소화된다는 것입니다. 디스크를 공유하면 이러한 이점이 손실됩니다. 트랜잭션 코디네이터, 데이터베이스 및 기타 저널과 같은 여러 프로세스가 동일한 디스크에서 읽고 쓰는 경우 다른 파일 간에 디스크 헤드를 건너뛰어야 하므로 성능에 영향을 미칩니다. 페이징 또는 대용량 메시지를 사용하는 경우 별도의 볼륨에도 배치되었는지 확인합니다.
journal-min-files
값을 조정합니다.journal-min-files
매개변수를 평균 지속 가능한 속도에 맞는 파일 수로 설정합니다. 저널 데이터 디렉터리에서 생성되는 새 파일이 자주 표시되는 경우 많은 데이터가 유지되는 경우 최소한의 파일 수를 늘려야 합니다. 이를 통해 저널은 새 데이터 파일을 생성하는 대신 다시 사용할 수 있습니다.저널 파일 크기를 최적화합니다.
저널 파일 크기는 디스크의 Workspace 용량에 맞게 조정되어야 합니다. 대부분의 시스템에서 기본값
10MB
를 충분해야 합니다.AIO
저널 유형을 사용합니다.Linux 운영 체제의 경우 저널 유형을
AIO
로 유지합니다.AIO
는 JavaNIO보다 확장성이 우수합니다
.journal-buffer-timeout
값을 조정합니다.journal-buffer-timeout
값을 늘리면 대기 시간을 희생하면서 처리량이 증가합니다.journal-max-io
값을 조정합니다.AIO
를 사용하는 경우journal-max-io
매개변수 값을 늘려 성능을 향상시킬 수 있습니다.NIO
를 사용하는 경우 이 값을 변경하지 마십시오.
36장. 기타 튜닝 옵션 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 조정할 수 있는 JBoss EAP 메시징의 다른 위치에 대해 설명합니다.
비동기식 전송 승인 사용.
트랜잭션이 아닌 지속적 메시지를 보내야 하며 send
()가 반환될 때까지 서버에 연결했다는 보장이 필요하지 않은 경우 차단을 보내도록
설정하지 마십시오. 대신 비동기식 보내기 감사를 사용하여 별도의 스트림에서 반환된 감사 인사를 가져옵니다. 그러나 서버 충돌의 경우 일부 메시지가 손실될 수 있습니다.사전 잠금 모드 사용
.Pre-acknowledge
모드를 사용하면 메시지가 클라이언트로 전송되기 전에 메시지가 승인됩니다. 이렇게 하면 유선의 승인 트래픽 양이 줄어듭니다. 그러나 해당 클라이언트가 충돌하면 클라이언트가 다시 연결하면 메시지가 다시 전송되지 않습니다.보안 비활성화.
security
-enabled
특성을 false로 설정하여 보안을 비활성화하면 작은 성능 향상이 있습니다.지속성을 비활성화합니다.
지속성을
false
로 설정하여 메시지지속성을 완전히 끌 수
있습니다.지연된 트랜잭션 동기화.
journal-sync-transactional
을false
로 설정하면 실패 시 트랜잭션이 손실될 가능성이 있는 경우 트랜잭션 지속 성능이 향상됩니다.트랜잭션이 아닌 지연 동기화.
journal-sync-non-transactional
을false
로 설정하면 오류가 발생했을 때 지속적 메시지가 손실될 수 있으므로 트랜잭션이 유지되지 않는 지속적인 성능이 향상됩니다.차단되지 않은 메시지 보내기.
Jakarta Messaging
및
JNDI를 사용하는 경우 전송된 모든 메시지에 대해 네트워크 왕복을 기다리지 않고block-on-durable-send
및 block-on-durable-send를false로
설정하거나setBlockOnNonDurableSend()
ServerLocator
에 직접 설정합니다.consumer-window-size
를 최적화합니다.매우 빠른 소비자가 있는 경우
consumer-window-size
를 늘려 소비자 흐름 제어를 효과적으로 비활성화할 수 있습니다.Jakarta Messaging API 대신 코어 API를 사용합니다.
Jakarta Messaging 작업은 서버가 처리할 수 있으려면 핵심 작업으로 변환해야 하므로 코어 API를 사용할 때보다 성능이 저하됩니다. 핵심 API를 사용하는 경우
SimpleString
을 최대한 사용하는 방법을 사용하십시오.java.lang.String
은 유선에 쓰기 전에 복사할 필요가 없으므로 호출 간에과 달리 Simple
StringSimpleString
인스턴스를 재사용하면 불필요한 복사를 방지할 수 있습니다. 코어 API는 다른 브로커에 이식할 수 없습니다.
37장. Ptterns 방지 링크 복사링크가 클립보드에 복사되었습니다!
가능한 경우 연결, 세션, 소비자 및 생산자를 재사용합니다.
가장 일반적인 메시징 방지 패턴은 전송되거나 사용되는 모든 메시지에 대해 새 연결, 세션 및 생산자를 생성하는 것입니다. 이러한 개체는 생성하는 데 시간이 걸리며 여러 네트워크 왕복 작업이 수반될 수 있으므로 리소스를 잘못 사용하는 것입니다. 항상 재사용합니다.
참고Spring Messaging 템플릿과 같은 일부 인기 있는 라이브러리는 이러한 유사성 방지를 사용합니다. Spring Messaging Template을 사용하는 경우 성능이 저하될 수 있습니다. Spring Messaging Template은 Jakarta Connectors를 사용하는 등 Jakarta Messaging 세션을 캐시하는 애플리케이션 서버에서만 안전하게 사용할 수 있으며 그 후에만 메시지를 전송할 수 있습니다. 애플리케이션 서버에서도 메시지를 동기적으로 사용하는 데 안전하게 사용할 수 없습니다.
부정적 메시지 방지.
XML과 같은 자세한 형식은 유선으로 많은 공간을 차지하며 결과적으로 성능이 저하됩니다. 가능한 경우 메시지 본문에서 XML을 방지합니다.
요청마다 임시 큐를 생성하지 마십시오.
이러한 일반적인 패턴에는 임시 큐 요청 응답 패턴이 포함됩니다. 임시 큐 request-response 패턴을 사용하면 메시지가 타겟으로 전송되고 reply-to 헤더는 로컬 임시 큐의 주소로 설정됩니다. 수신자가 메시지를 수신하면 메시지를 처리한 다음 reply-to 헤더에 지정된 주소로 응답을 보냅니다. 이 패턴으로 인한 일반적인 실수는 전송된 각 메시지에 새 임시 대기열을 만드는 것입니다. 그러면 성능이 크게 저하됩니다. 대신 많은 요청에 대해 임시 큐를 재사용해야 합니다.
필요하지 않으면 메시지 기반 빈을 사용하지 마십시오.
MDB를 사용하여 메시지를 사용하는 것은 간단한 자카르타 메시징 메시지 소비자를 사용하여 메시지를 사용하는 것보다 더 느립니다.
부록 A. 참고 자료 링크 복사링크가 클립보드에 복사되었습니다!
A.1. 주소 설정 속성 링크 복사링크가 클립보드에 복사되었습니다!
이름 | 설명 |
---|---|
address-full-policy |
|
auto-create-jms-queues |
자카르타 메시징 생산자 또는 소비자가 이러한 큐를 사용하려고 할 때 주소 설정에 해당하는 자카르타 메시징 큐를 자동으로 생성해야 하는지 여부를 결정합니다. 기본값은 |
auto-create-jms-topics |
자카르타 메시징 생산자 또는 소비자가 이러한 큐를 사용하려고 할 때 주소 설정에 해당하는 Jakarta Messaging 주제를 자동으로 생성해야 하는지 여부를 결정합니다. 기본값은 |
auto-create-addresses |
메시지가 전송될 때 브로커가 주소를 자동으로 생성해야 하는지 또는 소비자가 주소가 일치하는 이름과 |
auto-create-queues |
메시지가 전송될 때 브로커가 대기열을 자동으로 생성해야 하는지 또는 소비자가 주소가 |
auto-delete-jms-queues |
JBoss EAP가 소비자가 없고 메시지가 없는 경우 자동 생성된 자카르타 메시징 대기열을 자동으로 삭제해야 하는지 여부를 결정합니다. 기본값은 |
auto-delete-jms-topics |
JBoss EAP가 소비자가 없고 메시지가 없는 경우 자동 생성된 자카르토리 메시징 주제를 자동으로 삭제해야 하는지 여부를 결정합니다. 기본값은 |
auto-delete-addresses |
주소에 더 이상 큐가 없으면 브로커가 자동 생성된 주소를 자동으로 삭제해야 하는지 여부를 결정합니다. 기본값은 |
auto-delete-queues |
소비자와 |
dead-letter-address | 배달된 메시지를 보낼 주소입니다. 자세한 내용은 배달 못 한 편지 주소 구성을 참조하십시오. |
expiry-address | 만료된 메시지를 수신할 주소입니다. 자세한 내용은 메시지 만료 구성을 참조하십시오. |
expiry-delay |
기본 만료 시간을 사용하여 메시지에 사용할 만료 시간(밀리초)을 정의합니다. 기본값은 |
last-value-queue | 큐에서 마지막 값만 사용하는지 여부를 정의합니다. 자세한 내용은 Last-value Queues 를 참조하십시오. |
max-delivery-attempts |
취소된 메시지를 dead-letter-address로 보내기 전에 재전송할 수 있는 시간을 정의합니다. 기본값은 |
max-redelivery-delay |
redelivery-delay의 최대값(밀리초). 기본값은 |
max-size-bytes |
이 주소의 최대 크기(바이트)입니다. 기본값은 |
message-counter-history-day-limit |
메시지 카운터 기록의 일 제한입니다. 기본값은 |
page-max-cache-size |
페이징 탐색 중에 IO를 최적화하기 위해 메모리에 보관할 페이지 파일 수입니다. 기본값은 |
page-size-bytes |
페이징 크기(바이트)입니다. 기본값은 |
redelivery-delay |
취소된 메시지의 재배달을 시도하기 전에 대기하는 시간(밀리초)을 정의합니다. 기본값은 |
redelivery-multiplier |
redelivery-delay 매개변수에 적용되는 승수입니다. 기본값은 |
redistribution-delay |
메시지를 재배포하기 전에 마지막 소비자가 큐에서 닫힌 후(밀리초) 대기할 시간을 정의합니다. 기본값은 |
send-to-dla-on-no-route |
|
slow-consumer-check-period |
느린 소비자에 대해 확인하는 빈도(초)입니다. 기본값은 |
slow-consumer-policy |
느린 소비자를 식별할 때 발생하는 상황을 결정합니다. 유효한 옵션은 |
slow-consumer-threshold |
소비자가 느리기 전에 허용되는 최소 메시지 사용률입니다. 기본값은 |
A.2. 연결 팩토리 속성 링크 복사링크가 클립보드에 복사되었습니다!
속성 | 설명 |
---|---|
auto-group | 메시지 그룹화가 자동으로 사용되는지 여부. |
block-on-acknowledge | 승인을 차단할지 여부. |
block-on-durable-send | 지속적 전송에서 차단할지 여부입니다. |
block-on-non-durable-send | 지속되지 않는 전송에서 차단할지 여부입니다. |
cache-large-message-client | 대용량 메시지 캐시 여부. |
call-failover-timeout | 페일오버가 프로세스 중일 때 사용할 시간(밀리초)입니다. |
call-timeout | 호출 시간 초과(밀리초). |
client-failure-check-period | 클라이언트 오류 검사 기간(밀리초)입니다. |
client-id | 클라이언트 ID입니다. |
compress-large-messages | 큰 메시지를 압축해야 하는지 여부. |
confirmation-window-size | 확인 창 크기(바이트)입니다. |
connection-load-balancing-policy-class-name | 클라이언트에서 클러스터의 여러 노드에 걸쳐 세션을 부하 분산하는 데 사용할 수 있는 클라이언트 측 부하 분산 정책을 구현하는 클래스의 이름입니다. |
connection-ttl | 수명(밀리초)입니다. |
커넥터 | 커넥터 이름(정의되지 않은 값)에 따라 맵에 저장되는 커넥터를 정의합니다. 이 특성을 작성할 때 커넥터 이름 목록을 전달할 수 있습니다. |
consumer-max-rate | 소비자 최대 속도(초당). |
consumer-window-size | 소비자 창 크기(바이트)입니다. |
deserialization-black-list | 역직렬화할 수 없는 클래스 또는 패키지 목록을 정의합니다. |
deserialization-white-list | 역직렬화할 수 있는 클래스 또는 패키지 목록을 정의합니다. |
discovery-group | 검색 그룹 이름입니다. |
dups-ok-batch-size | dup ok 배치 크기. |
enable-amq1-prefix | Jakarta Messaging 대상 이름에 접두사를 포함할지 여부를 지정합니다. 값이 false이면 접두사가 포함되지 않습니다. |
항목 | 연결 팩토리에 바인딩해야 하는 JNDI 이름입니다. |
factory-type | 연결 팩토리의 유형입니다. 유효한 값은 다음과 같습니다.
|
failover-on-initial-connection | 초기 연결 시 페일오버 여부를 지정합니다. |
group-id | 그룹 ID입니다. |
Ha | 연결 팩토리가 고가용성을 지원하는지 여부. |
max-retry-interval | 최대 재시도 간격(밀리초)입니다. |
min-large-message-size | 최소 큰 메시지 크기(바이트)입니다. |
pre-acknowledge | 미리 파악해야 하는지 여부. |
producer-max-rate | 생산자 최대 속도(초당). |
producer-window-size | 생산자 창 크기(바이트)입니다. |
protocol-manager-factory | 이 연결 팩토리에서 사용하는 프로토콜 관리자 팩토리입니다. |
reconnect-attempts | 재연결 시도. |
retry-interval | 재시도 간격(밀리초)입니다. |
retry-interval-multiplier | 재시도 간격 승수. |
scheduled-thread-pool-max-size | 예약된 스레드 풀 최대 크기입니다. |
thread-pool-max-size | 스레드 풀 최대 크기입니다. |
transaction-batch-size | 트랜잭션 배치 크기입니다. |
use-global-pools | 글로벌 풀 사용 여부. |
use-topology-for-load-balancing | 메시징 클라이언트가 클러스터 토폴로지를 사용하여 클러스터에 연결할지 또는 모든 연결에 초기 커넥터를 사용할지 여부를 지정합니다. |
A.3. 풀링된 연결 팩토리 속성 링크 복사링크가 클립보드에 복사되었습니다!
속성 | 설명 |
---|---|
allow-local-transactions | 아웃바운드 자카르타 메시징 세션의 로컬 트랜잭션 허용 여부.
이 특성은 |
auto-group | 메시지 그룹화가 자동으로 사용되는지 여부. |
block-on-acknowledge | 승인을 차단할지 여부. |
block-on-durable-send | 지속적 전송에서 차단할지 여부입니다. |
block-on-non-durable-send | 지속되지 않는 전송에서 차단할지 여부입니다. |
cache-large-message-client | 대용량 메시지 캐시 여부. |
call-failover-timeout | 페일오버가 프로세스 중일 때 사용할 시간(밀리초)입니다. |
call-timeout | 호출 시간 초과(밀리초). |
client-failure-check-period | 클라이언트 오류 검사 기간(밀리초)입니다. |
client-id | 클라이언트 ID입니다. |
compress-large-messages | 큰 메시지를 압축해야 하는지 여부. |
confirmation-window-size | 확인 창 크기(바이트)입니다. |
connection-load-balancing-policy-class-name | 클라이언트에서 클러스터의 여러 노드에 걸쳐 세션을 부하 분산하는 데 사용할 수 있는 클라이언트 측 부하 분산 정책을 구현하는 클래스의 이름입니다. |
connection-ttl | 수명(밀리초)입니다. |
커넥터 | 커넥터 이름(정의되지 않은 값)에 따라 맵에 저장되는 커넥터를 정의합니다. 이 특성을 작성할 때 커넥터 이름 목록을 전달할 수 있습니다. |
consumer-max-rate | 소비자 최대 속도(초당). |
consumer-window-size | 소비자 창 크기(바이트)입니다. |
인증 정보 참조 | 자격 증명 저장소에서 풀링된 연결 팩토리를 인증하기 위한 자격 증명. |
deserialization-black-list | 역직렬화할 수 없는 클래스 또는 패키지 목록을 정의합니다. |
deserialization-white-list | 역직렬화할 수 있는 클래스 또는 패키지 목록을 정의합니다. |
discovery-group | 검색 그룹 이름입니다. |
dups-ok-batch-size | dup ok 배치 크기. |
enable-amq1-prefix | Jakarta Messaging 대상 이름에 접두사를 포함할지 여부를 지정합니다. 값이 false이면 접두사가 포함되지 않습니다. |
enlistment-trace |
ironJacamar를 사용하여 이 풀링된 연결 팩토리에 대한 등록 추적을 기록합니다. 이 속성은 기본적으로 정의되지 않으며 |
항목 | 연결 팩토리를 바인딩해야 하는 JNDI 이름입니다. |
failover-on-initial-connection | 초기 연결 시 페일오버 여부를 지정합니다. |
group-id | 그룹 ID입니다. |
Ha | 연결 팩토리가 고가용성을 지원하는지 여부. |
initial-connect-attempts | 초기에 이 팩토리와 연결하려는 시도 횟수입니다. |
initial-message-packet-size | 이 팩토리를 통해 생성된 메시지의 초기 크기입니다. |
jndi-params | 들어오는 연결의 대상을 찾는 데 사용할 JNDI 매개변수입니다. |
managed-connection-pool | 이 풀링된 연결 팩토리에서 사용하는 관리되는 연결 풀의 클래스 이름입니다. |
max-pool-size | 풀의 최대 크기입니다. |
max-retry-interval | 최대 재시도 간격(밀리초)입니다. |
min-large-message-size | 최소 큰 메시지 크기(바이트)입니다. |
min-pool-size | 풀의 최소 크기입니다. |
암호 | 이 연결 팩토리와 함께 사용할 기본 암호입니다. 연결 팩토리가 원격 호스트를 가리키는 경우에만 필요합니다. |
pre-acknowledge | 미리 파악해야 하는지 여부. |
producer-max-rate | 생산자 최대 속도(초당). |
producer-window-size | 생산자 창 크기(바이트)입니다. |
protocol-manager-factory | 이 풀링된 연결 팩토리에서 사용하는 프로토콜 관리자 팩토리입니다. |
reconnect-attempts | 재연결 시도. 기본적으로 풀링된 연결 팩토리는 메시징 서버에 무한히 다시 연결을 시도합니다. |
retry-interval | 재시도 간격(밀리초)입니다. |
retry-interval-multiplier | 재시도 간격 승수. |
scheduled-thread-pool-max-size | 예약된 스레드 풀 최대 크기입니다. |
setup-attempts | MDB 엔드포인트를 설정하는 횟수입니다. |
setup-interval | MDB 엔드포인트를 설정할 때 시도하는 간격(밀리초)입니다. |
통계 지원 | 런타임 통계 활성화 여부. |
thread-pool-max-size | 스레드 풀 최대 크기입니다. |
트랜잭션 | 트랜잭션 모드입니다. |
transaction-batch-size | 트랜잭션 배치 크기입니다. |
use-auto-recovery | 자동 복구 사용 여부. |
use-global-pools | 글로벌 풀 사용 여부. |
use-jndi | JNDI를 사용하여 들어오는 연결의 대상을 찾습니다. |
use-local-tx | 들어오는 세션에 로컬 트랜잭션을 사용합니다. |
use-topology-for-load-balancing | 메시징 클라이언트가 클러스터 토폴로지를 사용하여 클러스터에 연결할지 또는 모든 연결에 초기 커넥터를 사용할지 여부를 지정합니다. |
user | 이 연결 팩토리와 함께 사용할 기본 사용자 이름입니다. 연결 팩토리가 원격 호스트를 가리키는 경우에만 필요합니다. |
A.4. Core Bridge 속성 링크 복사링크가 클립보드에 복사되었습니다!
속성 | 설명 |
---|---|
call-timeout |
코어 브리지에서 수행하는 차단 호출에 대한 응답을 기다리는 시간(밀리초)입니다. 중복된 탐지가 구성되지 않은 경우 코어 브리지는 차단 호출을 사용합니다. 기본값은 |
check-period | 클라이언트 오류 확인 사이의 기간(밀리초)입니다. |
confirmation-window-size | 메시지를 대상 노드로 전달하는 데 사용되는 연결에 사용할 크기입니다. |
connection-ttl | 브리지에서 사용하는 연결은 하트비트가 없는 최대 시간(밀리초)으로 간주됩니다. |
인증 정보 참조 | 자격 증명 저장소에서 브리지를 인증하기 위한 자격 증명. |
discovery-group |
이 브리지에서 사용하는 검색 그룹의 이름입니다. |
filter | 선택적 필터 문자열입니다. 지정된 경우 지정된 필터 식과 일치하는 메시지만 전달됩니다. |
forwarding-address | 메시지가 전달될 대상 서버의 주소입니다. 전달 주소를 지정하지 않으면 메시지의 원래 대상이 유지됩니다. |
Ha |
이 브리지가 고가용성을 지원해야 하는지 여부. |
initial-connect-attempts | 이 브리지를 사용하여 처음에 연결하려는 시도 횟수입니다. |
max-retry-interval | 연결을 재시도하는 데 사용되는 최대 시간 간격입니다. |
min-large-message-size | 큰 메시지로 간주되기 전에 메시지의 최소 크기(바이트)입니다. |
암호 |
원격 서버에 대한 브리지 연결을 만들 때 사용할 암호입니다. 지정하지 않으면 |
cluster-credential-reference |
클러스터에 인증하는 데 사용되는 인증 정보 저장소 참조입니다. 이는 |
queue-name | 브리지가 사용하는 로컬 대기열의 고유 이름입니다. 시작 시 브리지가 인스턴스화될 때 까지 큐가 이미 존재해야 합니다. |
reconnect-attempts |
총 재연결 횟수는 종료하고 종료하기 전에 브리지에서 수행할하려고 합니다. 기본값은 |
reconnect-attempts-on-same-node |
총 재연결 횟수는 브리지에서 종료하고 종료하기 전에 수행할 동일한 노드에서 시도합니다. 값 |
retry-interval | 대상 서버에 대한 연결이 실패한 경우 후속 재연결 시도 사이의 기간(밀리초)입니다. |
retry-interval-multiplier | 마지막 재시도 이후 시간에 적용할 승수로 다음 재시도에 시간을 계산합니다. 이렇게 하면 재시도 시도 간에 지수 백오프를 구현할 수 있습니다. |
static-connectors |
이 브리지에서 사용하는 정적으로 정의된 커넥터 목록입니다. |
transformer-class-name |
|
use-duplicate-detection | 브리지가 중복된 ID 속성을 전달하는 각 메시지에 자동으로 삽입하는지 여부입니다. |
user |
원격 서버에 대한 브리지 연결을 만들 때 사용할 사용자 이름입니다. 지정하지 않으면 |
A.5. 자카르타 메시징 브리지 속성 링크 복사링크가 클립보드에 복사되었습니다!
속성 | 설명 |
---|---|
add-messageID-in-header |
이 값을 |
client-id | 지속적이고 소스 대상이 주제인 경우 서브스크립션을 만들고 찾을 때 사용할 Jakarta Messaging 클라이언트 ID입니다. |
failure-retry-interval | 브리지가 실패한 경우 소스 또는 대상 서버에 대한 연결을 재생성할 때까지 대기하는 시간(밀리초)입니다. |
max-batch-size |
대상 대상으로 배치로 전송하기 전에 소스 대상에서 사용할 최대 메시지 수입니다. 값이 |
max-batch-time |
사용된 메시지 수가 max-batch-size에 도달하지 않은 경우에도 메시지 배치를 대상으로 보내기 전에 대기할 최대 밀리초 수입니다. 값 |
max-retries |
브리지가 실패한 것을 감지하면 소스 또는 대상 서버에 대한 연결을 다시 생성할 횟수입니다. 이 브리지는 이 횟수를 시도한 후 포기합니다. 값 |
module | 소스 및 대상 Jakarta Messaging 리소스를 조회하는 데 필요한 리소스를 포함하는 JBoss EAP 모듈의 이름입니다. |
일시 중지됨 | Jakarta Messaging 브리지가 일시 중지되었는지 여부를 보고하는 읽기 전용 속성입니다. |
quality-of-service |
원하는 서비스 품질 모드. 가능한 값은 |
선택기 | 소스 대상의 메시지를 사용하는 데 사용되는 자카르타 메시징 선택기 표현식입니다. 선택기 표현식과 일치하는 메시지만 소스에서 대상 대상으로 브리지됩니다. |
subscription-name | 지속적이고 소스 대상인 경우 서브스크립션의 이름입니다. |
Source-connection-factory | 소스 메시징 서버에서 조회할 소스 연결 팩토리의 이름입니다. |
source-context | 소스 JNDI 초기 컨텍스트를 구성하는 데 사용되는 속성입니다. |
source-credential-reference |
소스 연결을 인증하는 데 사용되는 자격 증명 저장소 참조입니다. 이 방법은 |
S2T(Source-destination) | 소스 메시징 서버에서 조회할 소스 대상의 이름입니다. |
source-password | 소스 연결을 생성하는 암호입니다. |
source-user | 소스 연결을 만드는 사용자의 이름입니다. |
target-connection-factory | 대상 메시징 서버에서 조회할 대상 연결 팩토리의 이름입니다. |
target-context | 대상 JNDI 초기 컨텍스트를 구성하는 데 사용되는 속성입니다. |
target-credential-reference |
대상 연결을 인증하는 데 사용되는 자격 증명 저장소 참조입니다. |
target-destination | 대상 메시징 서버에서 검색할 대상 대상의 이름입니다. |
target-password | 대상 연결을 생성하는 암호입니다. |
target-user | 대상 연결을 만드는 사용자의 이름입니다. |
A.6. 클러스터 연결 속성 링크 복사링크가 클립보드에 복사되었습니다!
속성 | 설명 |
---|---|
allow-direct-connections-only |
|
call-failover-timeout |
페일오버가 클러스터 연결에서 수행한 원격 호출에 대한 처리 중일 때 사용할 시간 제한(밀리초)입니다. 기본값은 바인딩되지 않은 |
call-timeout |
클러스터 연결에서 수행한 원격 호출에 대한 시간 제한(밀리초)입니다. 기본값은 |
check-period |
클라이언트 오류 확인 사이의 기간(밀리초)입니다. 기본값은 |
cluster-connection-address | 각 클러스터 연결은 이 값으로 시작하는 주소에만 전송된 메시지에만 적용됩니다. |
confirmation-window-size |
메시지를 대상 노드로 전달하는 데 사용되는 연결의 창 크기(바이트)입니다. 기본값은 |
connection-ttl |
클러스터 연결에서 사용하는 연결은 하트비트 없이 활성으로 간주되는 최대 시간(밀리초)입니다. 기본값은 |
connector-name | 클러스터 연결에 사용할 커넥터의 이름입니다. |
discovery-group |
이 클러스터 연결이 연결될 클러스터의 다른 서버 목록을 가져오는 데 사용되는 검색 그룹입니다. |
initial-connect-attempts |
이 클러스터 연결 초기에 연결 시도 횟수입니다. 기본값은 바인딩되지 않은 |
max-hops |
메시지를 전달할 수 있는 최대 횟수입니다. JBoss EAP는 체인의 중간체로 다른 ActiveMQ Artemis 메시징 서버와 간접적으로 연결된 노드에 메시지의 부하를 분산하도록 구성할 수도 있습니다. 기본값은 |
max-retry-interval |
연결을 재시도하는 데 사용되는 최대 시간 간격(밀리초)입니다. 기본값은 |
message-load-balancing-type |
이 매개 변수는 클러스터의 다른 노드 간에 메시지를 분산하는 방법을 결정합니다. 더 이상 사용되지 않는
기본값은 |
min-large-message-size |
큰 메시지로 간주되기 전에 메시지의 최소 크기(바이트)입니다. 기본값은 |
node-id | 이 클러스터 연결에서 사용하는 노드 ID입니다. 이 속성은 읽기 전용입니다. |
notification-attempts |
클러스터 연결 자체를 브로드캐스트할 횟수. 기본값은 |
notification-interval |
알림 간 간격(밀리초)입니다. 기본값은 |
reconnect-attempts |
총 재연결 횟수가 브리지를 종료하고 종료하기 전에 수행하는 횟수입니다. 기본값은 |
retry-interval |
대상 서버에 대한 연결이 실패한 경우 후속 서버에서 다시 연결을 시도하는 기간(밀리초)입니다. 기본값은 |
retry-interval-multiplier |
마지막 재시도 이후 시간에 적용할 승수로 다음 재시도에 시간을 계산합니다. 이렇게 하면 재시도 시도 간에 지수 백오프를 구현할 수 있습니다. 기본값은 |
static-connectors |
이 클러스터 연결이 연결을 만드는 정적으로 정의된 커넥터 목록입니다. |
토폴로지 | 이 클러스터 연결이 인식하는 노드의 토폴로지입니다. 이 속성은 읽기 전용입니다. |
use-duplicate-detection |
브리지가 중복된 ID 속성을 전달하는 각 메시지에 자동으로 삽입하는지 여부입니다. 기본값은 |
A.7. 메시징 통계 링크 복사링크가 클립보드에 복사되었습니다!
대기열 통계
통계 | 설명 |
---|---|
소비자 개수 | 이 큐의 메시지를 사용하는 소비자 수입니다. |
메시지 개수 | 이 큐에 현재 있는 메시지 수입니다. |
추가된 메시지 개수 | 생성된 이후 이 큐에 추가된 메시지 수입니다. |
예약된 개수 | 이 큐에서 예약된 메시지 수입니다. |
주제 통계
통계 | 설명 |
---|---|
개수 전달 | 이 주제에서 현재 소비자에게 전달하는 메시지 수입니다. |
지속적 메시지 수 | 이 항목의 모든 지속적 구독자에 대한 메시지 수입니다. |
지속적 서브스크립션 수 | 이 항목의 지속적 서브스크립션 가입 수. |
메시지 개수 | 이 주제의 현재 메시지 수입니다. |
추가된 메시지 | 이 항목에 추가된 메시지 수입니다. |
서브스크립션 수 | 이 주제에 대한 지속적 및 비내구성 가입자 수. |
풀링된 연결 팩토리 통계
풀링된 연결 팩토리의 통계 컬렉션은 메시징 서버에 대해 수집된 다른 통계와 별도로 활성화됩니다. 다음 관리 CLI 명령을 사용하여 풀링된 연결 팩토리에 대한 통계 컬렉션을 활성화합니다.
/subsystem=messaging-activemq/server=default/pooled-connection-factory=activemq-ra:write-attribute(name=statistics-enabled,value=true)
/subsystem=messaging-activemq/server=default/pooled-connection-factory=activemq-ra:write-attribute(name=statistics-enabled,value=true)
통계 | 설명 |
---|---|
ActiveCount | 활성 개수. |
AvailableCount | 사용 가능한 개수. |
AverageBlockingTime | 평균 풀 차단 시간. |
AverageCreationTime | 실제 연결을 생성하는 데 사용된 평균 시간입니다. |
AverageGetTime | 실제 연결을 가져오는 데 사용된 평균 시간입니다. |
AveragePoolTime | 풀의 물리적 연결에서 사용된 평균 시간입니다. |
AverageUsageTime | 실제 연결을 사용하는 데 사용된 평균 시간입니다. |
BlockingFailureCount | 물리적 연결을 얻기 위해 시도하는 실패 수입니다. |
CreatedCount | 생성된 개수입니다. |
DestroyedCount | 삭제된 개수. |
IdleCount | 현재 유휴 상태의 실제 연결 수입니다. |
InUseCount | 현재 사용 중인 물리적 연결 수입니다. |
MaxCreationTime | 물리적 연결을 만드는 최대 시간. |
MaxGetTime | 물리적 연결을 얻기 위한 최대 시간. |
MaxPoolTime | 풀에서 물리적 연결의 최대 시간. |
MaxUsageTime | 물리적 연결을 사용하는 최대 시간. |
MaxUsedCount | 사용된 최대 연결 수입니다. |
MaxWaitCount | 연결 대기 중인 최대 스레드 수입니다. |
MaxWaitTime | 연결을 위한 최대 대기 시간입니다. |
TimedOut | 시간 초과된 개수. |
TotalBlockingTime | 총 차단 시간. |
TotalCreationTime | 물리적 연결을 만드는 데 사용된 총 시간입니다. |
TotalGetTime | 물리적 연결을 가져오는 데 사용된 총 시간입니다. |
TotalPoolTime | 풀에서 물리적 연결에 사용된 총 시간. |
TotalUsageTime | 물리적 연결을 사용하여 사용된 총 시간입니다. |
WaitCount | 물리적 연결을 얻기 위해 기다려야 하는 요청 수입니다. |
XACommitAverageTime | XAResource 커밋 호출의 평균 시간입니다. |
XACommitCount | XAResource 커밋 호출 수입니다. |
XACommitMaxTime | XAResource 커밋 호출의 최대 시간입니다. |
XACommitTotalTime | 모든 XAResource 커밋 호출의 총 시간입니다. |
XAEndAverageTime | XAResource 종료 호출의 평균 시간입니다. |
XAEndCount | XAResource 종료 호출 수입니다. |
XAEndMaxTime | XAResource 종료 호출의 최대 시간입니다. |
XAEndTotalTime | 모든 XAResource 종료 호출의 총 시간입니다. |
XAForgetAverageTime | 평균 XAResource의 시간은 호출을 잊습니다. |
XAForgetCount | XAResource 수는 호출을 잊습니다. |
XAForgetMaxTime | XAResource의 최대 시간은 호출을 잊습니다. |
XAForgetTotalTime | 모든 XAResource의 총 시간은 호출을 잊습니다. |
XAPrepareAverageTime | XAResource 준비 호출의 평균 시간입니다. |
XAPrepareCount | XAResource prepare 호출 수입니다. |
XAPrepareMaxTime | XAResource prepare 호출의 최대 시간입니다. |
XAPrepareTotalTime | 모든 XAResource 준비 호출의 총 시간입니다. |
XARecoverAverageTime | XAResource 복구 호출의 평균 시간입니다. |
XARecoverCount | XAResource 복구 호출 수입니다. |
XARecoverMaxTime | XAResource 복구 호출의 최대 시간입니다. |
XARecoverTotalTime | 모든 XAResource의 총 시간은 호출을 복구합니다. |
XARollbackAverageTime | XAResource 롤백 호출의 평균 시간입니다. |
XARollbackCount | XAResource 롤백 호출 수입니다. |
XARollbackMaxTime | XAResource 롤백 호출의 최대 시간입니다. |
XARollbackTotalTime | 모든 XAResource 롤백 호출의 총 시간입니다. |
XAStartAverageTime | XAResource 시작 호출의 평균 시간입니다. |
XAStartCount | XAResource 시작 호출 수입니다. |
XAStartMaxTime | XAResource start 호출의 최대 시간입니다. |
XAStartTotalTime | 모든 XAResource start 호출의 총 시간입니다. |
2024-02-08에 최종 업데이트된 문서