3.5. 네트워크 연결로 STOMP 사용


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

프로세스

  1. &lt ;broker_instance_dir> /etc/broker.xml 구성 파일을 엽니다.
  2. 기존 어셉 터를 구성하거나 새 어셉터를 생성하고 다음과 같이 STOMP 값을 사용하여 protocols 매개변수를 포함합니다.
<acceptors>
  <acceptor name="stomp-acceptor">tcp://localhost:61613?protocols=STOMP</acceptor>
  ...
</acceptors>

이전 예에서 브로커는 기본값인 61613 포트에서 STOMP 연결을 허용합니다.

STOMP를 사용하여 브로커를 구성하는 방법의 예는 STOMP 예제 를 참조하십시오.

3.5.1. STOMP 제한 사항

STOMP를 사용하는 경우 다음과 같은 제한 사항이 적용됩니다.

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

3.5.2. STOMP 메시지에 대한 ID 제공

JMS 소비자 또는 QueueBrowser를 통해 STOMP 메시지를 수신하는 경우 메시지에는 기본적으로 JMSMessageID 와 같은 JMS 속성이 포함되지 않습니다. 그러나 브로커 paramater를 사용하여 들어오는 각 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 매개변수를 사용하면 이 수락자를 사용하여 전송된 각 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 클라이언트로의 연결을 중지합니다.

프로세스

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

프로세스

  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 구현에서는 content-length 헤더가 있는지 확인하여 STOMP 메시지를 JMS에 매핑하는 방법을 결정합니다.

표 3.3. STOMP 메시지를 JMS에 매핑
STOMP 메시지가 …​에 매핑되도록 하려면메시지는…​이어야 합니다.

JMS textMessage

content-length 헤더를 포함하지 않습니다.

JMS BytesMessage

content-length 헤더를 포함합니다.

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
    ^@
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.