3.5. 네트워크 연결에서 STOMP 사용


STOMP 는 STOMP 클라이언트가 STOMP 브로커와 통신할 수 있는 텍스트 지향 전선 프로토콜입니다. 브로커는 STOMP 1.0, 1.1 및 1.2를 지원합니다. STOMP 클라이언트는 여러 언어와 플랫폼에서 사용할 수 있으므로 상호 운용성을 위해 선택하는 것이 좋습니다.

절차

  1. &lt ;broker_instance_dir> /etc/broker.xml 구성 파일을 엽니다.
  2. 기존 수용자를 구성하거나 새 작업자를 생성하고 아래와 같이 값이 STOMPprotocols 매개변수를 포함합니다.
<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를 사용하는 경우 다음과 같은 제한 사항이 적용됩니다.

  1. 브로커는 현재 가상 호스팅을 지원하지 않으므로 CONNECT 프레임의 호스트 헤더가 무시됩니다.
  2. 메시지 승인은 트랜잭션이 아닙니다. ACK 프레임은 트랜잭션의 일부일 수 없으며 트랜잭션 헤더가 설정된 경우 무시됩니다.

3.5.2. STOMP 메시지의 ID 제공

JMS 소비자 또는 QueueForwardedr를 통해 STOMP 메시지를 수신할 때 메시지에는 기본적으로 JMS 속성(예: JMSMessageID )이 포함되지 않습니다. 그러나 브로커 매개 변수를 사용하여 들어오는 STOMP 메시지마다 메시지 ID를 설정할 수 있습니다.

절차

  1. &lt ;broker_instance_dir&gt; /etc/broker.xml 구성 파일을 엽니다.
  2. 다음 예와 같이 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 클라이언트에 대한 연결을 중지합니다.

절차

  1. &lt ;broker_instance_dir&gt; /etc/broker.xml 구성 파일을 엽니다.
  2. 다음 예와 같이 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 특성을 추가하여 이 값을 덮어쓸 수 있습니다.

절차

  1. &lt ;broker_instance_dir&gt; /etc/broker.xml 구성 파일을 엽니다.
  2. connection-ttl-override 특성을 추가하고 새 기본값에 대해 밀리초 단위 값을 제공합니다. 아래와 같이 &lt ;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
    ^@
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.