“RabbitMQ:高级特性”的版本间差异

来自Wikioe
跳到导航 跳到搜索
(建立内容为“category:RabbitMQ == 持久化机制 == RabbitMQ 持久化机制分为:'''队列持久化'''、'''消息持久化'''、'''交换器持久化'''。 不管…”的新页面)
 
第2行: 第2行:


== 持久化机制 ==
== 持久化机制 ==
RabbitMQ 持久化机制分为:'''队列持久化''''''消息持久化''''''交换器持久化'''
RabbitMQ 持久化机制分为:
 
# '''交换器持久化''':声明交换机的时候可以通过属性设置是否需要持久化;
 
#: <syntaxhighlight lang="Java" highlight="">
不管是持久化的消息还是非持久化的消息都可以被写入到磁盘:
// 声明交换机:第三个参数为持久化选项
* 持久化消息会同时写入磁盘和内存(加快读取速度);
channel.exchangeDeclare(EXCHANGE_ROUTING_INFORM, BuiltinExchangeType.DIRECT, true);
# 非持久化消息会在内存不够用时,将消息写入磁盘(Rabbitmq重启之后就没有了)。
</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重启之后就没有了)。
<syntaxhighlight lang="Java" highlight="">
 
</syntaxhighlight>

2021年5月25日 (二) 02:13的版本


持久化机制

RabbitMQ 持久化机制分为:

  1. 交换器持久化:声明交换机的时候可以通过属性设置是否需要持久化;
    // 声明交换机:第三个参数为持久化选项
    channel.exchangeDeclare(EXCHANGE_ROUTING_INFORM, BuiltinExchangeType.DIRECT, true);
    
  2. 队列持久化:声明队列的时候可以设置队列是否需要持久化;
    // 声明队列:第二个参数为持久化选项
    channel.queueDeclare(QUEUE_INFORM_EMAIL, true, false, false, null);
    
  3. 消息持久化:在发布消息的时候,通过消息属性可以设置,消息是否需要持久化;
    // 发送消息:第三个参数为消息属性
    //“MessageProperties.PERSISTENT_TEXT_PLAIN”:将消息标记为持久性,确保即使 RabbitMQ 重新启动,队列也不会丢失。
    channel.basicPublish("", TASK_QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes(StandardCharsets.UTF_8));
    
  • 队列持久化,不代表消息就是持久化的。
  • 不管是持久化的消息还是非持久化的消息都可以被写入到磁盘:
    • 持久化消息会同时写入磁盘和内存(加快读取速度);
    • 非持久化消息会在内存不够用时,将消息写入磁盘(Rabbitmq重启之后就没有了)。