一、简介:

  RabbitMq 是实现了高级消息队列协议(AMQP)的开源消息代理中间件。消息队列是一种应用程序对应用程序的通行方式,应用程序通过写消息,将消息传递于队列,由另一应用程序读取 完成通信。而作为中间件的 RabbitMq 无疑是目前最流行的消息队列之一。

RabbitMq 应用场景广泛:

  • 系统的高可用:日常生活当中各种商城秒杀,高流量,高并发的场景。当服务器接收到如此大量请求处理业务时,有宕机的风险。某些业务可能极其复杂,但这部分不是高时效性,不需要立即反馈给用户,我们可以将这部分处理请求抛给队列,让程序后置去处理,减轻服务器在高并发场景下的压力。
  • 分布式系统,集成系统,子系统之间的对接,以及架构设计中常常需要考虑消息队列的应用。

二、使用docker安装部署rabbitmq

1、使用前置环境

(1)Linux系统  

(2)已经安装好docker

2、查找镜像(有2种方式)

(1)登录rabbitmq官网找到docker镜像,选择想要的镜像的tag

  https://www.rabbitmq.com/download.html

  https://hub.docker.com/_/rabbitmq

  

  注:如果需要访问web管理页面,就选择tag为management的。

  注:带有alpine的是用最小linux镜像构建的,体积最小可以达5M初学者不建议这么折腾,而且 Alpine Linux使用了muslmusl实现的DNS服务不会使用resolv.conf文件中的search和domain两个配置,通过DNS来进行服务发现时需要注意。,带有-management的是带有web控制台

(2)直接用docker search 搜索带web管理页面的

[root@caicai ~]# docker search rabbitmq:management
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/macintoshplus/rabbitmq-management Based on rabbitmq:management whit python a... 6 [OK]
docker.io docker.io/xiaochunping/rabbitmq xiaochunping/rabbitmq:management 2018-06-30 4
docker.io docker.io/transmitsms/rabbitmq-sharded Fork of rabbitmq:management with sharded_e... 0
docker.io docker.io/yunyan2140/rabbitmq docker pull rabbitmq:management 0
[root@caicai ~]#

3、下载镜像(有时候网络问题超时,多尝试几次即可。选择可以访问web管理界面的tag)

sudo docker pull rabbitmq:management

4、创建容器并运行

docker run -dit --name rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:managemen

# 15672是管理界面的端口,5672是服务的端口。这里顺便将管理系统的用户名和密码设置为admin admin 默认账号和密码是guest guest

5、打开浏览器访问web界面

  输入  http://IP地址:15672   账号密码admin

  

三、RabbitMq 生产和消费

生产者(producter):队列消息的产生者,负责生产消息,并将消息传入队列

# -*- coding:utf-8 -*-
# @Time : 2020/9/7 14:43
# @Author: caijunchao
# @File : producter.py import pika
import json credentials = pika.PlainCredentials('guest', 'guest') # mq用户名和密码
# 虚拟队列需要指定参数 virtual_host,如果是默认的可以不填。
connection = pika.BlockingConnection(pika.ConnectionParameters(host = '121.40.35.209',port = 5672,virtual_host = '/',credentials = credentials))
channel=connection.channel()
# 声明消息队列,消息将在这个队列传递,如不存在,则创建
result = channel.queue_declare(queue = 'python-test') for i in range(10):
message=json.dumps({'OrderId':"1000%s"%i})
# 向队列插入数值 routing_key是队列名
channel.basic_publish(exchange = '',routing_key = 'python-test',body = message)
print(message)
connection.close()

消费者(consumer):队列消息的接收者,负责 接收并处理 消息队列中的消息

# -*- coding:utf-8 -*-
# @Time : 2020/9/7 14:43
# @Author: caijunchao
# @File : consumer.py
import pika credentials = pika.PlainCredentials('guest', 'guest')
connection = pika.BlockingConnection(pika.ConnectionParameters(host = '121.40.35.209',port = 5672,virtual_host = '/',credentials = credentials))
channel = connection.channel()
# 申明消息队列,消息在这个队列传递,如果不存在,则创建队列
channel.queue_declare(queue = 'python-test', durable = False)
# 定义一个回调函数来处理消息队列中的消息,这里是打印出来
def callback(ch, method, properties, body):
ch.basic_ack(delivery_tag = method.delivery_tag)
print(body.decode()) # 告诉rabbitmq,用callback来接收消息
channel.basic_consume('python-test',callback)
# 开始接收信息,并进入阻塞状态,队列里有信息才会调用callback进行处理
channel.start_consuming()

运行生产者代码,可以在web界面观察到任务列表

  然后运行消费者代码,队列任务清空

  

RabbitMq的部署(docker)和操作(python)详解的更多相关文章

  1. Python编程之列表操作实例详解【创建、使用、更新、删除】

    Python编程之列表操作实例详解[创建.使用.更新.删除] 这篇文章主要介绍了Python编程之列表操作,结合实例形式分析了Python列表的创建.使用.更新.删除等实现方法与相关操作技巧,需要的朋 ...

  2. Python字符串切片操作知识详解

    Python字符串切片操作知识详解 这篇文章主要介绍了Python中字符串切片操作 的相关资料,需要的朋友可以参考下 一:取字符串中第几个字符 print "Hello"[0] 表 ...

  3. 最佳实战Docker持续集成图文详解

    最佳实战Docker持续集成图文详解 这是一种真正的容器级的实现,这个带来的好处,不仅仅是效率的提升,更是一种变革:开发人员第一次真正为自己的代码负责——终于可以跳过运维和测试部门,自主维护运行环境( ...

  4. Docker Swarm 高可用详解

    Docker Swarm 高可用详解 Manager管理节点宕机后其他管理节点仍然可以使用管理 intermal distributed state store:内部分布式状态存储同步共享到每个节点. ...

  5. 【Big Data - Hadoop - MapReduce】通过腾讯shuffle部署对shuffle过程进行详解

    摘要: 通过腾讯shuffle部署对shuffle过程进行详解 摘要:腾讯分布式数据仓库基于开源软件Hadoop和Hive进行构建,TDW计算引擎包括两部分:MapReduce和Spark,两者内部都 ...

  6. Docker基础 :网络配置详解

    本篇文章将讲述 Docker 的网络功能,包括使用端口映射机制来将容器内应用服务提供给外部网络,以及通过容器互联系统让多个容器之间进行快捷的网络通信,有兴趣的可以了解下. 大量的互联网应用服务包含多个 ...

  7. 005-Scala数组操作实战详解

    005-Scala数组操作实战详解 Worksheet的使用 交互式命令执行平台 记得每次要保存才会出相应的结果 数组的基本操作 数组的下标是从0开始和Tuple不同 缓冲数组ArrayBuffer( ...

  8. ASP.NET 操作Cookie详解 增加,修改,删除

    ASP.NET 操作Cookie详解 增加,修改,删除 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密).定义于RFC2109.它 ...

  9. 在telnet下操作memcache详解(操作命令详解)

    这篇文章主要介绍了在telnet下操作memcache详解,telnet下的memcache操作命令详解,需要的朋友可以参考下 在定位问题.测试等时候经常需要对memcache的数据进行一些操作,但是 ...

  10. Spring Data操作Redis详解

    Spring Data操作Redis详解 Redis是一种NOSQL数据库,Key-Value形式对数据进行存储,其中数据可以以内存形式存在,也可以持久化到文件系统.Spring data对Redis ...

随机推荐

  1. gitee部署

    1.安装git 下载地址:https://npm.taobao.org/mirrors/git-for-windows/,拉到最下方选最新版,点击进去后选择对应windows版本的exe文件,默认安装 ...

  2. Zebra GT800标签打印机打印时脱机并亮红灯的故障处理

    Zebra GT800标签打印机打印时脱机并亮红灯的故障处理 打印测试正常,所有设置都正常,驱动原厂的,打印时只打印一点头,把所有的东西都测试了,花了1天半时间,该摸到的点都测了一般,甚至打算把这款打 ...

  3. Ubuntu 18.04 安装基本应用

    Ubuntu 谷歌浏览器下载:第一步打开终端,在终端输入下载命令wget https://dl.google.com/linux/direct/google-chrome-stable_current ...

  4. onnxruntime源码解析之C接口简介

    一.C接口 1. 简介 其他语言的接口都是在C接口的基础上,进一步的封装. C的接口头文件为:onnxruntime_c_api.h 头文件内包含了详细的注释和说明. 总体上,除了一些数据结构的定义, ...

  5. 什么是axios

    原文: https://blog.csdn.net/qq_40837310/article/details/123028044 1.使用格式和jquery的ajax很相似,和最初的相比可以链式调用,1 ...

  6. 【PyCharm】PyCharm设置深色背景

    操作步骤 1.依次点击File->Settings->Appearance&Behavior->Appearance 2.选择Theme为Darcula

  7. p标签设置行数,超出部分用省略号隐藏

    p { overflow: hidden; text-overflow: ellipsis; -webkit-line-clamp: 2; word-wrap: break-word; display ...

  8. elasticSearch(四)--结构化查询

    结构化查询 1.请求体查询 GET(POST) /_search POST /_search { "from": 30, "size": 10 } 2.DSL ...

  9. vw与百分比%的区别

    单位, vw:只和设备宽度有关系 %:有继承关系

  10. 2022.11.13 NOIP2022 模拟赛八

    「ROI 2017 Day 2」存储器 无聊的题. 首先 \(s\) 中每一个片段,其在 \(t\) 中对应的字符必然是相同的. 对于 \(t\) 中的每一个片段,考虑检查能否操作出这个片段,实际上只 ...