对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cadn.net.cn

外部代理

simple 代理非常适合入门,但仅支持 STOMP 命令(它不支持 acks、收据和其他一些功能), 依赖于简单的消息发送循环,不适合集群。 或者,您可以升级应用程序以使用功能齐全的 消息代理。spring-doc.cadn.net.cn

请参阅所选消息代理(例如 RabbitMQ、ActiveMQ 等)的 STOMP 文档,安装代理、 并在启用 STOMP 支持的情况下运行它。然后,您可以启用 STOMP 代理中继 (而不是简单的代理)在 Spring 配置中。spring-doc.cadn.net.cn

以下示例配置启用功能齐全的代理:spring-doc.cadn.net.cn

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

	@Override
	public void registerStompEndpoints(StompEndpointRegistry registry) {
		registry.addEndpoint("/portfolio").withSockJS();
	}

	@Override
	public void configureMessageBroker(MessageBrokerRegistry registry) {
		registry.enableStompBrokerRelay("/topic", "/queue");
		registry.setApplicationDestinationPrefixes("/app");
	}

}

以下示例显示了与上述示例等效的 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 application-destination-prefix="/app">
		<websocket:stomp-endpoint path="/portfolio" />
			<websocket:sockjs/>
		</websocket:stomp-endpoint>
		<websocket:stomp-broker-relay prefix="/topic,/queue" />
	</websocket:message-broker>

</beans>

上述配置中的 STOMP 代理中继是一个 SpringMessageHandler,通过将消息转发到外部消息代理来处理消息。 为此,它与代理建立 TCP 连接,将所有消息转发给代理, 然后,通过 WebSocket 会话。从本质上讲,它充当转发消息的 “中继” 双向。spring-doc.cadn.net.cn

io.projectreactor.netty:reactor-nettyio.netty:netty-all依赖项添加到项目中进行 TCP 连接管理。

此外,应用程序组件(例如 HTTP 请求处理方法、 业务服务等)也可以将消息发送到 Broker Relay,如 ,将消息广播到订阅的 WebSocket 客户端。spring-doc.cadn.net.cn

实际上,代理中继支持健壮且可扩展的消息广播。spring-doc.cadn.net.cn