我使用spring-messaging和spring-websocket模块在客户端和服务器之间通过websockets传输消息。目前,我正在使用与上述spring模块一起内置的“简单消息代理”。
我正在从服务器发送一些STOMP帧,但是,这些帧只是用于诊断,因此在生产中没有客户端订阅这些“队列”。
我的问题是,这些框架会发生什么?如果没有客户端订阅这些消息,“简单消息代理”是否只是在某个时间段之后删除它们?我担心的是,这些帧将永远存在于服务器上,并对内存消耗产生负面影响。
发布于 2022-08-09 17:00:17
还不清楚你为什么做出这样的假设。也许这个类的名字中的Broker这个词给你的印象是错误的。此SimpleBrokerMessageHandler没有发布消息的持久存储。那里的逻辑非常简单:为消息选择订阅并将其发布给每个订阅。否则-没有:
protected void sendMessageToSubscribers(@Nullable String destination, Message<?> message) {
MultiValueMap<String,String> subscriptions = this.subscriptionRegistry.findSubscriptions(message);
if (!subscriptions.isEmpty() && logger.isDebugEnabled()) {
logger.debug("Broadcasting to " + subscriptions.size() + " sessions.");
}
long now = System.currentTimeMillis();
subscriptions.forEach((sessionId, subscriptionIds) -> {
for (String subscriptionId : subscriptionIds) {
...
}
});
}https://stackoverflow.com/questions/73292740
复制相似问题