Spring STOMP-连接到消息代理

STOMP 代理中继维护一个与消息代理的“系统”TCP 连接。这个连接仅用于来自服务器端应用程序的消息,不用于接收消息。您可以为此连接配置STOMP凭据(即STOMP帧的loginpasscode头部)。这在XML命名空间和Java配置中都以systemLoginsystemPasscode属性的形式暴露,默认值均为guest

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

STOMP代理中继始终在代表客户转发给代理的每个 CONNECT 帧上设置loginpasscode标头。因此,WebSocket 客户端不需要设置这些标头。它们将被忽略。正如身份验证部分所述,WebSocket 客户端应改为依赖 HTTP 身份验证来保护 WebSocket 端点并建立客户端身份。

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

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

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

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

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

	private ReactorNettyTcpClient<byte[]> createTcpClient() {
		return new ReactorNettyTcpClient<>(
				client -> client.addressSupplier(() -> ... ),
				new StompReactorNettyCodec());
	}
}

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

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Stomp WebSocket是一种基于WebSocket协议的通信方式,它使用Stomp协议在客户端和服务器之间进行消息传递。Stomp是一个简单的文本协议,支持基于消息的中间件通信。 Spring提供了对Stomp WebSocket的支持,可以轻松地创建基于Stomp的WebSocket应用程序。在Spring中,可以使用Spring WebSocket模块和Spring Messaging模块来实现Stomp WebSocket。 首先需要在pom.xml文件中添加相关依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>org.springframework.messaging</groupId> <artifactId>spring-messaging</artifactId> </dependency> ``` 然后,需要创建一个WebSocket配置类,该类需要继承WebSocketMessageBrokerConfigurer接口,并实现其方法,如下所示: ``` @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/topic"); config.setApplicationDestinationPrefixes("/app"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ws").withSockJS(); } } ``` 在这个配置类中,我们首先通过@EnableWebSocketMessageBroker注解启用了WebSocket消息代理,并实现了configureMessageBroker()方法来配置消息代理。这里我们使用了一个简单的消息代理来处理消息,使用/topic作为消息前缀,使用/app作为应用程序前缀。 接下来,我们使用registerStompEndpoints()方法注册了一个Stomp协议的WebSocket端点,客户端可以使用这个端点来连接WebSocket服务器。这里我们使用了withSockJS()方法来启用SockJS支持,以便在WebSocket不可用时提供备用传输。 最后,我们需要创建一个控制器类来处理WebSocket请求,如下所示: ``` @Controller public class WebSocketController { @MessageMapping("/hello") @SendTo("/topic/greetings") public Greeting greeting(HelloMessage message) throws Exception { Thread.sleep(1000); // simulated delay return new Greeting("Hello, " + message.getName() + "!"); } } ``` 在这个控制器类中,我们使用@MessageMapping注解来处理客户端发送的消息,使用@SendTo注解将消息发送到指定的目的地。在这个例子中,我们使用了“/hello”作为目的地,所以客户端发送的消息需要以“/app/hello”格式发送。而我们使用了“/topic/greetings”作为发送目的地,所以服务端返回的消息将会被发送到“/topic/greetings”这个主题中,所有订阅这个主题的客户端都将收到这条消息。 以上就是Spring Stomp WebSocket的简单介绍和使用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李昂的数字之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值