赞
踩
【参考资料】
【1】《RabbitMQ实战指南》
【2】https://www.rabbitmq.com/access-control.html
【3】https://blog.csdn.net/u010013573/article/details/90991997
【4】https://blog.51cto.com/11134648/2155934
【5】https://www.cnblogs.com/yanwei-wang/p/4715429.html
MqttClient mqttClient = new MqttClient("tcp://192.168.216.130:1883", "2",new MemoryPersistence()); MqttConnectOptions options = new MqttConnectOptions(); options.setUserName("guest"); options.setPassword("guest".toCharArray()); mqttClient.connect(options); mqttClient.subscribe("test", 0); mqttClient.setCallback(new MqttCallback(){ @Override public void connectionLost(Throwable throwable) { } @Override public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { System.err.println(new String(mqttMessage.getPayload())); } @Override public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { } });
RabbitMQ 集群不是主从,而是对等结果,目的在于扩展系统的吞吐量
RabbitMQ 集群所有节点会备份全部的元数据,包括:
RabbitMQ 集群不会备份消息,因此某个节点宕机,该节点上的消息会丢失(这里属于高可用,要用【镜像队列】)
RabbitMQ 集群的节点类型分为磁盘节点和内存节点,内存节点将所有的队列、交换器、绑定关系、用户、权限和vhost的元数据定义都存储在内存中,磁盘节点存储在磁盘里。
RabbitMQ集群的每个节点都对外提供客户端连接,当队列存在与节点A,而客户端通过节点B访问时,此时存在节点A和节点B的消息转发
环境:
服务器A:centos7.6 192.168.1.57 cdh1
服务器B:centos7.6 192.168.1.58 cdh2
rpm -Uvh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install erlang
yum -y install rabbitmq-server
RabbitMQ是依据erlang集群实现,Erlang作为一种面向并发的语言,内置了分布式机制。能在具有相同的magic cookie系统之间的直接对话。 RPM安装 .erlang.cookie在/var/lib/rabbitmq目录下,需要用 ll -a 查看
拷贝其至其他节点
scp /var/lib/rabbitmq/.erlang.cookie root@192.168.1.58:/var/lib/rabbitmq/.erlang.cookie
问题:
Error when reading /var/lib/rabbitmq/.erlang.cookie: eacces
修复:因为scp过去后权限不对
chown rabbitmq:rabbitmq .erlang.cookie
chmod 400 .erlang.cookie
systemctl stop firewalld.service //关闭防火墙
cd /usr/lib/rabbitmq/bin
./rabbitmq-plugins enable rabbitmq_management
service rabbitmq-server start
此时非集群状态
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@cdh1
rabbitmqctl start_app
当连接到cdh1,并创建队列,此时cdh1和cdh2均有:
连接到cdh2消费仍然成功,注意上面的队列是有指定node的
对于普通的队列两部分组成:amqqueue_process,负责协议相关的消息处理,即接收生产者发布的消息、向消费者投递消息、处理消息confirm、acknowledge等等;backing_queue,完成消息的存储以及可能的持久化工作等。
对于镜像队列实现:
镜像队列的backing_queue比较特殊,其实现并非是rabbit_variable_queue,它内部包裹了普通backing_queue进行本地消息消息持久化处理,在此基础上增加了将消息和ack复制到所有镜像的功能。其中GM是一种可靠的组播协议。
设置镜像队列通过增加policy
rabbitmqctl set_policy --priority 0 --apply-to queues mirror_queue “rabbitmq_direct01_queue” ‘{“ha-mode”:“exactly”,“ha-params”:2,“ha-sync-mode”:“automatic”}’
此时 rabbitmq_direct01_queue 在 cdh2上存在镜像,mirror_queue 后面的参数可以正则设置,多个同时匹配!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。