rabbitmq简单搭建并测试
简单搭建并测试rabbitmq
使用容器搭建
docker pull rabbitmq
docker run -id --hostname myrabbit --name rabbitmq1 -p 15672:15672 -p 5672:5672 rabbitmq
15672用于页面访问使用
5672用于生产和消费端使用(代码用)
进入容器下载插件,开启管理功能
docker exec -it rabbitmq /bin/bssh
运行:rabbitmq-plugins enable rabbitmq_management
浏览器访问
登录管理页面:http://ip:15672
添加用户
删除guest用户
python代码测试
1生产者代码
import pika
import time
#传入数据到队列
def test_in(message):
#1 连接rabitmq服务器
user = pika.PlainCredentials('xx','xx') #账号 密码
connection=pika.BlockingConnection(pika.ConnectionParameters('192.168.2.199', credentials = user,virtual_host='myvhost1'))
#virtual_host = 'myvhost1' 自定义的vhost 默认使用/时不需要指定
channel=connection.channel()
#2、创建一个队列
channel.queue_declare(queue='iid', durable = True)
# 声明队列,不存在则创建,存在则连接.
# queue:队列名 ,durable:是否持久化
#q = channel.queue_declare(queue='iid', durable=True)
#print(q.method.message_count) # 获取队列长度
channel.basic_publish(exchange='',
#exchange为空就使用默认的交换机
routing_key='iid',
# 队列名
body=message,
# 需要存储的数据
properties=pika.BasicProperties(delivery_mode=2))
## 持久化队列.delivery_mode参数控制消息是否持久化, delivery_mode = 2表示消息持久化
print("发送:‘{}’到MQ成功".format(message))
connection.close()
while True:
test_in("mq-" + str(time.time()))
time.sleep(1)
2消费者代码
### 从队列获取数据
import pika
import time
# 1、连接rabbitmq服务器
credentials = pika.PlainCredentials('xx', 'xx') # 账号 密码
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.2.199', credentials=credentials, virtual_host='myvhost1'))
# virtual_host = 'myvhost1' 自定义的vhost 默认使用/时不需要指定
channel = connection.channel()
q = channel.queue_declare(queue='iid', durable=True)
print(q.method.message_count)
#print(channel.basic_get(queue='iid'))
# 一旦有消息就执行该回调函数(比如减库存操作就在这里面)
def execrun(ch, method, properties, body):
getbody = body.decode()
print(getbody)
print("-")
time.sleep(0.3)
# 数据处理完成,MQ收到这个应答就会删除消息
ch.basic_ack(delivery_tag=method.delivery_tag)
# 消费者这边监听的队列是image,一旦有值出现,则触发回调函数:callback
channel.basic_consume(queue='iid',
auto_ack=False, # 默认就是False,手动应答
on_message_callback=execrun,
)
print('当前MQ简单模式正在等待生产者往消息队列塞消息.......要退出请按 CTRL+C.......')
# 开始接收(将数据放入回调函数开始执行)
channel.start_consuming()