RabbiitMQを用いて受信メッセージを簡単に送信する.
8673 ワード
参考:http://blog.csdn.net/lmj623565791/article/details/37607165
http://blog.csdn.net/anzhsoft/article/details/19563091
http://www.rabbitmq.com/tutorials/tutorial-one-java.html
https://www.cnblogs.com/LiangSW/p/6218886.html
https://www.cnblogs.com/piaolingzxh/p/5448927.html
例えば、メールを投函したいなら、郵便局と郵便配達人のようにメールを送ってもいいです.そして郵便局からメールを受け取って、受信者にメールを渡します.この過程で、RabbitMQはメールボックスと郵便局と郵便配達人のようになります.RabbitMQはメッセージキューです.プログラムで送信されたメッセージを受信して、対応するメッセージキューに入れます.他のプログラムによっては、メッセージ・キューからデータを取得して、プログラム間の通信を完了することができます.以下では、いくつかの概念を紹介します.
1、生産者
プログラムでメッセージを送る側を生産者と呼びます.
2、メッセージキュー
生産者が送るメッセージを格納するために使用されます.
3、消費者
メッセージ・キューからメッセージを取得する方を消費者と呼びます.
4、Connection
ConnectionはTCP接続で、消費者と生産者はTCPを通じてラビットMQ serverに接続されています.
5.Chanel
チャンネルがConcection上に確立されていますが、頻繁にTCP接続をオフにすると性能に影響がありますので、Chanelを使ってメッセージを送信したり、受信したりします.
(1)メッセージ/受信メッセージを送信するキューは、chanelのqueue Declare()方法によって指定できます.
queue:キューの名前
durable:恒久化するかどうか、キューとリピータはdurable属性があり、デフォルトはfalseです.この時、ラビットmqが再起動すると、キューとリピータは全部消えます.tureに設定して、ここで免れることができます.
exclusive:排外かどうか、trueの場合は今回の接続のみ(同じ接続)にアクセスできるという意味です.
aut Delete:自動的に削除するかどうか、つまり消費者がいない時にリピータを削除するかどうか
exchange:リピータは、空に入ることができます.「」はデフォルトのリピータです.
ルートキーは、ルートキーのリピータによって、どの消費者キューにメッセージを送信するかを決定します.
メッセージのバイト形式
他のパラメータを参照してください.https://www.cnblogs.com/piaolingzxh/p/5448927.html
リピータ、生産者が送信するメッセージは、一般的に消費者のキューに直接渡されるのではなく、リピータを中継として使用し、生産者はまず、メッセージをリピータに送信し、リピータは、ルーティング規則に従って、どのキューにメッセージを送信するかを決定する.リピータタイプはdirect、topic、fanout、headersがあります.
以下は簡単な例であり、Senderはメッセージキューにメッセージを送信し、Receiverはメッセージキューからメッセージを取得し、リピータは空のリピータ(デフォルトリピータ、directタイプ)を使用して、キュー名を転送する必要があり、リピータはキュー名をルートキーとして送信し、対応するキューにメッセージを送信する.
1.送信者クラスを作成する
RabbiitMQの管理インターフェースにアクセスすると、自動的にQue-testのキューが作成され、メッセージが表示されます.
Recieverを起動して、受信者がメッセージキューからメッセージを取得し、コンソールに印刷するのが見えます.
http://blog.csdn.net/anzhsoft/article/details/19563091
http://www.rabbitmq.com/tutorials/tutorial-one-java.html
https://www.cnblogs.com/LiangSW/p/6218886.html
https://www.cnblogs.com/piaolingzxh/p/5448927.html
例えば、メールを投函したいなら、郵便局と郵便配達人のようにメールを送ってもいいです.そして郵便局からメールを受け取って、受信者にメールを渡します.この過程で、RabbitMQはメールボックスと郵便局と郵便配達人のようになります.RabbitMQはメッセージキューです.プログラムで送信されたメッセージを受信して、対応するメッセージキューに入れます.他のプログラムによっては、メッセージ・キューからデータを取得して、プログラム間の通信を完了することができます.以下では、いくつかの概念を紹介します.
1、生産者
プログラムでメッセージを送る側を生産者と呼びます.
2、メッセージキュー
生産者が送るメッセージを格納するために使用されます.
3、消費者
メッセージ・キューからメッセージを取得する方を消費者と呼びます.
4、Connection
ConnectionはTCP接続で、消費者と生産者はTCPを通じてラビットMQ serverに接続されています.
5.Chanel
チャンネルがConcection上に確立されていますが、頻繁にTCP接続をオフにすると性能に影響がありますので、Chanelを使ってメッセージを送信したり、受信したりします.
(1)メッセージ/受信メッセージを送信するキューは、chanelのqueue Declare()方法によって指定できます.
queue:キューの名前
durable:恒久化するかどうか、キューとリピータはdurable属性があり、デフォルトはfalseです.この時、ラビットmqが再起動すると、キューとリピータは全部消えます.tureに設定して、ここで免れることができます.
exclusive:排外かどうか、trueの場合は今回の接続のみ(同じ接続)にアクセスできるという意味です.
aut Delete:自動的に削除するかどうか、つまり消費者がいない時にリピータを削除するかどうか
/**
* Declare an exchange.
* @see com.rabbitmq.client.AMQP.Exchange.Declare
* @see com.rabbitmq.client.AMQP.Exchange.DeclareOk
* @param exchange the name of the exchange
* @param type the exchange type
* @param durable true if we are declaring a durable exchange (the exchange will survive a server restart)
* @param autoDelete true if the server should delete the exchange when it is no longer in use
* @param arguments other properties (construction arguments) for the exchange
* @return a declaration-confirm method to indicate the exchange was successfully declared
* @throws java.io.IOException if an error is encountered
*/
Exchange.DeclareOk exchangeDeclare(String exchange, String type, boolean durable, boolean autoDelete,
Map arguments) throws IOException
(2)chanelのBaic Publish()方法により、メッセージをキューに送ることができます.exchange:リピータは、空に入ることができます.「」はデフォルトのリピータです.
ルートキーは、ルートキーのリピータによって、どの消費者キューにメッセージを送信するかを決定します.
メッセージのバイト形式
他のパラメータを参照してください.https://www.cnblogs.com/piaolingzxh/p/5448927.html
public void basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body) throws IOException {
this.delegate.basicPublish(exchange, routingKey, props, body);
}
public void basicPublish(String exchange, String routingKey, boolean mandatory, BasicProperties props, byte[] body) throws IOException {
this.delegate.basicPublish(exchange, routingKey, mandatory, props, body);
}
public void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body) throws IOException {
this.delegate.basicPublish(exchange, routingKey, mandatory, immediate, props, body);
}
6.Exchangeリピータ、生産者が送信するメッセージは、一般的に消費者のキューに直接渡されるのではなく、リピータを中継として使用し、生産者はまず、メッセージをリピータに送信し、リピータは、ルーティング規則に従って、どのキューにメッセージを送信するかを決定する.リピータタイプはdirect、topic、fanout、headersがあります.
以下は簡単な例であり、Senderはメッセージキューにメッセージを送信し、Receiverはメッセージキューからメッセージを取得し、リピータは空のリピータ(デフォルトリピータ、directタイプ)を使用して、キュー名を転送する必要があり、リピータはキュー名をルートキーとして送信し、対応するキューにメッセージを送信する.
1.送信者クラスを作成する
package com.rabbit.test1;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
/**
* RabbitMQ
* Sender
*/
public class Sender {
//
private final static String QUEUE_NAME = "queue-test";
public static void main(String[] argv) throws java.io.IOException {
//1. ConnectionFactory connectionFactory
ConnectionFactory connectionFactory = new ConnectionFactory();
//2. connectionFactory RabbitMQ IP
connectionFactory.setHost("localhost");
// connectionFactory.setPort(5762); //
// connectionFactory.setUsername("admin");//
// connectionFactory.setPassword("admin");//
//3. connectionFactory connection
Connection connection = connectionFactory.newConnection();
//4. connection channel
Channel channel = connection.createChannel();
//5. channel
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
//
String message = "hello world!";
//6. channel , , ( , direct)
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println(" " + QUEUE_NAME + " :" + message);
//7.
channel.close();
//8.
connection.close();
}
}
2.受取人package com.rabbit.test1;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;
import com.rabbitmq.client.QueueingConsumer.Delivery;
/**
* RabbitMQ
* Receiver
*
*/
public class Receiver {
//
private final static String QUEUE_NAME = "queue-test";
public static void main(String[] argv) throws java.io.IOException, java.lang.InterruptedException {
//1. ConnectionFactory connectionFactory
ConnectionFactory connectionFactory = new ConnectionFactory();
//2. connectionFactory RabbitMQ IP
connectionFactory.setHost("localhost");
//3. connectionFactory connection
Connection connection = connectionFactory.newConnection();
//4. connection channel
Channel channel = connection.createChannel();
//5. channel
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
//
//6. consumer, channel
QueueingConsumer consumer = new QueueingConsumer(channel);
//7. channel
channel.basicConsume(QUEUE_NAME, true, consumer);
while (true) {
// consumer ,nextDelivery , ,
Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
System.out.println(" " + QUEUE_NAME + " :" + message);
}
}
}
3.Senderを起動し、メッセージキューに情報を追加するRabbiitMQの管理インターフェースにアクセスすると、自動的にQue-testのキューが作成され、メッセージが表示されます.
Recieverを起動して、受信者がメッセージキューからメッセージを取得し、コンソールに印刷するのが見えます.