百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

如何通过Docker搭建一套RabbitMQ的测试环境?

lipiwang 2024-12-02 22:04 10 浏览 0 评论

RabbitMQ是一款功能强大的消息队列中间件,被用在分布式系统中用来进行多个系统之间的消息交换操作,为了更好的学些RabbitMQ的相关操作,我们需要构建对应的RabbitMQ的环境,但是对于初学者来讲,按照官网上的那一套方案去搭建RabbitMQ的环境有点复杂,与此同时,我们使用RabbitMQ主要还是学习编程语言的使用,所以这里笔者建议通过Docker来搭建RabbitMQ的测试环境。

前置条件

在开始RabbitMQ的环境搭建之前,首先需要确保在服务器环境上安装了Docker以及Docker Compose,如果没有可以参考笔者之前的博客如何安装Docker

安装完成之后,接下来我们就来看看如何在通过Docker安装RabbitMQ的测试环境。

拉取RabbitMQ镜像

首先,我们需要从Docker Hub拉取RabbitMQ官方镜像,如下所示。

docker pull rabbitmq:3-management

这个官方的镜像包含了Rabbit MQ的核心功能以及他内置的一个管理页面,相比于自己安装的话,要方便很多,尤其在测试环境中通过这种方式可以减少很多的工作量。

启动RabbitMQ容器

获取完成镜像之后,我们就可以创建一个简单的测试容器来启动Rabbit MQ。如下所示。

docker run -d --name rabbitmq-test \
  -p 5672:5672 \
  -p 15672:15672 \
  rabbitmq:3-management
  • --name rabbitmq-test:为容器指定一个名称。
  • -p 5672:5672:映射 RabbitMQ 的 AMQP 协议默认端口。
  • -p 15672:15672:映射管理界面默认端口。
  • rabbitmq:3-management:使用带管理界面的镜像。

执行完成之后,我们可以通过下面的命令来检查容器的运行状态。

docker ps

如果一切运行正常,就可以在http://localhost:15672地址上访问到对应的Rabbit MQ管理界面,然后AMQP应该在localhost:5672接口上启动监听。通过http://localhost:15672使用guest用户名密码登录之后,我们就可以看到RabbitMQ 的控制面板,包括队列、交换器、绑定、连接等信息。

通过Docker Compose配置RabbitMQ

当然为了方便对Rabbit MQ进行管理,我们可以通过Docker Compose来定义一套RabbitMQ的服务,我们可以创建一个docker-compose.yml文件,在文件中添加如下的内容,用来进行Rabbit MQ的管理。

version: '3.8'
services:
  rabbitmq:
    image: rabbitmq:3-management
    container_name: rabbitmq-test
    ports:
      - "5672:5672"
      - "15672:15672"
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq
    environment:
      RABBITMQ_DEFAULT_USER: admin
      RABBITMQ_DEFAULT_PASS: admin123

volumes:
  rabbitmq_data:
  • ports:暴露 AMQP 和管理界面的端口。
  • volumes:将 RabbitMQ 数据持久化到本地,避免容器重启后数据丢失。
  • environment:配置默认用户名和密码。

启动服务

我们可以通过如下的命令来启动Rabbit MQ的服务。

docker-compose up -d

然后通过如下的命令来查看容器运行的状态。

docker-compose ps

管理界面访问方式和前面一样,但用户名和密码已更改为admin和admin123。

测试RabbitMQ功能

RabbitMQ采用的是AMQP协议,我们可以通过Python的pika、Java的spring-rabbit来进行连接的测试工作。下面我们就来通过一个Python的示例来测试RabbitMQ是否创建正常。

import pika

# 连接到 RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()

# 创建队列
channel.queue_declare(queue='test_queue')

# 发送消息
channel.basic_publish(exchange='',
                      routing_key='test_queue',
                      body='Hello, RabbitMQ!')

print(" [x] Sent 'Hello, RabbitMQ!'")

# 关闭连接
connection.close()

运行以上代码后,可以在管理界面的队列中看到test_queue 收到了消息。说明整个的环境已经搭建正常了。

清理环境

完成相关的测试学习之后,我们可以通过如下的命令来删除容器

docker-compose down

如果在项目中没有用到Docker Compose,我们可以通过手动的方式来停止并且删除容器。

docker stop rabbitmq-test
docker rm rabbitmq-test

总结

通过上面的操作,我们就实现了使用Docker部署Rabbit MQ的测试环境的操作,并且配置了数据管理页面以及数据持久化服务操作,不管是通过Docker还是通过Docker Compose,都可以快速的启动并且使用这个RabbitMQ,如果想要进一步的学习RabbitMQ的其他的例如消息路由、TTL 设置、死信队列等操作,我们可以通过Docker部署更多的节点来实现模拟集群的测试。这种方式对于初学者比较友好,有兴趣的读者可以深入进行研究,遇到什么问题可以在评论区留言讨论。

相关推荐

前端入门——css 网格轨道详细介绍

上篇前端入门——cssGrid网格基础知识整体大概介绍了cssgrid的基本概念及使用方法,本文将介绍创建网格容器时会发生什么?以及在网格容器上使用行、列属性如何定位元素。在本文中,将介绍:...

Islands Architecture(孤岛架构)在携程新版首页的实践

一、项目背景2022,携程PC版首页终于迎来了首次改版,完成了用户体验与技术栈的全面升级。作为与用户连接的重要入口,旧版PC首页已经陪伴携程走过了22年,承担着重要使命的同时,也遇到了很多问题:维护/...

HTML中script标签中的那些属性

HTML中的<script>标签详解在HTML中,<script>标签用于包含或引用JavaScript代码,是前端开发中不可或缺的一部分。通过合理使用<scrip...

CSS 中各种居中你真的玩明白了么

页面布局中最常见的需求就是元素或者文字居中了,但是根据场景的不同,居中也有简单到复杂各种不同的实现方式,本篇就带大家一起了解下,各种场景下,该如何使用CSS实现居中前言页面布局中最常见的需求就是元...

CSS样式更改——列表、表格和轮廓

上篇文章主要介绍了CSS样式更改篇中的字体设置Font&边框Border设置,这篇文章分享列表、表格和轮廓,一起来看看吧。1.列表List1).列表的类型<ulstyle='list-...

一文吃透 CSS Flex 布局

原文链接:一文吃透CSSFlex布局教学游戏这里有两个小游戏,可用来练习flex布局。塔防游戏送小青蛙回家Flexbox概述Flexbox布局也叫Flex布局,弹性盒子布局。它决定了...

css实现多行文本的展开收起

背景在我们写需求时可能会遇到类似于这样的多行文本展开与收起的场景:那么,如何通过纯css实现这样的效果呢?实现的难点(1)位于多行文本右下角的展开收起按钮。(2)展开和收起两种状态的切换。(3)文本...

css 垂直居中的几种实现方式

前言设计是带有主观色彩的,同样网页设计中的css一样让人摸不头脑。网上列举的实现方式一大把,或许在这里你都看到过,但既然来到这里我希望这篇能让你看有所收获,毕竟这也是前端面试的基础。实现方式备注:...

WordPress固定链接设置

WordPress设置里的最后一项就是固定链接设置,固定链接设置是决定WordPress文章及静态页面URL的重要步骤,从站点的SEO角度来讲也是。固定链接设置决定网站URL,当页面数少的时候,可以一...

面试发愁!吃透 20 道 CSS 核心题,大厂 Offer 轻松拿

前端小伙伴们,是不是一想到面试里的CSS布局题就发愁?写代码时布局总是对不齐,面试官追问兼容性就卡壳,想跳槽却总被“多列等高”“响应式布局”这些问题难住——别担心!从今天起,咱们每天拆解一...

3种CSS清除浮动的方法

今天这篇文章给大家介绍3种CSS清除浮动的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。首先,这里就不讲为什么我们要清楚浮动,反正不清除浮动事多多。下面我就讲3种常用清除浮动的...

2025 年 CSS 终于要支持强大的自定义函数了?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!1.什么是CSS自定义属性CSS自...

css3属性(transform)的一个css3动画小应用

闲言碎语不多讲,咱们说说css3的transform属性:先上效果:效果说明:当鼠标移到a标签的时候,从右上角滑出二维码。实现方法:HTML代码如下:需要说明的一点是,a链接的跳转需要用javasc...

CSS基础知识(七)CSS背景

一、CSS背景属性1.背景颜色(background-color)属性值:transparent(透明的)或color(颜色)2.背景图片(background-image)属性值:none(没有)...

CSS 水平居中方式二

<divid="parent"><!--定义子级元素--><divid="child">居中布局</div>...

取消回复欢迎 发表评论: