目录
一、在centos上下载MQ镜像
二、安装运行容器
三、登录进入MQ
1、添加一个新的用户
2、新建虚拟机
3、 为用户分配权限
四、RabbitMQ的基本概念
RabbitMQ中的几个概念:
五、常见消息模型
六、简单的消息生产与消费
1、消费者类
2、生产者类
3、基本消息队列的消息发送流程:
4、基本消息队列的消息接收流程:
一、在centos上下载MQ镜像
docker pull rabbitmq:3-management 
二、安装运行容器
docker run \
 -e RABBITMQ_DEFAULT_USER=itcast \
 -e RABBITMQ_DEFAULT_PASS=123456 \
 --name mq \
 --hostname mq1 \
 -p 15672:15672 \
 -p 5672:5672 \
 -d \
 rabbitmq:3-management 
三、登录进入MQ

1、添加一个新的用户

2、新建虚拟机

3、 为用户分配权限
四、RabbitMQ的基本概念

- Publisher是消息的发送者,负责将消息发送到交换机;
 - 交换机负责路由,将消息暂存到消息队列;
 - 队列负责暂存消息;
 - 消费者从队列获取消息,然后处理消息;
 - 每个虚拟主机相互之间是隐藏的,避免干扰;
 
RabbitMQ中的几个概念:
- channel:操作MQ的工具;
 - exchange:路由消息到队列中;
 - queue:缓存消息;
 - virtual host:虚拟主机,是对queue、exchange等资源的逻辑分组;
 
五、常见消息模型

六、简单的消息生产与消费
1、消费者类
package cn.itcast.mq.helloworld;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class ConsumerTest {
    public static void main(String[] args) throws IOException, TimeoutException {
        // 1.建立连接
        ConnectionFactory factory = new ConnectionFactory();
        // 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码
        factory.setHost("192.168.248.152");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("itcast");
        factory.setPassword("123456");
        // 1.2.建立连接
        Connection connection = factory.newConnection();
        // 2.创建通道Channel
        Channel channel = connection.createChannel();
        // 3.创建队列
        String queueName = "simple.queue";
        channel.queueDeclare(queueName, false, false, false, null);
        // 4.订阅消息
        channel.basicConsume(queueName, true, new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                                       AMQP.BasicProperties properties, byte[] body) throws IOException {
                // 5.处理消息
                String message = new String(body);
                System.out.println("接收到消息:【" + message + "】");
            }
        });
        System.out.println("等待接收消息。。。。");
    }
}
 
2、生产者类
package cn.itcast.mq.helloworld;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class ConsumerTest {
    public static void main(String[] args) throws IOException, TimeoutException {
        // 1.建立连接
        ConnectionFactory factory = new ConnectionFactory();
        // 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码
        factory.setHost("192.168.248.152");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("itcast");
        factory.setPassword("123456");
        // 1.2.建立连接
        Connection connection = factory.newConnection();
        // 2.创建通道Channel
        Channel channel = connection.createChannel();
        // 3.创建队列
        String queueName = "simple.queue";
        channel.queueDeclare(queueName, false, false, false, null);
        // 4.订阅消息
        channel.basicConsume(queueName, true, new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                                       AMQP.BasicProperties properties, byte[] body) throws IOException {
                // 5.处理消息
                String message = new String(body);
                System.out.println("接收到消息:【" + message + "】");
            }
        });
        System.out.println("等待接收消息。。。。");
    }
}
 
3、基本消息队列的消息发送流程:
- 建立connection
 - 创建channel
 - 利用channel声明队列
 - 利用channel向队列发送消息
 
4、基本消息队列的消息接收流程:
- 建立connection
 - 创建channel
 - 利用channel声明队列
 - 定义consumer的消费行为handleDelivery()
 - 利用channel将消费者与队列绑定
 
注意:
都有创建队列的原因是因为避免队列不存在;







![2023年中国聚氨酯树脂涂料需求量、市场规模及行业趋势分析[图]](https://img-blog.csdnimg.cn/img_convert/23b79af19c919003a219a25dd00619c9.png)















