最新の安定バージョンについては、Spring Framework 6.2.8 を使用してください! |
メッセージの順序
ブローカーからのメッセージは 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>
フラグが設定されると、同じクライアントセッション内のメッセージが 1 つずつ clientOutboundChannel
に発行されるため、発行の順序が保証されます。これによりパフォーマンスのオーバーヘッドがわずかに発生するため、必要な場合にのみ有効にする必要があります。