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

来源: 投稿
2024-05-17 16:35:00

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();
展开阅读全文
点击加入讨论🔥(1) 发布并加入讨论🔥
1 评论
1 收藏
分享
返回顶部
顶部