将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()

  

 

posted @ 2021-12-28 11:28  长乐未央丫  阅读(164)  评论(0)    收藏  举报