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>
<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>
<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
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>
<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; 스탠자 내부에 있습니다.
이전 예에서 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 ^@
SEND
destination:/my/stomp/queue
hello queue a
^@
이 경우 브로커는 메시지를 /my/stomp/queue
주소와 연결된 모든 큐로 전달합니다.
예를 들어 STOMP 클라이언트가 SEND
프레임을 사용하여 메시지를 보내는 경우 지정된 대상은 주소에 매핑됩니다.
클라이언트가 SUBSCRIBE
또는 UNSUBSCRIBE
프레임을 보낼 때 동일한 방식으로 작동하지만 AMQ Broker는 대상
을 큐에 매핑합니다.
SUBSCRIBE destination: /other/stomp/queue ack: client ^@
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 ^@
SEND destination:jms.queue.orders hello queue orders ^@
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 주제 이름 앞에
jms.topic.
.를 추가하여 JMS 주제를 보내거나 구독하십시오. 예를 들어, 스톡스 JMS주제를
구독하려면 STOMP 클라이언트는 다음과 유사한 프레임을 보내야 합니다.SUBSCRIBE destination:jms.topic.stocks ^@
SUBSCRIBE destination:jms.topic.stocks ^@
Copy to Clipboard Copied! Toggle word wrap Toggle overflow