为了使小伙伴们能够先有一个更直观的认识,再去理解RabbitmMQ的核心概念,直接上代码,用一个简单的实例来展示:
1、首先写一个生产端
package com.bfxy.rabbitmq.quickstart;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class Procuder {
public static void main(String[] args)throws Exception{
//1.创建连接工厂
ConnectionFactory connectionFactory =new ConnectionFactory();
connectionFactory.setHost("10.136.198.140");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/");
connectionFactory.setUsername("admin");
connectionFactory.setPassword("123456");
//2.通过连接工厂创建连接
Connection connection =connectionFactory.newConnection();
//3.通过连接创建channel
Channel channel = connection.createChannel();
//4 通过channle发送数据
for (int i=0;i<5;i++) {
String msg ="Hello RabbitMQ";
channel.basicPublish("", "test001", null, msg.getBytes());
}
//5 关闭连接
channel.close();
connection.close();
}
}
2、再写一个消费端
package com.bfxy.rabbitmq.quickstart;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.QueueingConsumer;
import com.rabbitmq.client.QueueingConsumer.Delivery;
public class Consumer {
public static void main(String[] args)throws Exception {
//1 创建一个ConnectionFactory, 并进行配置
ConnectionFactory connectionFactory =new ConnectionFactory();
connectionFactory.setHost("10.136.198.140");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/");
connectionFactory.setUsername("admin");
connectionFactory.setPassword("123456");
//2 通过连接工厂创建连接
Connection connection = connectionFactory.newConnection();
//3 通过connection创建一个Channel
Channel channel = connection.createChannel();
//4 声明(创建)一个队列
String queueName ="test001";
channel.queueDeclare(queueName, true, false, false, null);
//5 创建消费者
QueueingConsumer queueingConsumer =new QueueingConsumer(channel);
//6 设置Channel
channel.basicConsume(queueName, true, queueingConsumer);
while(true){
//7 获取消息
Delivery delivery = queueingConsumer.nextDelivery();
String msg =new String(delivery.getBody());
System.err.println("消费端: " + msg);
//Envelope envelope = delivery.getEnvelope();
}
}
}
整体代码结构如图
3、启动procuder类,观察RabbitMQ控制台
4、再启动消费端,观察开发工具控制台,再观察RabbitMQ控制台
总结:
1、生产者发送消息的过程:创建连接工厂-->创建连接-->建立信道-->发送消息内容
2、消费者接收消息的过程:创建连接工厂-->创建连接-->建立信道-->创建队列-->创建消费者-->设置信道-->消费消息内容
3、生产者只需关注交换机,消费者只需关注队列。(交换机和队列有一个绑定关系,可以在RabbitMQ控制进行设置)
4、生产者发送消息,必须指定交换机,如果没有指定,系统会默认发送到 AMQP default, 即默认的交换机,这个时候交换机和队列的绑定关系是:通过生产者指定的路由键去匹配这个交换机上队列名字和路由键一样的队列。