Loading...
Spring Framework Reference Documentation 7.0.2의 Connecting to a Broker의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
STOMP broker relay는 broker에 대한 단일 “system” TCP 연결을 유지합니다.
이 연결은 서버측 애플리케이션에서 시작되는 메시지에만 사용되며,
메시지를 수신하는 데에는 사용되지 않습니다. 이 연결에 대해 STOMP
credentials(즉, STOMP frame의 login 및 passcode header)을 설정할 수 있습니다.
이는 XML 네임스페이스와 Java 설정 모두에서 systemLogin 및
systemPasscode property로 노출되며 기본값은 guest 및 guest입니다.
STOMP broker relay는 연결된 각 WebSocket 클라이언트마다 별도의 TCP 연결도
생성합니다. 클라이언트를 대신하여 생성되는 모든 TCP 연결에 사용되는 STOMP
credentials를 설정할 수 있습니다. 이는 XML 네임스페이스와 Java 설정 모두에서
clientLogin 및 clientPasscode property로 노출되며 기본값은 guest 및
guest입니다.
STOMP broker relay는 클라이언트를 대신하여 broker로 전달하는 모든
CONNECTframe에 대해 항상login및passcodeheader를 설정합니다. 따라서 WebSocket 클라이언트는 해당 header를 설정할 필요가 없습니다. 그것들은 무시됩니다. Authentication 섹션에서 설명하듯이, WebSocket 클라이언트는 대신 WebSocket 엔드포인트를 보호하고 클라이언트 identity를 설정하기 위해 HTTP 인증에 의존해야 합니다.
STOMP broker relay는 또한 “system” TCP 연결을 통해 message broker와의 heartbeat를 송수신합니다. heartbeat를 송신하고 수신하는 interval(기본값은 각각 10초)을 설정할 수 있습니다.
broker에 대한 연결성이 손실되면, broker relay는 성공할 때까지 5초마다 계속해서 재연결을 시도합니다.
어떤 Spring bean이든 ApplicationListener<BrokerAvailabilityEvent>를
구현하여 broker에 대한 “system” 연결이 손실되거나 다시 설정될 때
알림을 수신할 수 있습니다.
예를 들어, stock quote를 broadcast하는 Stock Quote 서비스는 활성화된 “system” 연결이 없을 때 메시지 전송 시도를 중단할 수 있습니다.
기본적으로 STOMP broker relay는 항상 동일한 host와 port에 connect하며, 연결성이 손실되면 필요에 따라 다시 재연결합니다. 여러 address를 제공하려는 경우, 각 연결 시도 시 고정된 host와 port 대신 address의 supplier를 설정할 수 있습니다.
다음 예제는 그 방법을 보여줍니다:
1@Configuration 2@EnableWebSocketMessageBroker 3public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer { 4 5 // ... 6 7 @Override 8 public void configureMessageBroker(MessageBrokerRegistry registry) { 9 registry.enableStompBrokerRelay("/queue/", "/topic/").setTcpClient(createTcpClient()); 10 registry.setApplicationDestinationPrefixes("/app"); 11 } 12 13 private ReactorNettyTcpClient<byte[]> createTcpClient() { 14 return new ReactorNettyTcpClient<>( 15 client -> client.remoteAddress(() -> new InetSocketAddress(0)), 16 new StompReactorNettyCodec()); 17 } 18}
1@Configuration 2@EnableWebSocketMessageBroker 3class WebSocketConfiguration : WebSocketMessageBrokerConfigurer { 4 5 // ... 6 7 override fun configureMessageBroker(registry: MessageBrokerRegistry) { 8 registry.enableStompBrokerRelay("/queue/", "/topic/").setTcpClient(createTcpClient()) 9 registry.setApplicationDestinationPrefixes("/app") 10 } 11 12 private fun createTcpClient(): ReactorNettyTcpClient<ByteArray> { 13 return ReactorNettyTcpClient({ it.addressSupplier { InetSocketAddress(0) } }, StompReactorNettyCodec()) 14 } 15}
또한 STOMP broker relay를 virtualHost property로 설정할 수도 있습니다.
이 property의 값은 모든 CONNECT frame의 host header로 설정되며,
TCP 연결이 설정되는 실제 host가 클라우드 기반 STOMP 서비스를 제공하는
host와 다른 클라우드 환경과 같은 경우에 유용할 수 있습니다.
External Broker
Dots as Separators