当前位置: 首页 > news >正文

RabbitMq中启用NIO

✅ 所属类

com.rabbitmq.client.ConnectionFactory

🧠 使用背景

RabbitMQ Java 客户端默认使用传统的 阻塞 I/O (java.net.Socket) 实现。如果你希望:

  • 更好地控制 线程数
  • 获得更好的 并发性能
  • 降低 每个连接的线程占用
  • 在高并发连接或消费者数量较多的系统中提升扩展性

那么可以使用:

factory.useNio();

这会切换到底层的 Netty-like 异步 NIO 通信方式。


✅ 基本用法示例

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.useNio(); // 启用 NIO 模式ExecutorService executor = Executors.newFixedThreadPool(4);
Connection connection = factory.newConnection(executor);

🔍 工作机制对比

模式模型特点
默认(阻塞 IO)每个连接或信道对应 1+ 个线程简单直观,但线程资源消耗大
NIO 模式多连接共享 I/O selector更少线程,支持更多连接,更适合高并发

🚨 注意事项

注意点描述
必须与自定义线程池搭配使用启用 NIO 后必须通过 newConnection(executor) 传入线程池
更复杂的调试异步通信更难调试,日志和堆栈信息更间接
不兼容旧版客户端useNio() 在 RabbitMQ Java 客户端 5.x 以上版本才支持

📦 示例封装

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setPort(5672);
factory.useNio();ExecutorService executor = Executors.newCachedThreadPool();
Connection connection = factory.newConnection(executor);

✅ 总结

项目说明
方法factory.useNio()
作用启用非阻塞 I/O 模式,提升并发性能和连接扩展性
适用场景高并发、微服务、高密度连接、容器环境等
要求必须配合自定义线程池使用
http://www.lqws.cn/news/516637.html

相关文章:

  • Android14音频子系统 - 系统框架概述
  • Python爬取TMDB电影数据:从登录到数据存储的全过程
  • 康谋方案 | ARXML 规则下 ECU 总线通讯与 ADTF 测试方案
  • JMeter中变量如何使用?
  • 标题:2025金融护网行动实战指南:从合规防御到智能免疫的体系化进阶
  • C++ 多线程深度解析:掌握并行编程的艺术与实践
  • 自动化测试--App自动化之项目实战脚本编写及封装流程
  • Linux 怎么恢复sshd.service
  • python的智慧养老院管理系统
  • TensorFlow Lite (TFLite) 和 PyTorch Mobile模型介绍1
  • Azure 自动化:所需状态配置 (DSC)
  • VS Git巨坑 切换分支失败导致原分支被修改
  • pscc系统如何部署,怎么更安全更便捷?
  • 项目研发过程管理:8Manage PM 与泛微OA项目管理工具深度对比
  • 通俗易懂解读BPE分词算法实现
  • 理解epoll:水平触发与边沿触发
  • 用Python做一个手机镜头
  • 如何打造Apache Top-Level开源时序数据库IoTDB
  • React 生命周期概览
  • Happy-LLM-Task06 :3.1 Encoder-only PLM
  • configure: error: no acceptable C compiler found in $PATH
  • UE5初学者教程笔记(一)
  • Android 10.0 java.lang.IllegalStateException The content of the adapter has
  • Bright Data亮数据 MCP + N8N x AI 新闻编辑:基于亮数据,数据采集到观点摘要工作流自动化实践
  • 20250625解决在Ubuntu20.04.6LTS下编译RK3588的Android14出现cfg80211.ko的overriding问题
  • LE AUDIO---Chapter 2. The Bluetooth® LE Audio architecture
  • 个人技术文档库构建实践:基于Cursor和GitHub的知识管理系统(含cursor rules)
  • 实战使用 Docker Compose 搭建 Redis Cluster 集群
  • CommunityToolkit.Mvvm 重构激光直写控制软件
  • STM32G070x 单片机项目代码解析:基于 HAL 库的嵌入式系统开发