连接到代理

STOMP 代理中继与代理维护一个单一的“系统”TCP 连接。此连接仅用于源自服务器端应用程序的消息,而不用于接收消息。你可以为此连接配置 STOMP 凭据(即 STOMP 帧的 loginpasscode 头)。这在 XML 命名空间和 Java 配置中都作为 systemLoginsystemPasscode 属性公开,默认值为 guestguest

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

STOMP 代理中继始终会在它代表客户端转发到代理的每个 CONNECT 帧上设置 loginpasscode 头。因此,WebSocket 客户端无需设置这些头。它们将被忽略。正如 认证 部分所解释的,WebSocket 客户端应该依赖 HTTP 认证来保护 WebSocket 端点并建立客户端身份。

STOMP 代理中继还通过“系统”TCP 连接与消息代理发送和接收心跳。你可以配置发送和接收心跳的间隔(默认各为 10 秒)。如果与代理的连接丢失,代理中继将每 5 秒继续尝试重新连接,直到成功。

任何 Spring bean 都可以实现 ApplicationListener<BrokerAvailabilityEvent>,以在与代理的“系统”连接丢失和重新建立时接收通知。例如,广播股票行情的股票行情服务可以在没有活动的“系统”连接时停止尝试发送消息。

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

你还可以使用 virtualHost 属性配置 STOMP 代理中继。此属性的值将作为每个 CONNECT 帧的 host 头设置,并且可能很有用(例如,在云环境中,实际建立 TCP 连接的主机与提供基于云的 STOMP 服务的主机不同)。