此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
消息顺序
来自代理的消息发布到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)
}
}