“RabbitMQ:高级特性”的版本间差异
跳到导航
跳到搜索
(建立内容为“category:RabbitMQ == 持久化机制 == RabbitMQ 持久化机制分为:'''队列持久化'''、'''消息持久化'''、'''交换器持久化'''。 不管…”的新页面) |
(→持久化机制) |
||
第2行: | 第2行: | ||
== 持久化机制 == | == 持久化机制 == | ||
RabbitMQ 持久化机制分为:''' | RabbitMQ 持久化机制分为: | ||
# '''交换器持久化''':声明交换机的时候可以通过属性设置是否需要持久化; | |||
#: <syntaxhighlight lang="Java" highlight=""> | |||
// 声明交换机:第三个参数为持久化选项 | |||
channel.exchangeDeclare(EXCHANGE_ROUTING_INFORM, BuiltinExchangeType.DIRECT, true); | |||
# | </syntaxhighlight> | ||
# '''队列持久化''':声明队列的时候可以设置队列是否需要持久化; | |||
#: <syntaxhighlight lang="Java" highlight=""> | |||
// 声明队列:第二个参数为持久化选项 | |||
channel.queueDeclare(QUEUE_INFORM_EMAIL, true, false, false, null); | |||
</syntaxhighlight> | |||
# '''消息持久化''':在发布消息的时候,通过消息属性可以设置,消息是否需要持久化; | |||
#: <syntaxhighlight lang="Java" highlight=""> | |||
// 发送消息:第三个参数为消息属性 | |||
//“MessageProperties.PERSISTENT_TEXT_PLAIN”:将消息标记为持久性,确保即使 RabbitMQ 重新启动,队列也不会丢失。 | |||
channel.basicPublish("", TASK_QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes(StandardCharsets.UTF_8)); | |||
</syntaxhighlight> | |||
* 队列持久化,不代表消息就是持久化的。 | |||
* 不管是持久化的消息还是非持久化的消息都可以被写入到磁盘: | |||
** 持久化消息会同时写入磁盘和内存(加快读取速度); | |||
** 非持久化消息会在内存不够用时,将消息写入磁盘(Rabbitmq重启之后就没有了)。 | |||
2021年5月25日 (二) 02:13的版本
持久化机制
RabbitMQ 持久化机制分为:
- 交换器持久化:声明交换机的时候可以通过属性设置是否需要持久化;
// 声明交换机:第三个参数为持久化选项 channel.exchangeDeclare(EXCHANGE_ROUTING_INFORM, BuiltinExchangeType.DIRECT, true);
- 队列持久化:声明队列的时候可以设置队列是否需要持久化;
// 声明队列:第二个参数为持久化选项 channel.queueDeclare(QUEUE_INFORM_EMAIL, true, false, false, null);
- 消息持久化:在发布消息的时候,通过消息属性可以设置,消息是否需要持久化;
// 发送消息:第三个参数为消息属性 //“MessageProperties.PERSISTENT_TEXT_PLAIN”:将消息标记为持久性,确保即使 RabbitMQ 重新启动,队列也不会丢失。 channel.basicPublish("", TASK_QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes(StandardCharsets.UTF_8));
- 队列持久化,不代表消息就是持久化的。
- 不管是持久化的消息还是非持久化的消息都可以被写入到磁盘:
- 持久化消息会同时写入磁盘和内存(加快读取速度);
- 非持久化消息会在内存不够用时,将消息写入磁盘(Rabbitmq重启之后就没有了)。