沪ICP备2021032517号-1

Rabbitmq

  |   0 评论   |   0 浏览

Rabbitmq同kafka区别

1. RabbitMQ天然支持Clustering。这使得RabbitMQ本身不需要像ActiveMQ、Kafka那样通过ZooKeeper分别来实现HA方案和保存集群的元数据。集群是保证可靠性的一种方式

2. 可以通过水平扩展以达到增加消息吞吐量能力的目的

3. 允许消费者和生产者在Rabbit节点崩溃的情况下继续运行

Rabbitmq集群特点

RabbitMQ节点不完全拷贝特性

为什么默认情况下RabbitMQ不将所有队列内容和状态复制到所有节点?

有两个原因:

  1. 存储空间——如果每个节点都拥有所有队列的完全拷贝,这样新增节点不但没有新增存储空间,反而增加了更多的冗余数据。
  2. 性能——如果消息的发布需安全拷贝到每一个集群节点,那么新增节点对网络和磁盘负载都会有增加,这样违背了建立集群的初衷,新增节点并没有提升处理消息的能力,最多是保持和单节点相同的性能甚至是更糟。

所以其他非所有者节点只知道队列的元数据,和指向该队列节点的指针。

集群节点类型

节点的存储类型分为两种:

  • 磁盘节点
  • 内存节点

磁盘节点就是配置信息和元信息存储在磁盘上,内次节点把这些信息存储在内存中,当然内次节点的性能是大大超越磁盘节点的。

单节点系统必须是磁盘节点,否则每次你重启RabbitMQ之后所有的系统配置信息都会丢失。

RabbitMQ要求集群中至少有一个磁盘节点,当节点加入和离开集群时,必须通知磁盘节点。

如果唯一磁盘的磁盘节点崩溃了,不能进行如下操作:

  • 不能创建队列
  • 不能创建交换器
  • 不能创建绑定
  • 不能添加用户
  • 不能更改权限
  • 不能添加和删除集群几点

总结:如果唯一磁盘的磁盘节点崩溃,集群是可以保持运行的,但你不能更改任何东西。

解决方案: 在集群中设置两个磁盘节点,只要一个可以,你就能正常操作。

集群搭建

待续---

设置好之后,使用http://ip:15672 进行访问了,默认账号密码是guest/guest

设置节点类型

如果你想更换节点类型可以通过命令修改,如下:

rabbitmqctl stop_app

rabbitmqctl change_cluster_node_type dist

rabbitmqctl change_cluster_node_type ram

rabbitmqctl start_app

移除节点

如果想要把节点从集群中移除,可使用如下命令实现:

rabbitmqctl stop_app

rabbitmqctl restart

rabbitmqctl start_app

集群重启顺序

集群重启的顺序是固定的,并且是相反的。 如下所述:

  • 启动顺序:磁盘节点 => 内存节点
  • 关闭顺序:内存节点 => 磁盘节点

最后关闭必须是磁盘节点,不然可能回造成集群启动失败、数据丢失等异常情况。

镜像队列

镜像队列是Rabbit2.6.0版本带来的一个新功能,允许内建双活冗余选项,与普通队列不同,镜像节点在集群中的其他节点拥有从队列拷贝,一旦主节点不可用,最老的从队列将被选举为新的主队列。

镜像队列的工作原理: 在某种程度上你可以将镜像队列视为,拥有一个隐藏的fanout交换器,它指示者信道将消息分发到从队列上。

设置镜像队列

设置镜像队列命令:“rabbitmqctl set_policy 名称 匹配模式(正则) 镜像定义”, 例如,设置名称为mypolicy的镜像队列,匹配所有名称是amp开头的队列都存储在2个节点上的命令如下:

rabbitmqctl set_policy mypolicy "^amp*" '{"ha-mode":"exactly","ha-params":2}'

可以看出设置镜像队列,一共有三个参数,每个参数用空格分割

  1. 参数一:名称,可以随便填;
  2. 参数二:队列名称的匹配规则,使用正则表达式表示;
  3. 参数三:为镜像队列的主体规则,是json字符串,分为三个属性:ha-mode | ha-params | ha-sync-mode,分别的解释如下:
  • ha-mode:镜像模式,分类:all/exactly/nodes,all存储在所有节点;exactly存储x个节点,节点的个数由ha-params指定;nodes指定存储的节点上名称,通过ha-params指定;
  • ha-params:作为参数,为ha-mode的补充;
  • ha-sync-mode:镜像消息同步方式:automatic(自动),manually(手动)

查看镜像队列

rabbitmqctl list_policies

删除镜像队列

rabbitmqctl clear_policy

用户和权限

rabbitmqctl add_user admin 123456  # 设置admin用户密码

rabbitmqctl set_user_tags admin administrator #分配角色:administrator, monitoring, management

rabbitmqctl set_permissions -p / admin "." "." ".*" #授予 / 权限

rabbitmqctl delete_user guest  #删除访客用户

rabbitmqctl add_vhost /platform #增加vhost

rabbitmqctl add_user payment 123456 #增加用户及密码

rabbitmqctl set_permissions -p /platform payment ".*" ".*" ".*" #设置payment用户拥有/platform所有权限

rabbitmqctl set_permissions -p platform payment ".*" ".*" ".*" #设置payment用户拥有/platform所有权限

rabbitmqctl list_permissions -p app #查看用户拥有的权限

rabbitmqctl list_users #查看用户

rabbitmqctl delete_user username  #删除用户

rabbimqctl change_password username newpassword  #改密码: