配置websocket消息代理类AbstractBrokerRegistration

在Spring Framework的Spring Messaging和Spring WebSocket模块中,StompBrokerRelayRegistration、SimpleBrokerRegistration和AbstractBrokerRegistration是用于配置WebSocket消息代理(broker)的关键类。这些类通常在配置WebSocket消息代理时通过Java配置或XML配置被使用。

  • AbstractBrokerRegistration:这是一个抽象类,为配置消息代理提供了基础结构和共通的方法。通常不会被直接使用,而是由其子类StompBrokerRelayRegistration和SimpleBrokerRegistration继承。
  • StompBrokerRelayRegistration:这个类用于配置STOMP消息代理的中继(relay)。当应用需要将消息转发到外部的STOMP消息代理(如:RabbitMQ、ActiveMQ等)时,会用到此类。允许你配置代理的URL、登录凭证、心跳等信息。
  • SimpleBrokerRegistration:这个类用于配置一个内置的、简单的消息代理。这个代理对于原型开发和测试都很有用,因为它不需要外部依赖。你可以配置前缀等参数来区分不同应用或不同上下文中的消息。
一、SimpleBrokerRegistration

SimpleBrokerRegistration是AbstractBrokerRegistration的子类,用于配置SimpleBrokerMessageHandler的注册类;SimpleBrokerMessageHandler是一个"simple"的消息代理处理程序,可以识别SimpMessageType中定义的消息类型,在SubscriptionRegistry的帮助下跟踪订阅,并向订阅者发送消息。

如:org.springframework.messaging.simp.config.SimpleBrokerRegistration#getMessageHandler中定义如何创建"simple"消息代理:

java 复制代码
	@Override
	protected SimpleBrokerMessageHandler getMessageHandler(SubscribableChannel brokerChannel) {
    // 此处新建一个消息代理处理程序,其内部会new DefaultSubscriptionRegistry()对象,其内部就是默认消息注册表信息,包括订阅者数量,默认:1024
		SimpleBrokerMessageHandler handler = new SimpleBrokerMessageHandler(getClientInboundChannel(),
				getClientOutboundChannel(), brokerChannel, getDestinationPrefixes());
		if (this.taskScheduler != null) {
			handler.setTaskScheduler(this.taskScheduler);
		}
		if (this.heartbeat != null) {
			handler.setHeartbeatValue(this.heartbeat);
		}
		handler.setSelectorHeaderName(this.selectorHeaderName);
		return handler;
	}

如:org.springframework.messaging.simp.config.MessageBrokerRegistry#getSimpleBroker获取消息代理处理程序,并设置相关属性:

java 复制代码
	@Nullable
	protected SimpleBrokerMessageHandler getSimpleBroker(SubscribableChannel brokerChannel) {
		if (this.simpleBrokerRegistration == null && this.brokerRelayRegistration == null) {
			enableSimpleBroker();
		}
		if (this.simpleBrokerRegistration != null) {
      // 此处获取消息代理处理程序
			SimpleBrokerMessageHandler handler = this.simpleBrokerRegistration.getMessageHandler(brokerChannel);
			handler.setPathMatcher(this.pathMatcher);
      //订阅者缓存大小限制,默认:1024
			handler.setCacheLimit(this.cacheLimit);
			handler.setPreservePublishOrder(this.preservePublishOrder);
			return handler;
		}
		return null;
	}

开源SDK:https://github.com/mingyang66/spring-parent

相关推荐
XiYang-DING2 天前
【WebSocket】文本帧Text Frame
网络·websocket·网络协议
TickDB3 天前
美股历史数据下载:用 Codex 取数,Python 导出 CSV
python·websocket·mcp·行情数据 api
国际云,接待3 天前
云服务器 WebSocket 空闲后频繁断开:查 Nginx 超时、心跳与负载均衡,再评估扩容
服务器·websocket·nginx
青瓦梦滋3 天前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
山雀~3 天前
WebSocket 断连之后:一次手机采集偶现卡死的排查与修复
网络·websocket·网络协议
砚底藏山河4 天前
python量化:实时行情WebSocket断线重连状态机
java·python·websocket·金融
周厉4 天前
WebSocket 使用场景与实现方法:Java + Vue3 全栈实战
java·websocket·vue3·websocket双向通讯
jaysee-sjc5 天前
【苍穹外卖】Day10:定时任务与 WebSocket 实时提醒实战
java·开发语言·javascript·数据库·vue.js·websocket·网络协议
狮子座的男孩5 天前
解决:使用Burp Suite工具实现防重放攻击的过程及遇到的代理等问题
经验分享·web开发·工具·代理·burpsuite·网络开发·防重放攻击
利威尔xu6 天前
Go IM 源码实战(2):WebSocket 握手 11 步,少 1 个参数连不上
后端·websocket·微服务·面试·golang