免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。https://blog.csdn.net/ko0491/article/details/90700576
プロデューサー
package com.ghgcn.mq.test01;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;
public class Producer1 {
private static String userName = "root";
private static String password = "root123";
private static String host = "localhost";
private static String exchange = "fanout_exchange_test";
private static String queue = "fanout_queue_test";
private static int port = 5672;
public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername(userName);
factory.setPassword(password);
factory.setHost(host);
factory.setPort(port);
// 1.建立连接
Connection conn = factory.newConnection();
// 2.建立信道
Channel channel = conn.createChannel();
// 3.使用交换器
channel.exchangeDeclare(exchange, BuiltinExchangeType.FANOUT);
//channel.queueDeclare(queue, true, false, false, null);
byte[] body = "hello fanout ".getBytes();
channel.basicPublish(exchange, "", MessageProperties.PERSISTENT_TEXT_PLAIN, body);
System.out.println("发送完成");
TimeUnit.SECONDS.sleep(10);
channel.close();
conn.close();
}
}
消費者
package com.ghgcn.mq.test01;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import com.rabbitmq.client.AMQP.BasicProperties;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.ShutdownSignalException;
public class Consumer1 {
private static String userName = "root";
private static String password = "root123";
private static String host = "localhost";
private static String queue = "fanout_queue_test";
private static String exchange = "fanout_exchange_test";
private static int port = 5672;
public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername(userName);
factory.setPassword(password);
factory.setHost(host);
factory.setPort(port);
// 1.建立连接
Connection conn = factory.newConnection();
// 2.建立信道
Channel channel = conn.createChannel();
channel.basicQos(5);
channel.exchangeDeclare(exchange, BuiltinExchangeType.FANOUT);
//获取系统的队列
//String queue2 = channel.queueDeclare().getQueue();
channel.queueDeclare(queue, true, false, false, null);
channel.queueBind(queue, exchange, "");
channel.basicConsume(queue, new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
throws IOException {
System.out.println("接收消息1: "+new String(body));
System.out.println("consumerTag "+consumerTag);
System.out.println("envelope "+envelope);
System.out.println("properties "+properties);
channel.basicAck(envelope.getDeliveryTag(), false);
}
@Override
public void handleConsumeOk(String consumerTag) {
System.out.println("handleConsumeOk "+consumerTag);
}
@Override
public void handleCancelOk(String consumerTag) {
System.out.println("handleCancelOk "+consumerTag);
}
@Override
public void handleCancel(String consumerTag) throws IOException {
System.out.println("handleCancel "+consumerTag);
}
@Override
public void handleShutdownSignal(String consumerTag, ShutdownSignalException sig) {
System.out.println("handleShutdownSignal "+consumerTag);
}
@Override
public void handleRecoverOk(String consumerTag) {
System.out.println("handleRecoverOk "+consumerTag);
}
});
TimeUnit.SECONDS.sleep(10);
channel.close();
conn.close();
}
}
消費者2
package com.ghgcn.mq.test01;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import com.rabbitmq.client.AMQP.BasicProperties;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.ShutdownSignalException;
public class Consumer2 {
private static String userName = "root";
private static String password = "root123";
private static String host = "localhost";
private static String queue = "fanout_queue_test2";
private static String exchange = "fanout_exchange_test";
private static int port = 5672;
public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername(userName);
factory.setPassword(password);
factory.setHost(host);
factory.setPort(port);
// 1.建立连接
Connection conn = factory.newConnection();
// 2.建立信道
Channel channel = conn.createChannel();
channel.basicQos(5);
channel.exchangeDeclare(exchange, BuiltinExchangeType.FANOUT);
//获取系统的队列
//String queue2 = channel.queueDeclare().getQueue();
channel.queueDeclare(queue, true, false, false, null);
channel.queueBind(queue, exchange, "");
channel.basicConsume(queue, new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
throws IOException {
System.out.println("接收消息2: "+new String(body));
System.out.println("consumerTag "+consumerTag);
System.out.println("envelope "+envelope);
System.out.println("properties "+properties);
channel.basicAck(envelope.getDeliveryTag(), false);
}
@Override
public void handleConsumeOk(String consumerTag) {
System.out.println("handleConsumeOk "+consumerTag);
}
@Override
public void handleCancelOk(String consumerTag) {
System.out.println("handleCancelOk "+consumerTag);
}
@Override
public void handleCancel(String consumerTag) throws IOException {
System.out.println("handleCancel "+consumerTag);
}
@Override
public void handleShutdownSignal(String consumerTag, ShutdownSignalException sig) {
System.out.println("handleShutdownSignal "+consumerTag);
}
@Override
public void handleRecoverOk(String consumerTag) {
System.out.println("handleRecoverOk "+consumerTag);
}
});
TimeUnit.SECONDS.sleep(10);
channel.close();
conn.close();
}
}
(場合など)、などの消費者や消費者のキューしなければならないのいずれか2、そうでない場合、消費者だけで別のメッセージを受信しない、メッセージを受信することができます
最初の二つは消費されている開始、生産が再開されます