此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cadn.net.cn

消息顺序

来自代理的消息将发布到clientOutboundChannel,从他们所在的位置 写入 WebSocket 会话。由于通道由ThreadPoolExecutor消息 在不同的线程中处理,并且客户端接收到的结果序列可能会 与发布的确切顺序不匹配。spring-doc.cadn.net.cn

要启用有序发布,请将setPreservePublishOrder标志,如下所示:spring-doc.cadn.net.cn

@Configuration
@EnableWebSocketMessageBroker
public class MyConfig implements WebSocketMessageBrokerConfigurer {

	@Override
	protected void configureMessageBroker(MessageBrokerRegistry registry) {
		// ...
		registry.setPreservePublishOrder(true);
	}

}

以下示例显示了与上述示例等效的 XML 配置:spring-doc.cadn.net.cn

<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一次一个,以便保证发布顺序。 请注意,这会产生较小的性能开销,因此应仅在需要时启用它。spring-doc.cadn.net.cn

这同样适用于来自客户端的消息,这些消息被发送到clientInboundChannel, 从中根据其目标前缀处理它们。由于通道由 一个ThreadPoolExecutor,消息在不同的线程中处理,结果序列 的处理可能与收到它们的确切顺序不符。spring-doc.cadn.net.cn

要启用有序发布,请将setPreserveReceiveOrder标志,如下所示:spring-doc.cadn.net.cn

@Configuration
@EnableWebSocketMessageBroker
public class MyConfig implements WebSocketMessageBrokerConfigurer {

	@Override
	public void registerStompEndpoints(StompEndpointRegistry registry) {
		registry.setPreserveReceiveOrder(true);
	}
}