十六、RabbitMQ快速入门

目录

一、在centos上下载MQ镜像

二、安装运行容器

三、登录进入MQ

1、添加一个新的用户

2、新建虚拟机

[3、 为用户分配权限](#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中的几个概念:

  1. channel:操作MQ的工具;
  2. exchange:路由消息到队列中;
  3. queue:缓存消息;
  4. virtual host:虚拟主机,是对queue、exchange等资源的逻辑分组;

五、常见消息模型

六、简单的消息生产与消费

1、消费者类

java 复制代码
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、生产者类

java 复制代码
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、基本消息队列的消息发送流程:

  1. 建立connection
  2. 创建channel
  3. 利用channel声明队列
  4. 利用channel向队列发送消息

4、基本消息队列的消息接收流程:

  1. 建立connection
  2. 创建channel
  3. 利用channel声明队列
  4. 定义consumer的消费行为handleDelivery()
  5. 利用channel将消费者与队列绑定

注意:

都有创建队列的原因是因为避免队列不存在;

相关推荐
cc复CC4 小时前
从零开始手写 Spark 03|RDD 的惰性流水线
分布式
cc复CC4 小时前
从零开始手写 Spark 02|数据流与延迟迭代
大数据·分布式
七夜zippoe5 小时前
基于 DolphinDB 构建分布式集群:从节点配置到高可用部署的完整实践
分布式·集群·dolphindb·节点配置·高可用部署
Acrellea6 小时前
并网验收难破局:分布式光伏如何攻克孤岛、逆流两大技术关卡
分布式
heimeiyingwang6 小时前
【架构实战】消息队列选型与异步架构设计:从Kafka到RabbitMQ,一次聊透
架构·kafka·rabbitmq
杨运交16 小时前
[060][调度模块]Redisson vs Redis 原生锁:两种分布式锁实现深度对比
数据库·redis·分布式
heimeiyingwang21 小时前
【架构实战】分布式事务:从CAP定理到Seata实战,一文讲透跨服务数据一致性
分布式·架构
lakernote1 天前
图解 Kafka Consumer 常用 API:poll、seek、pause、wakeup 到底在控制什么?
分布式·kafka·linq
水无痕simon1 天前
6、六大工作模式-2
java·rabbitmq
lazy H1 天前
不同的消息队列有什么区别?Kafka、RabbitMQ、RocketMQ、Pulsar、ActiveMQ 选型对比
后端·中间件·kafka·rabbitmq·rocketmq