目录
一、在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.创建通道ChannelChannel channel = connection.createChannel();// 3.创建队列String queueName = "simple.queue";channel.queueDeclare(queueName, false, false, false, null);// 4.订阅消息channel.basicConsume(queueName, true, new DefaultConsumer(channel){@Overridepublic 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.创建通道ChannelChannel channel = connection.createChannel();// 3.创建队列String queueName = "simple.queue";channel.queueDeclare(queueName, false, false, false, null);// 4.订阅消息channel.basicConsume(queueName, true, new DefaultConsumer(channel){@Overridepublic 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将消费者与队列绑定
注意:
都有创建队列的原因是因为避免队列不存在;