發佈訂閱
生產者
public class ProducerFanout {
private static final String EXCHANGE_NAME = "fanout_exchange";
public static void main(String[] args) throws IOException, TimeoutException {
// 1.創建新的連接
Connection connection = MQConnectionUtils.newConnection();
// 2.創建通道
Channel channel = connection.createChannel();
// 3.綁定的交換機 參數1交互機名稱 參數2 exchange類型
channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
String msg = "fanout_exchange_msg";
// 4.發送消息
channel.basicPublish(EXCHANGE_NAME, "", null, msg.getBytes());
// System.out.println("生產者發送msg:" + msg);
// // 5.關閉通道、連接
// channel.close();
// connection.close();
// 注意:如果消費沒有綁定交換機和隊列,則消息會丟失
}
}
郵件消費者
public class ConsumerEmailFanout {
private static final String QUEUE_NAME = "consumerFanout_email";
private static final String EXCHANGE_NAME = "fanout_exchange";
public static void main(String[] args) throws IOException, TimeoutException {
System.out.println("郵件消費者啓動");
// 1.創建新的連接
Connection connection = MQConnectionUtils.newConnection();
// 2.創建通道
Channel channel = connection.createChannel();
// 3.消費者關聯隊列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 4.消費者綁定交換機 參數1 隊列 參數2交換機 參數3 routingKey
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");
DefaultConsumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
throws IOException {
String msg = new String(body, "UTF-8");
System.out.println("消費者獲取生產者消息:" + msg);
}
};
// 5.消費者監聽隊列消息
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}
短信消費者
public class ConsumerSMSFanout {
private static final String QUEUE_NAME = "ConsumerFanout_sms";
private static final String EXCHANGE_NAME = "fanout_exchange";
public static void main(String[] args) throws IOException, TimeoutException {
System.out.println("短信消費者啓動");
// 1.創建新的連接
Connection connection = MQConnectionUtils.newConnection();
// 2.創建通道
Channel channel = connection.createChannel();
// 3.消費者關聯隊列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 4.消費者綁定交換機 參數1 隊列 參數2交換機 參數3 routingKey
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");
DefaultConsumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
throws IOException {
String msg = new String(body, "UTF-8");
System.out.println("消費者獲取生產者消息:" + msg);
}
};
// 5.消費者監聽隊列消息
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}
路由模式
生產者
public class ProducerDirect {
private static final String EXCHANGE_NAME = "direct_exchange";
public static void main(String[] args) throws IOException, TimeoutException {
// 1.創建新的連接
Connection connection = MQConnectionUtils.newConnection();
// 2.創建通道
Channel channel = connection.createChannel();
// 3.綁定的交換機 參數1交互機名稱 參數2 exchange類型
channel.exchangeDeclare(EXCHANGE_NAME, "direct");
String routingKey = "info";
String msg = "direct_exchange_msg" + routingKey;
// 4.發送消息
channel.basicPublish(EXCHANGE_NAME, routingKey, null, msg.getBytes());
System.out.println("生產者發送msg:" + msg);
// // 5.關閉通道、連接
// channel.close();
// connection.close();
// 注意:如果消費沒有綁定交換機和隊列,則消息會丟失
}
}
郵件消費者
public class ConsumerEmailDirect {
private static final String QUEUE_NAME = "consumer_direct_email";
private static final String EXCHANGE_NAME = "direct_exchange";
public static void main(String[] args) throws IOException, TimeoutException {
System.out.println("郵件消費者啓動");
// 1.創建新的連接
Connection connection = MQConnectionUtils.newConnection();
// 2.創建通道
Channel channel = connection.createChannel();
// 3.消費者關聯隊列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 4.消費者綁定交換機 參數1 隊列 參數2交換機 參數3 routingKey
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "error");
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "info");
DefaultConsumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
throws IOException {
String msg = new String(body, "UTF-8");
System.out.println("消費者獲取生產者消息:" + msg);
}
};
// 5.消費者監聽隊列消息
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}
短信消費者
public class ConsumerSMSDirect {
private static final String QUEUE_NAME = "consumer_direct_sms";
private static final String EXCHANGE_NAME = "direct_exchange";
public static void main(String[] args) throws IOException, TimeoutException {
System.out.println("短信消費者啓動");
// 1.創建新的連接
Connection connection = MQConnectionUtils.newConnection();
// 2.創建通道
Channel channel = connection.createChannel();
// 3.消費者關聯隊列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 4.消費者綁定交換機 參數1 隊列 參數2交換機 參數3 routingKey
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "error");
DefaultConsumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
throws IOException {
String msg = new String(body, "UTF-8");
System.out.println("消費者獲取生產者消息:" + msg);
}
};
// 5.消費者監聽隊列消息
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}
主題模式
生產者
public class ProducerDirect {
private static final String EXCHANGE_NAME = "topic_exchange";
public static void main(String[] args) throws IOException, TimeoutException {
// 1.創建新的連接
Connection connection = MQConnectionUtils.newConnection();
// 2.創建通道
Channel channel = connection.createChannel();
// 3.綁定的交換機 參數1交互機名稱 參數2 exchange類型
channel.exchangeDeclare(EXCHANGE_NAME, "topic");
String routingKey = "log.info.error";
String msg = "topic_exchange_msg" + routingKey;
// 4.發送消息
channel.basicPublish(EXCHANGE_NAME, routingKey, null, msg.getBytes());
System.out.println("生產者發送msg:" + msg);
// // 5.關閉通道、連接
channel.close();
connection.close();
// 注意:如果消費沒有綁定交換機和隊列,則消息會丟失
}
}
郵件消費者
public class ConsumerEmailDirect {
private static final String QUEUE_NAME = "consumer_topic_email";
private static final String EXCHANGE_NAME = "topic_exchange";
public static void main(String[] args) throws IOException, TimeoutException {
System.out.println("郵件消費者啓動");
// 1.創建新的連接
Connection connection = MQConnectionUtils.newConnection();
// 2.創建通道
Channel channel = connection.createChannel();
// 3.消費者關聯隊列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "log.#");
// 4.消費者綁定交換機 參數1 隊列 參數2交換機 參數3 routingKey
DefaultConsumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
throws IOException {
String msg = new String(body, "UTF-8");
System.out.println("消費者獲取生產者消息:" + msg);
}
};
// 5.消費者監聽隊列消息
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}
短信服務器
public class ConsumerSMSDirect {
private static final String QUEUE_NAME = "consumer_topic_sms";
private static final String EXCHANGE_NAME = "topic_exchange";
public static void main(String[] args) throws IOException, TimeoutException {
System.out.println("短信消費者啓動");
// 1.創建新的連接
Connection connection = MQConnectionUtils.newConnection();
// 2.創建通道
Channel channel = connection.createChannel();
// 3.消費者關聯隊列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 4.消費者綁定交換機 參數1 隊列 參數2交換機 參數3 routingKey
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "log.*");
DefaultConsumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
throws IOException {
String msg = new String(body, "UTF-8");
System.out.println("消費者獲取生產者消息:" + msg);
}
};
// 5.消費者監聽隊列消息
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}