rabbitmq配置與簡單使用


一、在windos中安裝配置rabbitmq

本次使用rabbitmq作為broker,不設后端backend

rabbitmq在4.0之后不支持windows使用,可以下載老版本的在本地windows使用。

http://erlang.org/download/otp_win64_17.3.exe  先下載安裝erlang語言 

https://www.rabbitmq.com/download.html 再下載rabbitmq 我在本地下載的3.5.8版本

 部分RabbitMQ版本可能與erlang語言版本不適配而導致不能使用

安裝好后默認的http訪問端口為15672

amqp端口為5672

http://localhost:15672

默認用戶名密碼

guest guest

 

二、用docker啟動rabbitmq

2.在docker中啟動

docker run -d --hostname localhost --name myrabbit -p 15672:15672 -p 5672:5672 rabbitmq:3.6.15-management

啟動帶有web頁面的rabbitmq

-d 后台進程運行
hostname RabbitMQ主機名稱
name 容器名稱
-p port:port 本地端口:容器端口
-p 15672:15672 http訪問端口
-p 5672:5672 amqp訪問端口

http只能用宿主ip+端口進行訪問
ampq 可以用localhost和宿主ip都訪問

http://localhost:15672

默認用戶名密碼

guest guest

 

三、使用RabbitMQ

receive.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import pika
import time

hostname = 'localhost'
parameters = pika.ConnectionParameters(hostname)
connection = pika.BlockingConnection(parameters)

# 創建通道
channel = connection.channel()
channel.queue_declare(queue='task_queue1',durable=True)


def callback(ch, method, properties, body):
    print " [x] Received %r" % (body,)

    time.sleep(2)
    print " [x] Done"
    ch.basic_ack(delivery_tag=method.delivery_tag)

# basic_qos設置prefetch_count=1,使得rabbitmq不會在同一時間給工作者分配多個任務,
# 即只有工作者完成任務之后,才會再次接收到任務。
channel.basic_qos(prefetch_count=1)

# 告訴rabbitmq使用callback來接收信息
channel.basic_consume('task_queue1', callback)

# 開始接收信息,並進入阻塞狀態,隊列里有信息才會調用callback進行處理,按ctrl+c退出
print ' [*] Waiting for messages. To exit press CTRL+C'
channel.start_consuming()

pycharm終端中啟動 python receive.py

send1.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import pika
import random

hostname = 'localhost'
parameters = pika.ConnectionParameters(hostname)
connection = pika.BlockingConnection(parameters)

# 創建通道
channel = connection.channel()
# 如果rabbitmq自身掛掉的話,那么任務會丟失。所以需要將任務持久化存儲起來,聲明持久化存儲:
channel.queue_declare(queue='task_queue1', durable=True)

number = random.randint(1, 1000)
message = 'hello world:%s' % number

# 在發送任務的時候,用delivery_mode=2來標記任務為持久化存儲:
channel.basic_publish(exchange='',
                      routing_key='task_queue1',
                      body=message,
                      properties=pika.BasicProperties(
                          delivery_mode=2,
                      ))
print " [x] Sent %r" % (message,)
connection.close()

send.py

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import pika
import random

hostname = 'localhost'
parameters = pika.ConnectionParameters(hostname)
connection = pika.BlockingConnection(parameters)

# 創建通道
channel = connection.channel()
# 聲明hello隊列,生產者消費者在相同隊列
channel.queue_declare(queue='hello',durable=True)

number = random.randint(1, 1000)
body = 'hello world:%s' % number
# 寫明發送隊列和指定隊列
channel.basic_publish(exchange='', routing_key='hello',body=body,properties=pika.BasicProperties(delivery_mode=2))
print "[x] sent %s" % body
connection.close()

可以看到輪流接受傳收到的信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM