MQ アドバンスト メッセージの永続性

画像の説明を追加してください
個人の名刺:

ブロガー:酔っ払い。
個人プロフィール:ワインを満喫し、ワインのエネルギーで未来のために戦いましょう。
この記事は感動的です三人で旅行するときは、私たちが先生にならなければなりません。

画像の説明を追加してください
このプロジェクトは、ステーション Bのダークホース プログラマーである SpringCloud+RabbitMQ+Docker+Redis+search+distributed による Java「SpringCloud Microservice Technology Stack」に基づいています。

[SpringCloud+RabbitMQ+Docker+Redis+search+分散・詳細システム解説 springcloud マイクロサービス技術スタックコース | ダークホースプログラマー Java マイクロサービス]クリックして視聴

2. メッセージの信頼性

2. メッセージの永続化

プロデューサーの確認により、メッセージが RabbitMQ キューに確実に配信されますが、メッセージが RabbitMQ に送信された後、マシンが突然ダウンすると、メッセージも失われる可能性があります。

メッセージが RabbitMQ に安全に保存されるようにするには、メッセージ永続化メカニズムを有効にする必要があります。

  • スイッチの永続性:デフォルトでは非永続的
  • キューの永続性:デフォルトでは非永続的
  • メッセージの永続性: デフォルトの永続性

デフォルトでは、SpringAMQP を通じて mq を使用するものはすべて永続的です。

  1. スイッチの永続性

RabbitMQ のスイッチはデフォルトでは非永続的であり、mq の再起動後に失われます。

SpringAMQP では、コードを通じてスイッチの永続性を指定できます。

@Bean
public DirectExchange simpleExchange(){
    
    
    // 三个参数:交换机名称、是否持久化、当没有queue与其绑定时是否自动删除
    return new DirectExchange("simple.direct", true, false);
}

RabbitMQ コンソールで永続スイッチのラベル​​を確認できますD
ここに画像の説明を挿入します

  1. キューの永続性

RabbitMQ のキューはデフォルトでは非永続的であり、mq が再起動されると失われます。

SpringAMQP では、コードを通じてスイッチの永続性を指定できます。

@Bean
public Queue simpleQueue(){
    
    
    // 使用QueueBuilder构建队列,durable就是持久化的
    return QueueBuilder.durable("simple.queue").build();
}

RabbitMQ コンソールで永続キューのラベルを確認できますD
ここに画像の説明を挿入します

  1. メッセージの永続性

SpringAMQP を使用してメッセージを送信する場合、メッセージ プロパティ (MessageProperties) を設定し、配信モードを指定できます。

  • 1: 非永続的
  • 2:持久化

非永続メッセージは、mq が再起動されると消えます。

永続化メッセージコード

/**
 * 持久化消息测试
 */
@Test
public void testDurableMessage() {
    
    
    //创建持久化消息
    Message message = MessageBuilder
            .withBody("hello, ttl queue".getBytes(StandardCharsets.UTF_8))
            .setDeliveryMode(MessageDeliveryMode.PERSISTENT)
            .build();
    //消息id
    CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
    //发送消息
    rabbitTemplate.convertAndSend("simple.queue", message, correlationData);
    //记录日志
    log.debug("消息发送成功");
}

ここに画像の説明を挿入します

docker を再起動します。メッセージはまだ存在します。

知らせ:

  • キューがスイッチにバインドされていない場合、routingkey はキュー名を使用できます。
    上記のコード例では、simple.queue はキューですが、スイッチにバインドされていません。

おすすめ

転載: blog.csdn.net/m0_65144570/article/details/133150288