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를 사용하여 브로커를 구성하는 방법의 예는 STOMP 예제 를 참조하십시오.
3.5.1. STOMP 제한 사항
STOMP를 사용하는 경우 다음과 같은 제한 사항이 적용됩니다.
-
브로커는 현재 가상 호스팅을 지원하지 않으므로
CONNECT
프레임의호스트
헤더가 무시됩니다. -
메시지 확인은 트랜잭션되지 않습니다.
ACK
프레임은 트랜잭션의 일부일 수 없으며트랜잭션
헤더가 설정된 경우 무시됩니다.
3.5.2. STOMP 메시지에 대한 ID 제공
JMS 소비자 또는 QueueBrowser를 통해 STOMP 메시지를 수신하는 경우 메시지에는 기본적으로 JMSMessageID
와 같은 JMS 속성이 포함되지 않습니다. 그러나 브로커 paramater를 사용하여 들어오는 각 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
매개변수를 사용하면 이 수락자를 사용하여 전송된 각 stomp 메시지에 추가 속성이 추가되었습니다. 속성 키는 amq-message-id
이고 값은 다음 예와 같이 "STOMP" 접두사가 붙은 내부 메시지 ID의 문자열 표현입니다.
amq-message-id : STOMP12345
구성에 stompEnableMessageId
가 지정되지 않은 경우 기본값은 false
입니다.
3.5.3. 실시간 연결 시간 설정
STOMP 클라이언트는 연결을 닫기 전에 DISCONNECT
프레임을 보내야 합니다. 이를 통해 브로커는 세션 및 소비자와 같은 서버 측 리소스를 닫을 수 있습니다. 그러나 DISCONNECT 프레임을 보내지 않고 STOMP 클라이언트가 종료되거나 실패하는 경우 브로커는 클라이언트가 아직 활성 상태인지 여부를 즉시 알 수 없습니다. 따라서 STOMP 연결은 "TTL (Time to Live)" (TTL) 1 분을 갖도록 구성됩니다. 즉, 1분 이상 유휴 상태인 경우 브로커가 STOMP 클라이언트로의 연결을 중지합니다.
프로세스
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. -
다음 예와 같이 STOMP 연결에 사용되는
수락
자의 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에서는 heart-beats를 사용하여 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 구현에서는 content-length
헤더가 있는지 확인하여 STOMP 메시지를 JMS에 매핑하는 방법을 결정합니다.
STOMP 메시지가 …에 매핑되도록 하려면 | 메시지는…이어야 합니다. |
---|---|
JMS textMessage |
|
JMS BytesMessage |
|
JMS 메시지를 STOMP에 매핑할 때 동일한 논리가 적용됩니다. STOMP 클라이언트는 content-length
헤더가 있는지 확인하여 메시지 본문의 유형을 확인할 수 있습니다(문자열 또는 바이트).
메시지 헤더에 대한 자세한 내용은 STOMP 사양을 참조하십시오.
3.5.5. STOMP 대상을 AMQ Broker 주소 및 큐에 매핑
메시지를 보내고 구독할 때 STOMP 클라이언트는 일반적으로 대상
헤더를 포함합니다. 대상 이름은 브로커의 대상에 매핑되는 문자열 값입니다. AMQ Broker에서 이러한 대상은 주소 및 큐에 매핑됩니다. 대상 프레임에 대한 자세한 내용은 STOMP 사양을 참조하십시오.
예를 들어 다음 메시지(헤드 및 본문 포함)를 전송하는 STOMP 클라이언트를 예로 들 수 있습니다.
SEND destination:/my/stomp/queue hello queue a ^@
이 경우 브로커는 /my/stomp/queue
주소와 연결된 모든 큐에 메시지를 전달합니다.
예를 들어 SEND
프레임을 사용하여 STOMP 클라이언트가 메시지를 보내면 지정된 대상이 주소에 매핑됩니다.
클라이언트가 SUBSCRIBE
또는 UNSUBSCRIBE
프레임을 보낼 때와 동일한 방식으로 작동하지만, 이 경우 AMQ Broker는 대상
을 큐에 매핑합니다.
SUBSCRIBE destination: /other/stomp/queue ack: client ^@
이전 예에서 브로커는 대상
을 /other/stomp/queue
에 매핑합니다.
STOMP 대상을 JMS 대상에 매핑
JMS 대상은 브로커 주소 및 큐에도 매핑됩니다. STOMP를 사용하여 JMS 대상에 메시지를 보내려면 STOMP 대상이 동일한 규칙을 따라야 합니다.
jms.queue에 의해 큐 이름 앞에 따라 JMS Queue 를 보내거나 구독합니다.
예를 들어, JMS Queue주문에
메시지를 보내려면 STOMP 클라이언트에서 프레임을 보내야 합니다.SEND destination:jms.queue.orders hello queue orders ^@
jms.topic에 의해 주제 이름 앞에 따라 JMS Topic 을 보내거나 구독합니다. .
예를 들어,주식
JMS Topic을 구독하려면 STOMP 클라이언트는 다음과 유사한 프레임을 보내야 합니다.SUBSCRIBE destination:jms.topic.stocks ^@