将rabbitMQ生产的消息存储到mongoDB
1、下载并安装rabbitMQ
下载地址:http://www.rabbitmq.com/download.html
2、安装Erlang
下载地址:http://www.erlang.org/download/otp_win64_17.3.exe
3、启动服务 输入 rabbitmq-plugins enable rabbitmq_management
4、在浏览器中输入地址查看:http://127.0.0.1:15672/ 账号/密码 guest/ guest
5、下载并安装mongoDB
下载地址:http://www.mongodb.org/ (官网) http://dl.mongodb.org/dl/win32/x86_64(这个下载比较快)
mongoDB的使用 :https://www.cnblogs.com/aademeng/articles/9779271.html
import pika
import json
import time
from pymongo import MongoClient
class OprMqSaveMongoDB(object):
def __init__(self):
# 初始化 rabbitmq
self.username = "guest"
self.password = "guest"
self.host ='127.0.0.1'
self.port = 5672
# 创建连接
self.credentials = pika.PlainCredentials(self.username, self.password)
# 虚拟队列
self.connection = pika.BlockingConnection(
pika.ConnectionParameters(
host=self.host,
port=self.port,
virtual_host='/',
credentials=self.credentials
)
)
# 开辟管道
self.channel = self.connection.channel()
# 声明消息队列 消息在这个队列传递
self.channel.queue_declare(queue='logging')
# 发送消息
def send(self, message: dict):
if not isinstance(message, dict):
raise TypeError("messageb不是字典")
message = json.dumps(message)
# 向队列插入数值
self.channel.basic_publish(
exchange='',
routing_key='logging',
body=message
)
print('发送成功')
# self.connection.close()
# 收到信息的回调函数
def callback(self, ch, method, properties, body):
# 初始化 mongoDB
# 创建一个数据库
myClient = MongoClient("mongodb://localhost:27017/")
# # 选择一个数据库 没有自动创建
mydb = myClient["mydb"]
# # 选择一个集合 没有自动创建
mycol = mydb["mycol"]
bodyStr = body.decode('unicode_escape')
print(bodyStr)
bodydict = json.loads(bodyStr)
mycol.insert(bodydict)
# 接收准备
def receive(self):
# 告诉rabbitMq 用callback来接收消息
self.channel.basic_consume(
'logging',
self.callback,
True
)
print('等待消息')
# 开始接收消息, 并进入堵塞状态, 队列里有消息才调用callback处理
self.channel.start_consuming()
# 将数据
if __name__ == '__main__':
oprMqSaveMongoDB = OprMqSaveMongoDB()
# 发消息
message = {
'type': 'log',
'message': {
'title': '张三',
'data': {
'age': 18,
'grade': 750,
}
},
'create_time' : int(time.time())
}
# oprMqSaveMongoDB.send(message)
# 接收消息
oprMqSaveMongoDB.receive()

浙公网安备 33010602011771号