python rabbitmq callback 传参数_python - 操作RabbitMQ

介绍

RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。

MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

应用场景:

RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具。消息队列的使用场景大概有3种:

1、系统集成,分布式系统的设计。各种子系统通过消息来对接,这种解决方案也逐步发展成一种架构风格,即“通过消息传递的架构”。

2、当系统中的同步处理方式严重影响了吞吐量,比如日志记录。假如需要记录系统中所有的用户行为日志,如果通过同步的方式记录日志势必会影响系统的响应速度,当我们将日志消息发送到消息队列,记录日志的子系统就会通过异步的方式去消费日志消息。

3、系统的高可用性,比如电商的秒杀场景。当某一时刻应用服务器或数据库服务器收到大量请求,将会出现系统宕机。如果能够将请求转发到消息队列,再由服务器去消费这些消息将会使得请求变得平稳,提高系统的可用性。

安装

安装RabbitMQ

48304ba5e6f9fe08f3fa1abda7d326ab.png

基础环境:

内核

3.10.0-327.el7.x86_64

系统版本

CentOS Linux release 7.2.1511 (Core)

安装配置epel源

# rpm -ivh http://mirrors.neusoft.edu.cn/epel/7/x86_64/e/epel-release-7-7.noarch.rpm

安装erlang

# yum install erlang

下载RabbitMQ 3.6.1

# wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm

安装rabbitmq-server

# rpm -ivh rabbitmq-server-3.6.1-1.noarch.rpm

生成配置文件

# cp /usr/share/doc/rabbitmq-server-3.6.1/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

启动RabbitMQ

# rabbitmq-server start

48304ba5e6f9fe08f3fa1abda7d326ab.png

安装Python API

# pip3 install pika

or

# easy_install pika

Python 操作RabbitMQ

对于RabbitMQ来说,生产和消费不再针对内存里的一个Queue对象,而是某台服务器上的RabbitMQ Server实现的消息队列。

1.生产者代码

48304ba5e6f9fe08f3fa1abda7d326ab.png

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# auth : pangguoping

import pika

# ######################### 生产者 #########################

credentials = pika.PlainCredentials('admin', 'admin')

#链接rabbit服务器(localhost是本机,如果是其他服务器请修改为ip地址)

connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.1.103',5672,'/',credentials))

#创建频道

channel = connection.channel()

# 声明消息队列,消息将在这个队列中进行传递。如果将消息发送到不存在的队列,rabbitmq将会自动清除这些消息。如果队列不存在,则创建

channel.queue_declare(queue='hello')

#exchange -- 它使我们能够确切地指定消息应该到哪个队列去。

#向队列插入数值 routing_key是队列名 body是要插入的内容

channel.basic_publish(exchange='',

routing_key='hello',

body='Hello World!')

print("开始队列")

#缓冲区已经flush而且消息已经确认发送到了RabbitMQ中,关闭链接

connection.close()

48304ba5e6f9fe08f3fa1abda7d326ab.png

2.消费者代码

48304ba5e6f9fe08f3fa1abda7d326ab.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值