RabbitMQ安装

镜像检索以及下载

使用docker的搜索命令docker search rabbitmq在docker仓库中搜索RabbitMQ ,会搜索到如下结果:
WX20220823-161844.png

下载命令:docker pull rabbitmq:management
rabbitmq:management 指定了安装rabbitmq的Web管理插件版本,这样就不用再进入容器内部开启插件了
WX20220823-162403.png

查看我们下载的镜像:docker images
WX20220823-162455.png

启动RabbitMQ

docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -v `pwd`/opt/rabbitmq:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin 这里放你MQ的IMAGE ID

WX20220823-162823.png

  • -d 表示的是后台运行容器
  • --name 给容器指定名字。这个是给自己看的,docker ps的时候展示的名字
  • 第一个 -p 指定的是服务运行的端口。(提供服务的端口)
  • 第二个 -p 指定的是web管理端的端口。接下来会看到管理端的界面
  • -v 映射目录或者文件。这里是把你当前所在目录下的/opt/rabbitmq文件夹映射到容器的/var/lib/rabbitmq
  • --hostname 指定主机名称。该名称在集群的名称中使用
  • -e 指定环境变量
  • RABBITMQ_DEFAULT_VHOST:默认虚拟机名
  • RABBITMQ_DEFAULT_USER:默认的用户名
  • RABBITMQ_DEFAULT_PASS:默认用户名的密码

注意:

  • 服务端口与web端口指定的顺序不重要,前后颠倒也是可以的。因为docker内部RabbitMQ的端口是固定的
  • 命令中的pwd相当于是一个变量取值的操作,与$的能力类似,但是用途不太一样。其实就是执行了pwd的命令,然后把结果替换掉pwd。如果我说的不明白可以看看这里
  • 最好是确保你的主机目录下有你指定的映射目录、容器中的无所谓,会自动创建
  • RabbitMQ的hostname 最好指定。Rabbit MQ的有一个重要的注意事项是它根据节点名称来存储数据,默认就是主机名、而上面说道hostname就是集群中的节点名称。如果不指定hostname,那么docker在启动的时候会自动生成hostname,如此一来可能每次生成的hostname都不一样,那么就会导致数据丢失

查看是否启动成功

使用命令docker ps查看一下是否启动成功了,可以看到我们指定的名字 rabbitmq 已经起来了
WX20220823-163449.png
也可以直接访问http://ip:15672查看管理界面能否打开。

如果启动失败了,使用命令docker logs 复制的CONTAINER ID来查看时什么问题

简单使用

发送数据:
如果生成多个的话,实现效果是轮询发送,一个一个循环发送数据,如同“皇帝轮流做…”

import pika

#建立连接
userx=pika.PlainCredentials("admin","admin")
conn=pika.BlockingConnection(pika.ConnectionParameters("10.10.10.235",5672,'my_vhost',credentials=userx))

#开辟管道
channelx=conn.channel()

#声明队列,参数为队列名
channelx.queue_declare(queue="MQtest")

#发送数据,发送一条,如果要发送多条则复制此段
for i in range(1000000):
    channelx.basic_publish(exchange="",
                           routing_key="MQtest",  # 队列名
                           body="hello world" # 发送的数据
                           )
print("--------发送数据完成-----------")

#关闭连接
conn.close()

接收数据:

import pika

#建立连接
userx=pika.PlainCredentials("admin","admin")
conn=pika.BlockingConnection(pika.ConnectionParameters("10.10.10.235",5672,'my_vhost',credentials=userx))

#开辟管道
channelx=conn.channel()

#声明队列,参数为队列名
channelx.queue_declare(queue="MQtest")

#消息处理函数,执行完成才说明接收完成,此时才可以接收下一条,串行
def dongcallbackfun(v1,v2,v3,bodyx):

    print("得到的数据为:",bodyx)

#接收准备
channelx.basic_consume(queue="MQtest", #队列名
                       on_message_callback=dongcallbackfun, #收到消息的回调函数
                       auto_ack=True #是否发送消息确认
                       )
print("-------- 开始接收数据 -----------")

#开始接收消息
channelx.start_consuming()
最后修改:2022 年 08 月 23 日
如果觉得我的文章对你有用,请随意赞赏