我正在学习RabbitMQ;它是如何工作的。
根据有关其内部的文档,消息存储保留消息内容,队列只保留消息的索引。
因此,当相同的消息路由到多个队列时,它不会复制消息内容,而是仅将其存储一次,并将引用(消息ID)保留在这些队列中的消息中。
那么如果一条消息被排入属于不同机器的多个队列,该怎么办?消息是否只存储在其中一台机器上?
问题可以改写如下:是跨群集机器支持存储全局的消息还是每台机器支持本地的消息?
谢谢,
答案 0 :(得分:0)
RabbitMQ使用自定义数据库存储消息,位置通常为:
/var/lib/rabbitmq/mnesia/rabbit@hostname/queues/
然后,如果一条消息被排入多个队列,该怎么办呢? 属于不同的机器?
设置群集时,队列在群集中可见,但所有者始终是一个节点,因此每个操作都会重定向到队列所有者。
如果节点已关闭,则队列标记为down
,您无法访问该队列。
是跨群集计算机或本地支持存储全局的消息 每台机器?
默认情况下,每个节点都包含其队列数据。
如果启用ha策略(https://www.rabbitmq.com/ha.html),则消息将镜像到其他节点,如果所有者下线,则更改所有权并且消息可用