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