訊息順序
來自 Broker 的訊息會發佈到 clientOutboundChannel
,然後從該通道寫入 WebSocket 工作階段。由於通道由 ThreadPoolExecutor
支援,訊息會在不同的執行緒中處理,因此用戶端接收到的結果順序可能與發佈的確切順序不符。
若要啟用有序發佈,請如下所示設定 setPreservePublishOrder
旗標
-
Java
-
Kotlin
-
Xml
@Configuration
@EnableWebSocketMessageBroker
public class PublishOrderWebSocketConfiguration implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
// ...
registry.setPreservePublishOrder(true);
}
}
@Configuration
@EnableWebSocketMessageBroker
class PublishOrderWebSocketConfiguration : WebSocketMessageBrokerConfigurer {
override fun configureMessageBroker(registry: MessageBrokerRegistry) {
// ...
registry.setPreservePublishOrder(true)
}
}
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:websocket="http://www.springframework.org/schema/websocket"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/websocket
https://www.springframework.org/schema/websocket/spring-websocket.xsd">
<websocket:message-broker preserve-publish-order="true">
<!-- ... -->
</websocket:message-broker>
</beans>
設定此旗標後,相同用戶端工作階段內的訊息會一次發佈到 clientOutboundChannel
一個訊息,以確保發佈順序。請注意,這會產生少許效能負擔,因此僅在必要時才應啟用。
用戶端傳送至 clientInboundChannel
的訊息也適用相同情況,這些訊息會從該通道根據其目的地前置詞進行處理。由於通道由 ThreadPoolExecutor
支援,訊息會在不同的執行緒中處理,因此產生的處理順序可能與接收訊息的確切順序不符。
若要啟用有序發佈,請如下所示設定 setPreserveReceiveOrder
旗標
-
Java
-
Kotlin
@Configuration
@EnableWebSocketMessageBroker
public class ReceiveOrderWebSocketConfiguration implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.setPreserveReceiveOrder(true);
}
}
@Configuration
@EnableWebSocketMessageBroker
class ReceiveOrderWebSocketConfiguration : WebSocketMessageBrokerConfigurer {
override fun registerStompEndpoints(registry: StompEndpointRegistry) {
registry.setPreserveReceiveOrder(true)
}
}