跳到主要内容
版本:7.0.3

连接代理

Hunyuan 7b 中英对照 Connecting to a Broker

STOMP代理中继与代理保持一个单一的“系统”TCP连接。该连接仅用于来自服务器端应用程序的消息传输,不用于接收消息。您可以为此连接配置STOMP认证信息(即STOMP帧中的loginpasscode头部)。在XML命名空间和Java配置中,这些认证信息分别以systemLoginsystemPasscode属性的形式进行配置,其默认值为guestguest

STOMP代理中继还会为每个连接的WebSocket客户端创建一个单独的TCP连接。您可以配置用于代表客户端创建的所有TCP连接的STOMP凭据。这些凭据在XML命名空间和Java配置中都作为clientLoginclientPasscode属性进行暴露,其默认值分别为guestguest

备注

STOMP代理中继在代表客户端向 broker 发送的每个 CONNECT 帧中,都会设置 loginpasscode 头部信息。因此,WebSocket 客户端无需设置这些头部信息,因为它们会被忽略。如 认证 部分所解释的,WebSocket 客户端应依靠 HTTP 认证来保护 WebSocket 端点并建立客户端身份。

STOMP代理中继还通过“system” TCP连接与消息代理之间发送和接收心跳信号。您可以配置发送和接收心跳信号的间隔时间(默认为每10秒一次)。如果与代理的连接丢失,代理中继会继续尝试重新连接,每隔5秒尝试一次,直到成功连接为止。

任何Spring Bean都可以实现ApplicationListener<BrokerAvailabilityEvent>,以便在与Broker的“系统”连接丢失和重新建立时接收通知。例如,一个广播股票报价的Stock Quote服务在没有活跃的“系统”连接时,就可以停止尝试发送消息。

默认情况下,STOMP代理中继会始终连接到同一主机和端口,并在连接丢失时根据需要重新连接。如果您希望提供多个地址,在每次尝试连接时,您可以配置一个地址供应器,而不是使用固定的主机和端口。以下示例展示了如何实现这一点:

@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());
}
}

您还可以使用 virtualHost 属性来配置 STOMP 中继服务器。该属性的值会被设置为每个 CONNECT 帧的 host 标头,这在某些场景下会非常有用(例如,在云环境中,实际建立 TCP 连接的服务器与提供基于云的 STOMP 服务的服务器可能是不同的)。