此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
连接到 Broker
STOMP 代理中继维护与代理的单个“系统”TCP 连接。
此连接用于来自服务器端应用程序的消息
仅用于接收消息。您可以配置 STOMP 凭证(即
STOMP 框架login
和passcode
headers) 进行这是暴露的
在 XML 命名空间和 Java 配置中作为systemLogin
和systemPasscode
默认值为guest
和guest
.
STOMP 代理中继还为每个连接的 TCP 连接创建一个单独的 TCP 连接
WebSocket 客户端。您可以配置用于所有 TCP 的 STOMP 凭证
代表客户创建的连接。这在 XML 命名空间中公开
和 Java 配置作为clientLogin
和clientPasscode
属性替换为 default
的值guest
和guest
.
STOMP 代理中继始终将login 和passcode 标头CONNECT 框架,它代表客户端转发给 broker。因此,WebSocket 客户端
不需要设置这些标头。它们将被忽略。正如 Authentication 部分所解释的那样,WebSocket 客户端应该依赖 HTTP 身份验证来保护
WebSocket 终端节点并建立客户端身份。 |
STOMP 代理中继还向消息发送和接收检测信号 broker 通过 “system” TCP 连接。您可以配置发送的间隔 和接收检测信号(默认每个 10 秒)。如果连接到代理 丢失,则代理中继会继续尝试重新连接,每 5 秒一次, 直到它成功。
任何 Spring bean 都可以实现ApplicationListener<BrokerAvailabilityEvent>
在与 broker 的 “system” 连接丢失时接收通知,以及
重新建立。例如,广播股票报价的 Stock Quote 服务可以
当没有活动的 “system” 连接时停止尝试发送消息。
默认情况下,STOMP 代理中继始终连接,并在 if 与同一主机和端口的连接丢失。如果您希望提供多个地址, 在每次尝试连接时,您可以配置地址的供应商,而不是 固定主机和端口。下面的示例展示了如何做到这一点:
-
Java
-
Kotlin
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {
// ...
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableStompBrokerRelay("/queue/", "/topic/").setTcpClient(createTcpClient());
registry.setApplicationDestinationPrefixes("/app");
}
private ReactorNettyTcpClient<byte[]> createTcpClient() {
return new ReactorNettyTcpClient<>(
client -> client.remoteAddress(() -> new InetSocketAddress(0)),
new StompReactorNettyCodec());
}
}
@Configuration
@EnableWebSocketMessageBroker
class WebSocketConfiguration : WebSocketMessageBrokerConfigurer {
// ...
override fun configureMessageBroker(registry: MessageBrokerRegistry) {
registry.enableStompBrokerRelay("/queue/", "/topic/").setTcpClient(createTcpClient())
registry.setApplicationDestinationPrefixes("/app")
}
private fun createTcpClient(): ReactorNettyTcpClient<ByteArray> {
return ReactorNettyTcpClient({ it.addressSupplier { InetSocketAddress(0) } }, StompReactorNettyCodec())
}
}
您还可以使用virtualHost
财产。
此属性的值设置为host
标头CONNECT
框架
)并且可能很有用(例如,在云环境中,实际主机连接到哪个
建立的 TCP 连接与提供
基于云的 STOMP 服务)。