3.5. 네트워크 연결에서 STOMP 사용
STOMP 는 STOMP 클라이언트가 STOMP 브로커와 통신할 수 있는 텍스트 지향 전선 프로토콜입니다. 브로커는 STOMP 1.0, 1.1 및 1.2를 지원합니다. STOMP 클라이언트는 여러 언어와 플랫폼에서 사용할 수 있으므로 상호 운용성을 위해 선택하는 것이 좋습니다.
절차
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. -
기존 수용자를 구성하거나 새 작업자를 생성하고 아래와 같이 값이
STOMP
인protocols
매개변수를 포함합니다.
<acceptors> <acceptor name="stomp-acceptor">tcp://localhost:61613?protocols=STOMP</acceptor> ... </acceptors>
이전 예에서 브로커는 포트 61613
에서 기본값인 STOMP 연결을 허용합니다.
STOMP를 사용하여 브로커를 구성하는 방법에 대한 예는 < install_dir> /examples/protocols
아래에 있는 stomp
예제를 참조하십시오.
3.5.1. STOMP 제한 사항
STOMP를 사용하는 경우 다음과 같은 제한 사항이 적용됩니다.
-
브로커는 현재 가상 호스팅을 지원하지 않으므로
CONNECT
프레임의호스트
헤더가 무시됩니다. -
메시지 승인은 트랜잭션이 아닙니다.
ACK
프레임은 트랜잭션의 일부일 수 없으며트랜잭션
헤더가 설정된 경우 무시됩니다.
3.5.2. STOMP 메시지의 ID 제공
JMS 소비자 또는 QueueForwardedr를 통해 STOMP 메시지를 수신할 때 메시지에는 기본적으로 JMS 속성(예: JMSMessageID
)이 포함되지 않습니다. 그러나 브로커 매개 변수를 사용하여 들어오는 STOMP 메시지마다 메시지 ID를 설정할 수 있습니다.
절차
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. -
다음 예와 같이 STOMP 연결에 사용되는
acceptor
에 대해stompEnableMessageId
매개변수를true
로 설정합니다.
<acceptors> <acceptor name="stomp-acceptor">tcp://localhost:61613?protocols=STOMP;stompEnableMessageId=true</acceptor> ... </acceptors>
stompEnableMessageId
매개변수를 사용하면 이 acceptor를 사용하여 전송된 각 stomp 메시지에 추가 속성이 추가됩니다. 속성 키는 amq-message-id
이고 값은 다음 예와 같이 "STOMP" 접두사가 붙은 내부 메시지 id의 문자열 표현입니다.
amq-message-id : STOMP12345
stompEnableMessageId
가 구성에 지정되지 않은 경우 기본값은 false
입니다.
3.5.3. 라이브 연결 시간 설정
STOMP 클라이언트는 연결을 종료하기 전에 DISCONNECT
프레임을 보내야 합니다. 이를 통해 브로커는 세션 및 소비자와 같은 서버 측 리소스를 모두 닫을 수 있습니다. 그러나 STOMP 클라이언트가 DISCONNECT 프레임을 전송하지 않고 종료하거나 실패하는 경우 브로커는 클라이언트가 아직 활성 상태인지 여부를 즉시 알 수 없습니다. 따라서 STOMP 연결은 1분이라는 "Time to Live"(TTL)를 갖도록 구성됩니다. 브로커는 1분 이상 유휴 상태인 경우 STOMP 클라이언트에 대한 연결을 중지합니다.
절차
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. -
다음 예와 같이 STOMP 연결에 사용되는
acceptor
URI에connectionTTL
매개변수를 추가합니다.
<acceptors> <acceptor name="stomp-acceptor">tcp://localhost:61613?protocols=STOMP;connectionTTL=20000</acceptor> ... </acceptors>
이전 예에서 stomp-acceptor
를 사용하는 모든 stomp 연결에는 TTL이 20초로 설정됩니다.
STOMP 프로토콜의 버전 1.0에는 하트비트 프레임이 포함되어 있지 않습니다. 따라서 connection-ttl 내에 데이터가 전송되었는지 확인하거나 브로커가 클라이언트가 종료되고 서버 측 리소스를 정리한다고 가정해야 하는 것은 사용자의 책임입니다. 버전 1.1을 사용하면 하트비트를 사용하여 stomp 연결의 라이프 사이클을 유지할 수 있습니다.
브로커의 기본 시간 재정의
앞서 언급했듯이 STOMP 연결의 기본 TTL은 1분입니다. 브로커 구성에 connection-ttl-override
특성을 추가하여 이 값을 덮어쓸 수 있습니다.
절차
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. -
connection-ttl-override
특성을 추가하고 새 기본값에 대해 밀리초 단위 값을 제공합니다. 아래와 같이 <core&
gt; 스탠자 내부에 있습니다.
<configuration ...> ... <core ...> ... <connection-ttl-override>30000</connection-ttl-override> ... </core> <configuration>
이전 예에서 STOMP 연결의 기본 Time to Live(TTL)는 30초, 30000
밀리초로 설정됩니다.
3.5.4. JMS에서 STOMP 메시지 전송 및 사용
STOMP는 주로 텍스트 지향 프로토콜입니다. JMS와 상호 운용하기 위해 STOMP 구현에서는 콘텐츠 길이
헤더가 있는지 확인하여 STOMP 메시지를 JMS에 매핑하는 방법을 결정합니다.
STOMP 메시지가 …에 매핑되도록 하려면 | 메시지는…. |
---|---|
JMS textMessage |
|
JMS BytesMessage |
|
JMS 메시지를 STOMP에 매핑할 때 동일한 논리가 적용됩니다. STOMP 클라이언트는 콘텐츠 길이
헤더가 있는지 확인하여 메시지 본문(문자열 또는 바이트)의 유형을 확인할 수 있습니다.
메시지 헤더에 대한 자세한 내용은 STOMP 사양을 참조하십시오.
3.5.5. AMQ Broker 주소 및 큐에 STOMP 대상 매핑
메시지와 구독을 보낼 때 STOMP 클라이언트는 일반적으로 대상
헤더를 포함합니다. 대상 이름은 브로커의 대상에 매핑되는 문자열 값입니다. AMQ Broker에서 이러한 대상은 주소 및 큐에 매핑됩니다. 대상 프레임에 대한 자세한 내용은 STOMP 사양을 참조하십시오.
예를 들어 다음 메시지를 전송하는 STOMP 클라이언트 (headers 및 body 포함):
SEND destination:/my/stomp/queue hello queue a ^@
이 경우 브로커는 메시지를 /my/stomp/queue
주소와 연결된 모든 큐로 전달합니다.
예를 들어 STOMP 클라이언트가 SEND
프레임을 사용하여 메시지를 보내는 경우 지정된 대상은 주소에 매핑됩니다.
클라이언트가 SUBSCRIBE
또는 UNSUBSCRIBE
프레임을 보낼 때 동일한 방식으로 작동하지만 AMQ Broker는 대상
을 큐에 매핑합니다.
SUBSCRIBE destination: /other/stomp/queue ack: client ^@
이전 예에서 브로커는 대상
을 /other/stomp/queue
큐에 매핑합니다.
STOMP 대상을 JMS 대상에 매핑
JMS 대상은 브로커 주소 및 큐에도 매핑됩니다. STOMP를 사용하여 JMS 대상에 메시지를 보내려면 STOMP 대상은 동일한 규칙을 따라야 합니다.
jms.queue에 의해 큐 이름을 추가하여 JMS 대기열을 보내거나 구독합니다.
예를 들어 메시지를주문
JMS Queue에 보내려면 STOMP 클라이언트가 프레임을 보내야 합니다.SEND destination:jms.queue.orders hello queue orders ^@
주제 이름 앞에
jms.topic.
.를 추가하여 JMS 주제를 보내거나 구독하십시오. 예를 들어, 스톡스 JMS주제를
구독하려면 STOMP 클라이언트는 다음과 유사한 프레임을 보내야 합니다.SUBSCRIBE destination:jms.topic.stocks ^@