十六、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将消费者与队列绑定

注意:

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

相关推荐
Wang's Blog1 天前
RabbitMQ: 消息发送、连接管理、消息封装与三种工程方案
linux·ubuntu·rabbitmq
ChaITSimpleLove1 天前
基于 .NET Garnet 1.0.91 实现高性能分布式锁(使用 Lua 脚本)
分布式·.net·lua
原神启动12 天前
Kafka详解
分布式·kafka
yumgpkpm2 天前
Iceberg在Hadoop集群使用步骤(适配AI大模型)
大数据·hadoop·分布式·华为·zookeeper·开源·cloudera
元气满满-樱2 天前
分布式LNMP部署
分布式
Wang's Blog2 天前
RabbitMQ: 声明式配置简化管理
分布式·rabbitmq
叫致寒吧2 天前
zookeeper与kafka
分布式·zookeeper·云原生
赵得C2 天前
2025下半年软件设计师考前几页纸
java·开发语言·分布式·设计模式·性能优化·软考·软件设计师
爱学大树锯2 天前
在Docker环境中安装RabbitMQ延迟消息插件实战记录
docker·容器·rabbitmq
西***63472 天前
全场景覆盖・全流程智控:分布式解决方案让多功能厅 “不止于多”
分布式