訊息順序
來自訊息代理的訊息釋出到 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)
}
}