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()
posted @ 2022-07-07 10:03  tangshow  阅读(662)  评论(0编辑  收藏  举报