RabbitMQは、複数のメッセージ通信プロトコルをサポートし、分散展開をサポートし、複数のオペレーティングシステムでの実行をサポートし、柔軟性や高可用性などの機能を備えた軽量のメッセージブローカーミドルウェアです。RabbitMQはさまざまなプロトコルをサポートしますが、その中で最も重要なものは、「メッセージクライアント」と「メッセージブローカーミドルウェア」間の通信プロトコルを定義するAdvanced Message Queuing Protocol(AMQP)です。このプロトコルに基づいて、メッセージクライアントとメッセージブローカーミドルウェアは次のことができます。開発言語や特定の製品の制約から解放されます。
AMQPの大まかなモデルを次の図に示します。
プロデューサーはメッセージを「メッセージブローカー(RabbitMQサーバー)」に渡し、メッセージチャネル(チャネル)がそれらの間に確立され、メッセージは最初にエクスチェンジ(Exchange)によって処理され、次にメッセージキュー(メッセージキュー)に配信されます。 )、そして最後にメッセージキューはメッセージをメッセージ担当者に送信します。
1.RabbitMQとErlangをダウンロードします
WindowsでのRabbitMQサーバーの最高バージョンは3.8.1です。ダウンロードリンク:https://www.rabbitmq.com/install-windows.html
RabbitMQサーバーはErlang言語を使用しているため、Erlangもダウンロードする必要があります。現在の最高バージョンは22.1、
ダウンロードアドレス:http://erlang.org/download/、ファイル名otp_win64_22.1.exeをクリックしてダウンロードします。
二、配置
1. RabbitMQは、インストール後にWindowsサービスとして開始されます。
2.プラグイン管理を開きます
インストールディレクトリのsbinディレクトリにcmdを入力し、次のコマンドを入力してインストールします
。rabbitmq-pluginsenablerabbitmq_management
プラグインのステータスを表示するには、次のコマンドを入力します
。rabbitmq-pluginslist
3.Web管理インターフェイスにログインします
ステップ2プラグインを開いた後、次のアドレスにアクセスできます。http:// localhost:15672 /
ログインするデフォルトのユーザ名とパスワード(どちらもゲスト)を入力します。ログイン後のインターフェイスは次のとおりです。
注:RabbitMQの別のポート5672は、クライアント通信に使用されます。
3 、プロデューサーとコンシューマーの例のJava実装
サーバーの場合、メッセージプロデューサーとコンシューマーの両方がクライアントに属し、AMQPプロトコルを介してサーバーと通信します。AMQPは言語による制限がなく、クライアントはさまざまなプログラミング言語で実装できます。クライアントは以下のJavaで書かれています。
新しいMavenプロジェクトを作成し、pom.xmlに依存関係を追加します。
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.7.3</version>
</dependency>
1.プロデューサーを書く
新しいメッセージプロデューサーを作成し、サーバーにメッセージを送信します。
package com.example.rabbittest;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Send {
public static void main(String[] args) throws IOException, TimeoutException {
//创建连接
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
//建立通道
Channel channel = connection.createChannel();
//声明队列
String queueName = "hello";
channel.queueDeclare(queueName,false,false,false,null);
String message = "hello world";
//消息发布
channel.basicPublish("", queueName, null, message.getBytes());
//关闭通道和连接
channel.close();
connection.close();
}
}
上記のコードはスイッチを宣言しておらず、デフォルトのスイッチが使用されます。
コードを実行した後、http:// localhost:15672 /にログインし、[キュー]タブをクリックすると、helloキューが作成されていることがわかります。
2.消費者を書く
(プロデューサーと同じプロジェクトで)新しいメッセージコンシューマーを作成し、サーバーメッセージを受け入れます。
package com.example.rabbittest;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class Receive {
public static void main(String[] args) throws IOException, TimeoutException {
//创建连接
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
//建立通道
Channel channel = connection.createChannel();
//声明队列
String queueName = "hello";
channel.queueDeclare(queueName,false,false,false,null);
String message = "hello world";
//消息发布
Consumer consumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String message = new String(body, "UTF-8");
System.out.println("接收的消息:" + message);
}
};
channel.basicConsume(queueName, true, consumer);
}
}
コードを実行した後、RabbitMQコンソールを開き、helloキューをクリックすると、対応するコンシューマーがあることがわかります。