新年快乐,请教一个问题,Go使用RabbitMQ的问题?

作者站长头像
站长
· 阅读数 14

使用Go开发了一个接口,大致的流程就是:Push接口负责把消息写入MQ->系统进行消费,目前我使用ab测试,10000条数据,内存就会爆炸:

ab命令:

ab -n 10000 -c 10 -T application/x-www-form-urlencoded  -p ab_test.json http://127.0.0.1:8000/api/dot/login/push

ab_test.json内容:

{
    "user_id": 5,
    "game_id": 1,
    "stop_time": 100,
    "is_new_user": 1,
    "is_new_devices": 1,
    "timezone_id": "时区ID-2号",
    "region_id": "地区ID-1号",
    "area_server_id": "区服ID—2号",
    "channel_id": "渠道ID—2号",
    "channel_name": "2号渠道名称"
}

问题来了:

这是我的写入消息的接口:新年快乐,请教一个问题,Go使用RabbitMQ的问题?

每一次请求都要 InitRabbit,InitRabbit实现:新年快乐,请教一个问题,Go使用RabbitMQ的问题?

也就是导致了每一次请求,都新建了channel,10000个,就会有10000个channel,以后还会日积月累的变多,慢慢导致内存爆炸,新年快乐,请教一个问题,Go使用RabbitMQ的问题?

求问各位大佬,你们线上是怎么解决的这个问题呀?

回复
1个回答
avatar
test
2024-07-12

不要:

for _ in range(100000):
    connection=Connection()
    connection.push(data)

而要:

connection=Connection()

for _ in range(100000):
    connection.push(data)

如果你要并发,就用线程池、协程池,控制并发数量

每个协程或者线程持有独立的连接,用到死
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容