rabbitmq实践小案例

创建rocketmq实例

使用下面的语句在阿里云linux上创建一个rabbitmq docker实例。

bash 复制代码
docker run \
 -e RABBITMQ_DEFAULT_USER=itheima \
 -e RABBITMQ_DEFAULT_PASS=123321 \
 -v mq-plugins:/plugins \
 --name mq \
 --hostname mq \
 -p 15672:15672 \
 -p 5672:5672 \
 --network hmall \
 -d \
 rabbitmq:3.8-management

控制台介绍

1、首次访问需要登录,默认的用户名和密码在配置文件中已经指定了。(即上面的docker命令指定了)

2、点击Admin选项卡,首先会看到RabbitMQ控制台的用户管理界面: 这里的用户都是RabbitMQ的管理或运维人员。目前只有安装RabbitMQ时添加的itheima这个用户。仔细观察用户表格中的字段,如下:

  • Nameitheima,也就是用户名

  • Tagsadministrator,说明itheima用户是超级管理员,拥有所有权限

  • Can access virtual host/,可以访问的virtual host,这里的/是默认的virtual host 首先我们需要在rabbitmq的控制台上去创建用户(hmall),虚拟主机(/hmall),队列(simple.quue)用于显示。

创建用户+vitural host+queue

1、现在为黑马商城项目创建一个新的用户,命名为hmall

你会发现此时hmall用户没有任何virtual host的访问权限:

我们先退出登录: 切换到刚刚创建的hmall用户登录,然后点击Virtual Hosts菜单,进入virtual host管理页:

可以看到目前只有一个默认的virtual host,名字为 /

2、我们可以给黑马商城项目创建一个单独的virtual host,而不是使用默认的/

切换到刚刚创建的hmall用户登录,然后点击Virtual Hosts菜单,进入virtual host管理页:

由于我们是登录hmall账户后创建的virtual host,因此回到users菜单,你会发现当前用户已经具备了对/hmall这个virtual host的访问权限了

3、点击页面右上角的virtual host下拉菜单,切换virtual host/hmall: 然后再次查看queues选项卡,若之前在虚拟主机/中创建过queue,会发现之前的队列已经看不到了:这就是基于virtual host的隔离效果。

idea中配置

rabbitmq一般用于微服务项目,故而我们一般会有一个父工程,再创建多个子工程;故我们的demo包含了几部分:

包括三部分:

  • mq-demo:父工程,管理项目依赖

  • publisher:消息的发送者

  • consumer:消息的消费者

必要的配置

除了要再父工程的pom.xml中引入amqp依赖:spring-boot-starter-amqp( 这是 SpringBoot 整合 RabbitMQ 的核心依赖包 )

我们还要在application.yml中去配置rabbitmq的相关信息:

bash 复制代码
#发送方的application.yml配置
spring:
  rabbitmq:
    host: 服务器ip
    port: 5672
    virtual-host: /hmall
    username: hmall
    password: 123
    
#接收方的application.yml配置
spring:
  rabbitmq:
    host: 服务器ip
    port: 5672
    virtual-host: /hmall
    username: hmall
    password: 123
    listener:
      simple:
        prefetch: 1

核心配置说明:

  • 虚拟主机(virtual-host)是 RabbitMQ 的重要隔离机制,不同项目可使用不同虚拟主机,避免队列名称冲突。

  • 消费者的prefetch配置是关键优化项,默认值较大时可能导致单个消费者积压大量消息,设置为 1 可实现消息的公平分发。

代码

publisher
bash 复制代码
@Autowired
    private RabbitTemplate rabbitTemplate;
​
    @Test
    void testSendMessage2Queue() {
        String queueName = "simple.queue";
        String msg = "hello, amqp!";
        rabbitTemplate.convertAndSend(queueName, msg);
    }
​

convertAndSend方法会自动将字符串、对象等数据转换为 MQ 可传输的字节流,简化了底层序列化操作。

该方法的第一个参数是队列名,第二个是消息内容,适用于最简单的 "直连队列" 场景。

consumer
java 复制代码
  @RabbitListener(queues = "simple.queue")
    public void listenSimpleQueue(String msg){
        System.out.println("消费者收到了simple.queue的消息:【" + msg +"】");
    }
​

@RabbitListener是 Spring 提供的注解式监听器,标注在方法上即可实现队列监听,无需手动编写循环监听逻辑。

方法参数会自动匹配消息类型(此处是 String),Spring 会自动完成反序列化。

消费者启动后会自动与 RabbitMQ 建立长连接,实时监听队列消息,消息到达后立即执行方法逻辑。

总结: 本文以微服务项目的父子工程结构为基础,完整介绍了 RabbitMQ 的实战使用流程: 首先通过 Docker 命令在阿里云 Linux 环境搭建 RabbitMQ 实例,然后再RabbitMq控制台完成相关操作(创建用户+vitrual host+queue),以及在代码层面上济宁相关的配置和简单的代码实现(直连方式下的消息发送和消费功能)。

相关推荐
禁默2 小时前
打破集群通信“内存墙”:手把手教你用 CANN SHMEM 重构 AIGC 分布式算子
分布式·重构·aigc
AC赳赳老秦2 小时前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
惊讶的猫4 小时前
rabbitmq初步介绍
分布式·rabbitmq
小镇敲码人4 小时前
华为CANN框架中HCCL仓库的全面解析:分布式通信的引擎
分布式·华为
User_芊芊君子5 小时前
【分布式训练】CANN SHMEM跨设备内存通信库:构建高效多机多卡训练的关键组件
分布式·深度学习·神经网络·wpf
酷酷的崽7985 小时前
CANN 开源生态解析(四):`cann-dist-train` —— 构建高效可扩展的分布式训练引擎
分布式·开源
惊讶的猫6 小时前
AMQP 与 RabbitMQ 四大模型
分布式·rabbitmq
灰子学技术6 小时前
istio从0到1:如何解决分布式配置同步问题
分布式·云原生·istio
小马爱打代码7 小时前
ZooKeeper:入门实战
分布式·zookeeper·云原生