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

使用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号渠道名称"
}

问题来了:

这是我的写入消息的接口:
image.png

每一次请求都要 InitRabbit,InitRabbit实现:
image.png

也就是导致了每一次请求,都新建了channel,10000个,就会有10000个channel,以后还会日积月累的变多,慢慢导致内存爆炸,
image.png

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

阅读 1.6k
1 个回答

不要:

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

而要:

connection=Connection()

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

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

每个协程或者线程持有独立的连接,用到死
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏