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

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.xdnf.cn/news/14740.html

相关文章:

  • TDengine 的 CASE WHEN 语法技术详细
  • AES加密:为你的PDF文档加上一道钢铁防线
  • 在uni-app build的index.html 中加入 <mate,和title 等标签内容 内容
  • JSON-LD技术深度解析:从语义网理想到现实应用的完整指南(JSON和知识图谱的桥梁)
  • 阿里云OSS文件上传完整实现方案
  • CSS基础3
  • 人力资源在现代公司中的重要性
  • OSS与NAS混合云存储架构:非结构化数据统一管理实战
  • 大模型项目实战:业务场景和解决方案
  • 数组题解——移除元素​【LeetCode】
  • 6.24_JAVA_微服务_Elasticsearch搜索
  • 原生策略与功耗方案参考
  • 【C/C++】C++ 编程规范:101条规则准则与最佳实践
  • 对象的实例化内存布局与访问定位
  • 从虚拟机角度解释python3相对导入问题(下)
  • 【Pandas】pandas DataFrame update
  • Kafka的消费消息是如何传递的?
  • langchain从入门到精通(十六)——Embedding文本嵌入模型介绍与使用
  • git学习资源
  • 模块化桌面机器人概念设计​​ - ModBot
  • 竹云受邀出席华为开发者大会,与华为联合发布海外政务数字化解决方案
  • AutoGPT,自主完成复杂任务
  • 有哪些词编码模型
  • Auto-GPT vs ReAct:两种智能体思路对决
  • 【Leetcode】有效的括号、用栈实现队列、用队列实现栈
  • 【25】木材表面缺陷数据集(有v5/v8模型)/YOLO木材表面缺陷检测
  • Zynq + FreeRTOS + YAFFS2 + SQLite3 集成指南
  • 如何制定团队制度?
  • 非对称加密实战:Python实现数字签名
  • 2025年CSS最新高频面试题及核心解析