基于etcd的Rabbitmq队列订阅负载均衡
go-qb
Load balancer for rabbitmq queue subscribing
Feature
- Rabbitmq queue subscription load balancing based on etcd
Installation
install:
go get -u github.com/vc60er/go-qb
import:
import "github.com/vc60er/go-qb"
Quickstart
type MyQueueOnMsg struct {
}
func (pthis *MyQueueOnMsg) OnMsg(msg []byte) {
log.Info("OnMsg:", string(msg))
}
func main() {
flag.Parse()
msg := &MyQueueOnMsg{}
endpoints := []string{"http://127.0.0.1:2379", "http://127.0.0.1:22379", "http://127.0.0.1:32379"}
amqp := "amqp://guest:guest@59.110.154.248:5672/"
queue_ids := []string{"queue.1", "queue.2", "queue.3", "queue.4", "queue.5", "queue.6", "queue.7", "queue.8"}
ip := "127.0.0.1"
port := 8800
qb, err := qb.NewQueueBalance(endpoints, amqp, msg, queue_ids, ip, port)
if err != nil {
log.Fatalf("%s: %s", msg, err)
}
defer qb.Close()
qb.Run()
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
s := <-c
log.Info(s)
}
Architecture diagram

选型
embedding etcd
好处:
省的部署etcd服务
不存在与etcd直接的连接,所以不会担心这里出故障
坏处:
只有两个服务,且出现连接故障时候,难以选master
etcd:
好处
配置信息可以通过终端查看
配置服务与执行服务分离
测试
安装rabbitmq
wget https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7/x86_64/erlang-20.1.7.1-1.el7.centos.x86_64.rpm
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.2/rabbitmq-server-3.7.2-1.el7.noarch.rpm.asc
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.2/rabbitmq-server-3.7.2-1.el7.noarch.rpm
rpm -i erlang-20.1.7.1-1.el7.centos.x86_64.rpm
yum install rabbitmq-server-3.7.2-1.el7.noarch.rpm
rabbitmq-plugins enable rabbitmq_management
/etc/rabbitmq/rabbitmq.conf
loopback_users.guest = false
http://59.110.154.248:15672
guest
guest
cd example
运行etcd
goreman start
运行consuer1
make run1
运行consuer2
make run2
运行consuer3
make run2
向mq发布消息
make pub
观察运行状态
make watch
Every 1.0s: ./cli.sh get --prefix /qb chengningMBP.lan: Thu Jan 18 20:48:05 2018
/qb/consumer_require_queue_count/consumer_127.0.0.1_3632541266441280445
3
/qb/consumer_require_queue_count/consumer_127.0.0.1_3632541266441280505
3
/qb/consumer_require_queue_count/consumer_127.0.0.1_4703553552825333576
2
/qb/consumer_status/consumer_127.0.0.1_3632541266441280445
queue.7,queue.8,queue.4
/qb/consumer_status/consumer_127.0.0.1_3632541266441280505
queue.2,queue.5,queue.6
/qb/consumer_status/consumer_127.0.0.1_4703553552825333576
queue.1,queue.3
/qb/keeper_api
http://127.0.0.1:8800
/qb/lock/keeper/326961092a2e1bbd
/qb/lock/keeper/326961092a2e1bf9
/qb/lock/keeper/414661092a2e3748
/qb/queue_status/queue.1
{"Name":"queue.1","Messages":0,"Consumers":1}
/qb/queue_status/queue.2
{"Name":"queue.2","Messages":0,"Consumers":1}
/qb/queue_status/queue.3
{"Name":"queue.3","Messages":0,"Consumers":1}
/qb/queue_status/queue.4
{"Name":"queue.4","Messages":0,"Consumers":1}
/qb/queue_status/queue.5
{"Name":"queue.5","Messages":0,"Consumers":1}
/qb/queue_status/queue.6
{"Name":"queue.6","Messages":0,"Consumers":1}
/qb/queue_status/queue.7
{"Name":"queue.7","Messages":0,"Consumers":1}
/qb/queue_status/queue.8
{"Name":"queue.8","Messages":0,"Consumers":1}
基于etcd的Rabbitmq队列订阅负载均衡的更多相关文章
- RabbitMQ(四):使用Docker构建RabbitMQ高可用负载均衡集群
本文使用Docker搭建RabbitMQ集群,然后使用HAProxy做负载均衡,最后使用KeepAlived实现集群高可用,从而搭建起来一个完成了RabbitMQ高可用负载均衡集群.受限于自身条件,本 ...
- Nginx基于TCP/UDP端口的四层负载均衡(stream模块)配置梳理
通过我们会用Nginx的upstream做基于http/https端口的7层负载均衡,由于Nginx老版本不支持tcp协议,所以基于tcp/udp端口的四层负载均衡一般用LVS或Haproxy来做.至 ...
- 基于Consul+Upsync+Nginx实现动态负载均衡
基于Consul+Upsync+Nginx实现动态负载均衡 1.Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/l ...
- RabbitMQ 集群+负载均衡
负载均衡 集群的配置已经搭建好了,代码也成功跑通,成功做到了高可用,但是我们的程序连接节点并不会管哪个服务器在忙.哪个服务器空闲,完全看心情想连谁就连谁.而且代码中要把每个ip的节点都手动的写出来 , ...
- 【Nginx】基于Consul+Upsync+Nginx实现动态负载均衡
一.Http动态负载均衡 什么是动态负载均衡 动态负载均衡实现方案 常用服务器注册与发现框架 二.Consul快速入门 Consul环境搭建 三.nginx-upsync-module nginx-u ...
- 基于gRPC的注册发现与负载均衡的原理和实战
gRPC是一个现代的.高性能.开源的和语言无关的通用RPC框架,基于HTTP2协议设计,序列化使用PB(Protocol Buffer),PB是一种语言无关的高性能序列化框架,基于HTTP2+PB保证 ...
- Centos7.2下基于Nginx+Keepalived搭建高可用负载均衡(一.基于Keepalived搭建HA体系)
说明 本文只为方便日后查阅,不对一些概念再做赘述,网上都有很多明确的解释,也请大家先了解相关概念. 两台搭建HA的服务器是华为云上的ECS(不要忘记开通VPC,保证我们的服务器都处在一个内网环境),由 ...
- Ubuntu下基于Nginx实现Tomcat集群负载均衡
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Nginx是一款HTTP和反向代理服务器,有关它的介绍可以到网上搜一下,很多很多,不再累述.这里,我们记录一下Nginx ...
- Docker实践4: 基于nginx对后端的weblogic负载均衡
为什么要用Nginx(抄了一段) 1.nginx相对于apache的优点: 轻量级,同样起web服务,比apache占用更少的内存及资源 抗并发,nginx处理请求是异步非阻塞的,而apache则是阻 ...
随机推荐
- FFMpeg在Ubuntu上的安装和使用
在Ubuntu Server上编译FFmpeg FFmpeg是最流行的开源视频转码工具包,在Ubuntu上可以直接通过apt-get安装,但是默认的编码器不提供x264这些non-free的编码器,所 ...
- 初学node.js有感一
Node.js感悟 一.前言 很久以前就对node.js十分的好奇和感兴趣,因为种种原因没能去深入的认识了解和学习掌握这门技术,最近正好要做一些项目,其中就用到了node.js中的一些东西,所以借着使 ...
- vector动态数组
vector是STL模板库中的序列式容器,利用它可以有效地避免空间的浪费. 创建vector容器 vector< int >v:vector< char >:vector< ...
- python>oop
oop即Object Oriented programming,面向对象编程 何为编程:特定的语法+数据结构+算法 编程范式就是从经验中总结的套路: 面向过程编程 适用于简单的脚本,一次任务是极好的, ...
- python小练习之读取文件写入excel
文件是个json文件 内容为: 导入excel后的格式为 屡一下思路 一步步怎么实现: 1 首先需要读取json文件 然后将读取的内容转为字典 2 将excel的列名写入一个list中 然后遍历执行写 ...
- Hive导入HDFS/本地数据
#创建表人信息表 person(String name,int age) hive> create table person(name STRING,age INT)ROW FORMAT DE ...
- APICloud ajpush(极光推送) 6009
APICloud 其它的都按照APICloud的使用说明操作即可,但有一点需要提醒像我一样才接触的朋友:极光推送需打包测试,不能直接自定义Loader.否则,你会发现在绑定别名的方法时会一直返回&qu ...
- GAN︱GAN 在 NLP 中的尝试、困境、经验
GAN 自从被提出以来,就广受大家的关注,尤其是在计算机视觉领域引起了很大的反响,但是这么好的理论是否可以成功地被应用到自然语言处理(NLP)任务呢? Ian Goodfellow 博士 一年前,网友 ...
- 在Keil uv5里面添加STC元器件库,不影响其他元件
先到网上下载stc.CBD(http://download.csdn.net/detail/mao0514/9699117) 还有STC新系列单片机的头文件,宏晶的网站就有 1.在Keil/C51/I ...
- but the supplied types were (flex.messaging.io.amf.ASObject) and converted to (null)."
1.错误描述 [RPC Fault faultString="Cannot invoke method 'saveOrUpdate'. " faultCode="Ser ...