1. 选择合适的高性能消息队列系统
根据业务场景选择适配的消息队列工具是提升推送速度的基础。例如:
prefetch_count(消费者预取数量,建议100-300)平衡内存压力与吞吐量;2. 优化消息队列核心配置
replication.factor)设为3,保障高可用性;batch.size(批量消息大小,如128KB)和linger.ms(等待批量发送的时间,如50ms),减少网络往返次数;Kafka调整num.network.threads(网络线程数,建议8)和num.io.threads(I/O线程数,建议16),提高消息处理效率;log.dirs设置高性能存储路径,RabbitMQ的durable属性标记队列为持久化),平衡性能与可靠性。3. 调整系统内核与TCP参数
ulimit -n 65535增加每个进程可打开的文件描述符数量(避免消息堆积导致连接耗尽);/etc/sysctl.conf,添加以下参数提升网络传输效率:net.core.somaxconn = 65535 # 监听队列最大长度
net.ipv4.tcp_max_syn_backlog = 65535 # SYN队列最大长度
net.ipv4.tcp_tw_reuse = 1 # 复用TIME-WAIT连接
net.ipv4.tcp_fin_timeout = 30 # TIME-WAIT连接超时时间(秒)
net.core.netdev_max_backlog = 2000 # 网络设备接收队列最大长度
执行sysctl -p使配置生效。4. 优化应用程序处理逻辑
@Async注解),将消息推送与主线程分离,避免阻塞业务逻辑;ProducerBatch),减少网络IO次数;CachingConnectionFactory、Kafka的KafkaProducer)管理消息队列连接,避免频繁创建和销毁连接的开销;5. 升级硬件与网络基础设施
6. 部署分布式集群与监控
kafka_server_brokertopicmetrics_messages_in_total、RabbitMQ的queue_messages_ready),及时发现性能瓶颈(如消费者处理速度慢导致的队列积压);