rabbitmq 学习
rabbitmq的五种模式:
1、Queue——简单队列 ,类似于Work Queue
2、Work queue——Work模式 ,基于队列queue。不需要提前订阅,也可以消费。但是,消息只能被一个消费者消费。
3、Publish/Subscribe——发布/订阅者模式 ,exchange=fanout。channel会把所有接收到的消息发送给所有订阅的消费者。消费者何时订阅消息,就从何时可是消费消息。
4、Routing——路由模式 ,exchange=direct,routingKey不同。channel会把所有接收到的消息发送给对应的消费者。需要提前订阅消息。消费者何时订阅消息,就从何时可是消费消息。
5、Topics——主题(通配符)模式,exchange=topic,routingKey不同。这个是对路由模式的灵活变通。Routing模式是全匹配,而Topics是模糊匹配。
channel会把所有接收到的消息发送给匹配的消费者。需要提前订阅消息。消费者何时订阅消息,就从何时可是消费消息。topic模式下,有两个通配符:* 、# 。其中,* 是匹配任意一个字符,而#是表示匹配任意的0-N个字符。
从上面可以看出,这五种模式,又可以分为两种模式:queue模式--不需要提前订阅,只能消费一次;发布/订阅模式,需要提前订阅,可以多个消费者同时消费
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
rabbitmq 的注意点:
1、队列声明了自后,就不再被允许修改参数,只能重新建立一个队列
2、队列的声明需要在生产者和消费者两(多(个消费者))端同时声明
3、声明队列的时候,只有队列不存在的时候,才会新增一个队列
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
rabbitmq 的日志文件位置:/usr/local/rabbitmq/var/log/rabbitmq
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
rabbitmq 的配置文件
文件路径:/usr/local/rabbitmq/etc/rabbitmq/rabbitmq.conf 下面,这个文件默认不存在,可以自己手动新建。其中,/usr/local/rabbitmq 这个是安装的路径
配置文件的核心参数:
1、management.listener.port = 15672 --监听端口
2、stomp.num_acceptors.tcp = 10 --默认的tcp链接
3、handshake_timeout = 10000 --最大链接时间,单位:ms
4、listeners.ssl
5、num_acceptors.ssl=1 --接受来自客户机的TLS连接的Erlang进程的数量。
6、ssl_handshake_timeout=5000 --ssl最大链接时间,单位:ms
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
rabbitmq 集群
1、rabbitmq 没有主从节点区别
2、rabbitmq使用cookie来决定节点间是否能通信。多个节点之间要通信,必须拥有相同的、被称为Erlang cookie的密钥。这个密钥是一个小于255长度的普通字符串,通常存在一个本地的文件中。这个密钥只能被所有者操作。(
因为是使用root解压缩安装,所以这个文件放在root下面,路径是:/root/.erlang.cookie)
3、如论采取何种协议,rabbitmq 客户端同一时刻只能操作一个节点
4、如果一个节点挂了,客户端会自动连接到其他节点,并且集群其他节点会重新覆盖(学习)拓扑关系。节点加入或者重新覆盖的时候,host的列表会被记录到每一个节点。
5、建议使用LAN 而不是WAN来进行集群通信。如果要使用WAN,建议使用Shovel或者Federation 插件。注意使用Shovel 或 Federation 不等同于集群。
6、集群节点命名,是rabbit@+short host name,如rabbit@server1。在linux环境中,节点名称是小写,而在windows 环境中,则是rabbit@ +大写的 short host name
7、新节点加入集群的时候,新节点必须先暂停,在加入之后再启动节点。一般的步骤是:停止(stop)节点、重置(reset)节点、加入(join)集群、启动(start)节点
这意味着,新节点不能在加入集群的同时,又拥有集群里其他节点的同步数据。要解决这个问题,可以采取 Blue/Green deploymentt strategy(蓝/绿 部署策略)或 backup and restore(备份存储)
8、cluster_status 查看rabbitmq 节点集群
9、节点停止后,节点会尝试连接集群10次,超时时间30秒,也就是说,30秒内连接成功,则启动节点。否则,失败。
10、节点停止后,如果没有同级节点,则它启动的时候,不会尝试连接其他节点。但是,这并不意味着,这是一个节点,因为它是集群的性质的,其他的节点可加入这个集群。
11、节点B停止后,如果改变了它本身的host名称和节点名称,则它重启后,将不能加入集群中,集群的其他节点A和C也不会再认识它。这时候,再次重启B或者重启A,可以让几点B再次加入集群中。
12、节点尝试连接同级节点的默认时间是5分钟,这个可配置