|
对于最新的稳定版本,请使用 Spring Framework 7.0.6! |
消息顺序
来自代理的消息被发布到 clientOutboundChannel,从那里它们被写入WebSocket会话。由于该通道由 ThreadPoolExecutor 支持,消息会在不同的线程中处理,客户端接收到的结果顺序可能与发布的顺序不完全一致。
如果这是个问题,请启用 setPreservePublishOrder 标志,如下例所示:
@Configuration
@EnableWebSocketMessageBroker
public class MyConfig implements WebSocketMessageBrokerConfigurer {
@Override
protected void configureMessageBroker(MessageBrokerRegistry registry) {
// ...
registry.setPreservePublishOrder(true);
}
}
以下示例展示了前面示例的XML配置等价写法:
<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,从而保证发布的顺序。
请注意,这会带来一定的性能开销,因此只有在需要时才应启用它。