源码地址https://gitee.com/tym_hmm/rabbitmq-pool-go

rabbitmq 连接池channel复用

开发语言 golang 依赖库

go get -u gitee.com/tym_hmm/rabbitmq-pool-go

go get -u gitee.com/tym_hmm/rabbitmq-pool-go

已在线上生产环镜运行, 5200W请求 qbs 3000 时, 连接池显示无压力
rabbitmq部署为线上集群

功能说明

  1. 自定义连接池大小及最大处理channel数
  2. 消费者底层断线自动重连
  3. 底层使用轮循方式复用tcp
  4. 生产者每个tcp对应一个channel,防止channel写入阻塞造成内存使用过量
  5. 支持rabbitmq exchangeType
  6. 默认值
名称 说明
tcp最大连接数 5
生产者消费发送失败最大重试次数 5
消费者最大channel信道数(每个连接自动平分) 100(每个tcp10个)

使用

  1. 初始化
var oncePool sync.Once
var instanceRPool *kelleyRabbimqPool.RabbitPool
func initrabbitmq() *kelleyRabbimqPool.RabbitPool {oncePool.Do(func() {//初始化生产者instanceRPool = kelleyRabbimqPool.NewProductPool()//初始化消费者instanceConsumePool = kelleyRabbimqPool.NewConsumePool()err := instanceRPool.Connect("192.168.1.202", 5672, "guest", "guest")if err != nil {fmt.Println(err)}})return instanceRPool
}
  1. 生产者
var wg sync.WaitGroup
for i:=0;i<100000; i++ {wg.Add(1)go func(num int) {defer wg.Done()data:=kelleyRabbimqPool.GetRabbitMqDataFormat("testChange5", kelleyRabbimqPool.EXCHANGE_TYPE_TOPIC, "textQueue5", "/", fmt.Sprintf("这里是数据%d", num))_=instanceRPool.Push(data)}(i)
}
wg.Wait()
  1. 消费者

可定义多个消息者事件, 不通交换机, 队列, 路由

每个事件独立

nomrl := &rabbitmq.ConsumeReceive{
#定义消费者事件ExchangeName: "testChange31",//队列名称ExchangeType: kelleyRabbimqPool.EXCHANGE_TYPE_DIRECT,Route:        "",QueueName:    "testQueue31",IsTry:true,//是否重试MaxReTry: 5,//最大重试次数EventFail: func(code int, e error, data []byte) {fmt.Printf("error:%s", e)},/**** 参数说明* @param data []byte 接收的rabbitmq数据* @param header map[string]interface{} 原rabbitmq header* @param retryClient RabbitmqPool.RetryClientInterface 自定义重试数据接口,重试需return true 防止数据重复提交***/EventSuccess: func(data []byte, header map[string]interface{},retryClient kelleyRabbimqPool.RetryClientInterface)bool {//如果返回true 则无需重试fmt.Printf("data:%s\n", string(data))return true},
}
instanceConsumePool.RegisterConsumeReceive(nomrl)err := instanceConsumePool.RunConsume()
if err != nil {fmt.Println(err)
}
  1. 错误码说明

错误码为

  1. 生产者push时返回的 *RabbitMqError
  2. 消费者事件监听回返的 code
错误码 说明
501 生产者发送超过最大重试次数
502 获取信道失败, 一般为认道队列数用尽
503 交换机/队列/绑定失败
504 连接失败
506 信道创建失败
507 超过最大重试次数

rabbmitmq连接池[已过生产]相关推荐

  1. IIS应用程序池相关问题及连接池已满的解决方法

            关于应用程序池 在 IIS 6.0 中,引入了应用程序池,应用程序池是将一个或多个应用程序链接到一个或多个工作进程集合的配置.因为应用程序池中的应用程序与其他应用程序被工作进程边界分隔 ...

  2. mybatis 原理_深入理解MyBatis原理 MyBatis数据源与连接池

    点击上方"程序开发者社区"关注,选择"设为星标" 第一时间送达实用干货 对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文 ...

  3. [数据库druid连接池实现]--Java版本

    前言 之前有介绍一篇关于自定义的数据库链接池实现,但是质量并不高.而且遭到博友的一脸嫌弃!确实,拿出来的东西就应该保证是正确的,或者质量高,否则很容易就误导了他人,显得TMD也不道德,所以今天专门重写 ...

  4. 《深入理解mybatis原理三》 Mybatis数据源与连接池

    对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池. 本文首先会讲述MyB ...

  5. 连接池和 Timeout expired异常

    转自:博客园宁静.致远:http://www.cnblogs.com/zhangzhu/archive/2013/10/10/3361197.html 异常信息: MySql.Data.MySqlCl ...

  6. 连接池超时配置_HttpClient连接池的一些思考

    前言 使用apache的httpclient进行http的交互处理已经很长时间了,而httpclient实例则使用了http连接池,想必大家也没有关心过连接池的管理.事实上,通过分析httpclien ...

  7. 连接池和 Timeout expired异常【转】

    异常信息: MySql.Data.MySqlClient.MySqlException (0x80004005): error connecting: Timeout expired. The tim ...

  8. [译]连接池和 Timeout expired异常

    原文标题:Connection Pooling and the "Timeout expired" exception FAQ 来源:http://blogs.msdn.com/a ...

  9. HikariCP连接池教程

    HikariCP连接池已作为当前流行的SpringBoot框架默认连接池,那如何在一个非框架服务使用HikariCP? HikariCP官方地址:https://github.com/brettwoo ...

最新文章

  1. shell + mysql
  2. 构建基于Ceph的文件共享服务
  3. Sublime配置与各种插件
  4. 【离散数学中的数据结构与算法】七 排列与组合三
  5. LeetCode题 - 26 删除排序数组中的重复项 python实现
  6. 深入理解React、Redux
  7. 按3倍中误差去除粗差(C++)
  8. Jackson 电印迹-蛋白质转移丨膜的类型WB转移步骤要素
  9. 利用tushare读取中国股市数据,并用绘制股票行情图形
  10. dlang语法的简单整理
  11. vue-cli Webpack之Loader原理及自定义Loader
  12. 《在难搞的日子笑出声来》
  13. 你真正做到敏捷了吗?
  14. 联发科MT5597 4K数字电视芯片处理器介绍
  15. 腾讯视频QLV格式转换为MP4格式 1
  16. Android——高德地图实现多点连线与点击定位监听实现
  17. 读《终身学习:10个你必须掌握的未来生存法则》整理
  18. Android 从底层实现让应用杀不死(1)
  19. 一位ACMer过来人的心得 (2011-08-04 20:44:18)
  20. 沈逸康人物介绍沈逸康ABI-company创办人

热门文章

  1. 机器人界面调试问题记录
  2. 最新Java微服务项目该选择什么技术架构
  3. 讯雷下载php链接,[宜配屋]听图阁 - php 网址url转迅雷thunder资源下载地址的方法函数...
  4. 手把手教你使用Ubuntu系统搭建个人不限速私有网盘
  5. iPad/iPhone如何设置充电提示音吖?
  6. Android之碎片
  7. 6264:走出迷宫 (BFS,板子题)
  8. 真服了!docker源码分析孙宏亮
  9. 命令消费kafka报错(id: -1 rack: null) disconnected
  10. 西电计算机学院名誉院长,杨孟飞院士受聘为西电计科院名誉院长及讲席教授