❤️‍🔥 FolkMQ 的“内存保护”是怎么回事儿?

2024年 5月 17日 69.8k 0

folkmq 提供了一个内存保护模式。当内存使用超过 80% 时,开始拒收对端的消息(通过告警异常反馈)。此特性,直接由 socket.d 提供支持。好处是:

  • 服务端不会 oom(服务端支持)
  • 客户端也不会 oom(客户端支持)

示例:

  • 启动服务端(中间件):
java -Xmx256M -jar folkmq-server.jar
  • 用客户端简单压测一下:
public class Test {
    public static void main(String[] args) throws Exception {
        MqClient client = FolkMQ.createClient("folkmq://127.0.0.1:1860").connect();
        
        while (true){
            client.publish("test", new MqMessage("hi"));
        }
    }
}
  • 当服务端内存超出限制时,客户端就会收到告警异常:
Exception in thread "main" org.noear.socketd.exception.SocketDAlarmException: Server memory usage over limit: 80.17%
	at org.noear.socketd.transport.core.impl.ProcessorDefault.onReceive(ProcessorDefault.java:125)

如果从订阅的角度,就会拒收中间件发来的消息(中间件,会延时再试)。

如果是客户端,还可定制内存比例:

MqClient client = FolkMQ.createClient("folkmq://127.0.0.1:18602")
        .config(c -> c.maxMemoryRatio(0.8F))  //0.2 到 1.0 之间
        .connect();

相关文章

塑造我成为 CTO 之路的“秘诀”
“人工智能教母”的公司估值达 10 亿美金
教授吐槽:985 高校成高级蓝翔!研究生基本废了,只为房子、票子……
Windows 蓝屏中断提醒开发者:Rust 比 C/C++ 更好
Claude 3.5 Sonnet 在伽利略幻觉指数中名列前茅
上海新增 11 款已完成登记生成式 AI 服务

发布评论