Spring STOMP-消息代理

Spring STOMP-消息代理

码农世界 2024-05-14 前端 61 次浏览 0个评论

简单的消息代理

内置的简单消息代理会处理来自客户端的订阅请求,将请求消息存储在内存中,并广播消息给匹配destination的连接客户端。代理支持路径式destination,包括订阅Ant风格的destinations模式。

应用程序也可以使用点分隔(而不是斜线分隔)的destinations。见点作为分隔符章节。

如果配置了任务调度器,简单代理就能支持STOMP心跳检测。要配置调度器,你可以声明自己的TaskScheduler bean,并通过MessageBrokerRegistry设置上它。或者,你可以使用内置的WebSocket配置中自动声明的那个,但是你需要@Lazy来避免内置WebSocket配置和你的WebSocketMessageBrokerConfigurer之间的循环。例如:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
	private TaskScheduler messageBrokerTaskScheduler;
	@Autowired
	public void setMessageBrokerTaskScheduler(@Lazy TaskScheduler taskScheduler) {
		this.messageBrokerTaskScheduler = taskScheduler;
	}
	@Override
	public void configureMessageBroker(MessageBrokerRegistry registry) {
		registry.enableSimpleBroker("/queue/", "/topic/")
				.setHeartbeatValue(new long[] {10000, 20000})
				.setTaskScheduler(this.messageBrokerTaskScheduler);
		*// ...*
	}
}

外部消息代理服务

简单代理适合入门学习,但它仅支持STOMP命令的子集(它不支持acks、receipts和其他一些特性),依赖于一个简单的消息发送循环,并且不适合集群环境。作为替代方案,你可以升级你的应用程序来使用一个完整功能的消息代理。

请查看你选择的消息代理的STOMP文档(例如RabbitMQ、ActiveMQ等),安装代理,启用STOMP的支持,并运行它。然后你可以在Spring配置中启用STOMP代理中继(而不是简单代理)。

以下示例配置启用了一个完整功能的代理:

@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的配置方式,它的效果和java配置方式一样:


	
		
			
		
		
	

在前面的配置中,STOMP代理中继是一个Spring的 MessageHandler,它通过将消息转发到外部消息代理来处理消息。为此,它建立到消息代理的TCP连接,将所有消息转发给代理,然后将从代理收到的消息通过WebSocket会话转发给客户端。本质上,它充当了一个“中继”,在两个方向上转发消息。

为了管理TCP连接,需要在你的项目中添加io.projectreactor.netty:reactor-netty和io.netty:netty-all依赖。

此外,应用程序(如HTTP请求处理方法、业务服务等)也可以直接向代理中继发送消息,如发送消息一节中所述,通过这种方式向订阅的WebSocket客户端广播消息。

实际上,代理中继实现了健壮且可扩展的消息广播。

转载请注明来自码农世界,本文标题:《Spring STOMP-消息代理》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,61人围观)参与讨论

还没有评论,来说两句吧...

Top