阿里云AMQP Python3使用

简介: 概述本文主要介绍如何使用Python3.6操作阿里云AMQP。阿里云的AMQP是完全兼容开源社区的AMQP,使用过程中只需要在创建连接阶段参考官方示例配置连接信息,之后的使用与开源社区AMQP使用完全一致,使用的SDK也是开源社区的SDK:pika。

概述

本文主要介绍如何使用Python3.6操作阿里云AMQP。阿里云的AMQP是完全兼容开源社区的AMQP,使用过程中只需要在创建连接阶段参考官方示例配置连接信息,之后的使用与开源社区AMQP使用完全一致,使用的SDK也是开源社区的SDK:pika。

Code Sample

1、计算username、password
# -*- coding: utf-8 -*
import base64
import hashlib
import hmac
from datetime import datetime

class AliyunCredentialsProvider:
    """
    Python3.6+适用,根据阿里云的 accessKey,accessSecret,UID算出amqp连接使用的username和password
    UID是资源ownerID,一般是接入点第一段
    """

    ACCESS_FROM_USER: int = 0

    def __init__(self, access_key: str, access_secret: str, uid: int, security_token: str = None) -> None:
        self.accessKey = access_key
        self.accessSecret = access_secret
        self.UID = uid
        self.securityToken = security_token

    def get_username(self) -> str:
        ak = self.accessKey
        ret = base64.b64encode(f'{self.ACCESS_FROM_USER}:{self.UID}:{ak}'.encode())
        if self.securityToken:
            ret = f'{ret}:{self.securityToken}'
        return str(ret, 'UTF-8')

    def get_password(self) -> str:
        now = datetime.now()
        timestamp = int(now.timestamp() * 1000)
        key = bytes(str(timestamp), 'UTF-8')
        message = bytes(self.accessSecret, 'UTF-8')

        digester = hmac.new(key, message, hashlib.sha1)
        signature1: str = digester.hexdigest()
        signature1 = signature1.upper()

        ret = base64.b64encode(f'{signature1}:{timestamp}'.encode())
        passoword = str(ret, 'UTF-8')
        return passoword
2、获取认证需要的参数
# -*- coding: utf-8 -*
import pika
from AMQP.AliyunCredentialsProvider3 import AliyunCredentialsProvider

# 接入点
host = "1848217816617278.mq-amqp.cn-hangzhou-a.aliyuncs.com";
# 默认端口
port = 5672;
# 资源隔离
virtualHost = "yutaoamqptest";
# 阿里云的accessKey
accessKey = "********";
# 阿里云的accessSecret
accessSecret = "********";
# 主账号id
resourceOwnerId = int(184********17278);

provider = AliyunCredentialsProvider(accessKey, accessSecret, resourceOwnerId)

def getConnectionParam():
    credentials = pika.PlainCredentials(provider.get_username(), provider.get_password(), erase_on_connect=True)
    return pika.ConnectionParameters(host, port, virtualHost, credentials)
3、发送Code

import pika

from AMQP import connection
connection = pika.BlockingConnection(connection.getConnectionParam()) # 建立连接

# Create a new channel with the next available channel number or pass in a channel number to use
channel = connection.channel()
# Declare queue, create if needed. This method creates or checks a queue.
# When creating a new queue the client can specify various properties that control the durability of the queue and its contents, and the level of sharing for the queue.
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
print("[x] Sent 'Hello World!'")
connection.close()
4、接收Code
import pika
from AMQP import connection

connection = pika.BlockingConnection(connection.getConnectionParam()) # 建立连接
channel = connection.channel()
channel.queue_declare(queue='hello')

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

channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
5、项目目录结构

_

6、接收测试结果

_

参考链接

amqp-python-demo

Getting Started With RabbitMQ: Python

相关文章
|
14天前
|
数据采集 安全 API
阿里云大学考试python中级题目及解析-python高级
阿里云大学考试python中级题目及解析-python高级
|
14天前
|
存储 SQL 缓存
阿里云大学考试python中级题目及解析-python中级
阿里云大学考试python中级题目及解析-python中级
20 0
|
14天前
|
机器学习/深度学习 存储 数据可视化
阿里云大学考试python初级-python初级
阿里云大学考试python初级-python初级
|
23天前
|
API 开发工具 开发者
PYTHON运行阿里云的短信发送程序报错
图片链接指向一个阿里云开发者生态的图片,内容可能显示了一个关于使用Python SDK调用API发送短信时遇到的错误。错误可能涉及主账号和子账号ID。问题可能是由于缺少环境变量配置导致的。代码基于Python 2.0版本。总结:SDK调用出错,疑因环境变量未配置,影响了账号ID的识别。
|
1月前
|
机器学习/深度学习 分布式计算 数据挖掘
阿里云 MaxCompute MaxFrame 开启免费邀测,统一 Python 开发生态
阿里云 MaxCompute MaxFrame 正式开启邀测,统一 Python 开发生态,打破大数据及 AI 开发使用边界。
697 1
|
3月前
|
人工智能 机器人 API
Python和阿里云AI服务搭建
使用Python和阿里云AI服务搭建一个简单的聊天机器人的教程 1. 注册阿里云账号并登录。 2. 开通阿里云AI服务,并创建一个智能对话机器人。 3. 获取API密钥和AccessToken。 4. 安装Python环境和SDK。
254 8
|
4月前
|
存储 对象存储 Python
Python中使用阿里云OSS存储实现文件上传和下载功能
Python中使用阿里云OSS存储实现文件上传和下载功能
497 2
|
5月前
|
存储 安全 搜索推荐
芜湖阿里云代理商:aliyun-python-sdk-ossadmin
简介:@luotuoemo 飞机@TG 【聚搜云】服务器运维专家! www.4526.cn 阿里云是一家全球领先的云计算服务提供商,提供丰富的云产品和解决方案。作为阿里云代理商,使用aliyun-python-sdk-ossadmin可以帮助用户更好地管理和使用阿里云的对象存储服务(OSS),享受到阿里云带来的诸多优势。
|
5月前
|
存储 DataWorks 开发工具
在DataWorks中,可以使用Python SDK操作阿里云OSS存储服
在DataWorks中,可以使用Python SDK操作阿里云OSS存储服
140 1
|
8月前
|
算法 API Python
使用 Python 对接阿里云 OpenAPI 自签名
使用 Python 对接阿里云 OpenAPI 自签名
271 1