rabbitMq dockerのインストールと簡単な使用(springboot)

RabbitMQコア用語の概要

出版社:メッセージプロデューサー

Exchange: Exchange。プロデューサーから送信されたメッセージを受信し、ルーティングキーとキューの間のバインディング関係に従ってこれらのメッセージをサーバーのキューにルーティングするために使用されます。

Exchangeには、ダイレクト(デフォルト)、ファンアウト、トピック、ヘッダーの4種類があります。

  diract:完全なマッチング戦略。スイッチのルーティングキーは、メッセージを対応するメッセージキューにポイントツーポイントモードで送信する前に、バインディングのルーティングキーと完全に同じである必要があります。

ファンアウト:ブロードキャスト戦略、ルーティングキーが一致しない、スイッチにバインドされているすべてのキューにメッセージを送信する、ルーティングキーが一致しないため、速度が最も速い

トピック: ワイルドカードマッチングトピック戦略。スイッチは、パターンマッチングを通じてメッセージのルーティングキー属性を割り当て、ルーティングキーをパターンと照合します。この時点で、キューをパターンにバインドする必要があります。ルーティングキーとバインディングキーの文字列をドットで区切って単語に分割します。また、記号「#」と記号「*」の2つのワイルドカード文字も認識します。#0以上の単語に一致、* 1つの単語に一致

ヘッダー: 基本的に使用されていません。一致するルーティングキーではなく、メッセージ内のヘッダーが一致しています。パフォーマンスが非常に低くなっています。

キュー:メッセージキュー

バインディング:バインディング関係。バインディングスイッチとキューの間の関連付けを示すために使用されます。スイッチは、複数のキューまたは多対多の関係を指定できます。

ルーティングキー:ルーティングキー のキーを介して、スイッチとキューの間のバインディング関係を一致させます

チャンネル:

多重化接続における独立した双方向データストリームチャネル。チャネルは、実際のTCP接続内で確立された仮想接続です。AMQPコマンドはチャネルを介して送信されます。メッセージの公開、キューへのサブスクライブ、メッセージの受信のいずれであっても、これらのアクションはすべてチャネルを介して完了します。オペレーティングシステムがTCPを確立して破棄するのは非常にコストがかかるため、TCP接続を再利用するためにチャネルの概念が導入されています。

コンシューマー:メッセージコンシューマー

仮想ホスト :仮想ホスト。交換、メッセージキュー、および関連オブジェクトのバッチを表します。仮想ホストは、同じ認証および暗号化環境を共有する独立したサーバードメインです。各仮想ホストは、基本的に、独自のキュー、スイッチ、バインディング、およびアクセス許可メカニズムを備えたRabbitMQサーバーのミニバージョンです。vhostはAMQPコンセプトの基盤であり、接続時に指定する必要があります。RabbitMQのデフォルトのvhostは/です。

ブローカー: rabbitmqサーバーであるメッセージキューサーバーエンティティを表します

1.dockerを使用した簡単なインストール 

画像ファイルをプルします

(国内ミラーが構成されていない場合は、registry.docker-cn.com / library / rabbitmqを使用します。国内ミラーアドレスが構成されている場合は、rabbitmqを直接使用します) 

docker pull Registry.docker-cn.com/library/rabbitmq

起動

docker -d --name myrabbitmq -p 5672:5672 -p 15672:15672 Registry.docker-cn.com/library/rabbitmq

Webページへのアクセスを構成する

  コンテナに入る

docker exec -it b198e5bff969 / bin / bash

Web管理モジュールを開始するコマンドは次のとおりです(さらに、rabbitmqには多くのコマンドがあり、Baiduで確認できます)
rabbitmqctl start_apprabbitmq-
プラグインはrabbitmq_managementを有効にします

アクセスIP:15672

アカウントパスワードguest:guest

スプリングブーツの統合使用を使用する 

springbootのamqpAdminは、取引所、キューなどでのシステム操作をカプセル化し、rabbitmqTemplateは、メッセージの送受信の処理をカプセル化します。

依存関係を追加する

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-amqp</artifactId>
		</dependency>

rabbitmqアドレスを設定します

構成クラスの記述

/**
 * Created by Administrator on 2018/11/30.
 *自动配置类 RabbitAutoConfiguration
 *    里面注入了  rabbitTamplate   CachingConnectionFactory  RabbitConnectionFactoryBean
 *      AmqpAdmin 系统管理组件
 *  RabbitProperties 封装了rabbitmq 配置
 *@EnableRabbit  // 开启rabbitmq 的自动配置
 */
@EnableRabbit  // 开启rabbitmq 的自动配置
@Configuration
public class MyRabbitmqConfig {


}

ページ交換に交換を手動で追加する

直接戦略の交換

ファンアウト戦略スイッチ

トピック戦略の交換

メッセージキューを追加する

バインディング交換とメッセージキュー

メッセージ送信サーバーコードを書く

    @Test
    public void send() {
        // 路由键默认等于队列名称
        Map map = new HashMap();
        map.put("123","123");
        map.put("lists",new int[]{1,2,3});
        rabbitTemplate.convertAndSend("xiaodu.direct","key01",map);
    }

 

rabbitmq管理ページを表示

 

送信がオブジェクトの場合、メッセージはオブジェクトのシリアル化の結果です

 

コードを受け入れる

    @Test
    public void receive() {
//        参数为队列的名称  ,另外接受到的消息能自动反序列化回来,(注意实现序列化接口)
//        消息取出来会自动删除
        Object o = rabbitTemplate.receiveAndConvert("xiaodu.queue01");
        System.out.println("接受到消息为==" + o);
    }

シリアル化ルール

springbootでは、SimpleMessageConverterがjdkのシリアル化ルールとしてデフォルトで自動的に使用されます

jsonに変換されたmessageConverterを使用して、構成クラスで構成します

  

使用後、メッセージ本文のコンテンツペイロードはjsonタイプであり、保存されたオブジェクトのシリアル化の結果ではありません。

ブロードキャストモードのテスト:ブロードキャストモードではルーティングキーを指定する必要はありませんが、スイッチを必要なキューにバインドすることを忘れないでください

リスナーを使用してキュー内のメッセージを取得します。アノテーション@RabbitListenerを使用します(rabbitmq構成をオンにするときは、スタートアップクラスに@EnableRabbitを追加する必要があることに注意してください)。

@Service
public class RabbitmqService {

    @RabbitListener(queues = "xiaodu.queue01")
    public void receive(User user) {
        System.out.println("监听到的消息为 = " + user);

    }

}

    //使用参数 Message  获取消息内容
    @RabbitListener(queues = "xiaodu.queue01")
    public void receive02(Message message) {
        byte[] body = message.getBody();
        System.out.println("接受到的消息体内容 = " + new String(body));
        MessageProperties messageProperties = message.getMessageProperties();
        System.out.println("接受到的消息headers= " + messageProperties);
    }

AmqpAdminを使用して、交換、キュー、バインディング関係などを作成します。

1交換交換を作成します

さまざまな戦略に従って、さまざまな交換を作成し、キューを作成し、バインディング関係を作成できます

    @Autowired
    private AmqpAdmin amqpAdmin;

    /**
     * 创建
     */
    @Test
    public void createExchange() {
//        参数  交换器名, durable 是否持久化, autoDelete 是否自动删除
        Exchange exchange = new DirectExchange("exchange.direct",true,false);
        amqpAdmin.declareExchange(exchange);
//        创建 queue-01 队列
        amqpAdmin.declareQueue(new Queue("queue-01"));
//        创建绑定关系
//         destination 绑定的目的地, Binding.DestinationType destinationType 绑定的类型是交换器还是队列,
//         String exchange 绑定到那个交换器上, String routingKey  路由键, Map<String, Object> arguments 命令参数
        Binding binding = new Binding("queue-01",Binding.DestinationType.QUEUE,
               "exchange.direct","exkey-01",null );
        amqpAdmin.declareBinding(binding);

    }

他の操作も同様ですが、スイッチを構成ファイルに直接登録することもできます。キューなど

配布されたrabbitmqの複製:https://blog.csdn.net/gokeiryou263/article/details/54312094

 

おすすめ

転載: blog.csdn.net/xiaodujava/article/details/84649095
おすすめ