Python 使用 kombu 连接信息中包含#号问题排查

Python处理消息队列库之kombu使用详解 在现代应用程序开发中,消息队列是实现异步任务处理和微服务通信的重要组件。Kombu 是一个用于在 Python 中处理消息的库,它提供了一个统一的接口来访问不同的消息队列后端,如 RabbitMQ、Redis 等。Kombu 设计简洁、功能强大,使得开发者可以轻松地在应用中集成消息队列。本文将详细介绍 Kombu 库,包括其安装方法、主要特性、基本和高级功能,以及实际应用场景,帮助全面了解并掌握该库的使用。 阅读详情

python 项目部署生产环境遇到一个错误问题 raise ValueError(f"Port could not be cast to integer value as {port!r}") ValueError: Port could not be cast to integer value as 'guest 测试环境和本地调试都没有问题,但是到生产之后就有问题,本章复现有问题的mq连接配置的导致的错误信息,记录问题排查过程

版本信息

框架版本
python3.11.7
kombu5.3.4

环境搭建

python 虚拟环境

Python 虚拟环境(Virtual Environment)是一个隔离的 Python 解释器环境,它允许你为每个 Python 项目安装其特定的依赖包,而不会干扰到全局 Python 环境或其他项目。这样,你可以确保每个项目都有其独立的、一致的依赖环境,避免了版本冲突和依赖混乱的问题。

Python 中有几个流行的工具用于创建和管理虚拟环境,其中最常用的是 venv 和 virtualenv

venv 创建 python 虚拟环境

python -m venv .venv

执行该命令之后,会创建一个虚拟的环境,产生 .venv文件夹, 目录结构如下
在这里插入图片描述

激活虚拟环境

.venv\Scripts\activate

在这里插入图片描述
激活虚拟环境之后,文件夹前面会有括号显示虚拟环境的名称
在这里插入图片描述

退出虚拟环境

deactivate

在这里插入图片描述

虚拟环境下查看python、pip版本

在这里插入图片描述
查询pip 配置信息

(.venv) F:\Python\mq>pip config list
global.index-url='http://mirrors.aliyun.com/pypi/simple/'
install.trusted-host='mirrors.aliyun.com'

安装依赖

编写 requirements.txt

kombu==5.3.4

在虚拟环境里面安装依赖

pip install -r requirements.txt

问题复现以及问题排查

  1. 消息发布端 hello_publisher.py
from __future__ import annotations

import datetime

from kombu import Connection

with Connection('amqp://guest:guest#2024@localhost:5672//') as conn:
    simple_queue = conn.SimpleQueue('simple_queue')
    message = f'helloworld, sent at {datetime.datetime.today()}'
    simple_queue.put(message)
    print(f'Sent: {message}')
    simple_queue.close()
  1. 在虚拟环境运行代码,出现如下报错信息
(.venv) F:\Python\mq>python hello_publisher.py
Traceback (most recent call last):
  File "F:\Python\mq\hello_publisher.py", line 7, in <module>
    with Connection('amqp://guest:guest#2024@localhost:5672//') as conn:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "F:\Python\mq\.venv\Lib\site-packages\kombu\connection.py", line 203, in __init__
    url_params = parse_url(hostname)
                 ^^^^^^^^^^^^^^^^^^^
  File "F:\Python\mq\.venv\Lib\site-packages\kombu\utils\url.py", line 38, in parse_url
    scheme, host, port, user, password, path, query = _parse_url(url)
                                                      ^^^^^^^^^^^^^^^
  File "F:\Python\mq\.venv\Lib\site-packages\kombu\utils\url.py", line 70, in url_to_parts
    parts.port,
    ^^^^^^^^^^
  File "E:\Anaconda\Lib\urllib\parse.py", line 182, in port
    raise ValueError(f"Port could not be cast to integer value as {port!r}")
ValueError: Port could not be cast to integer value as 'guest'

看到报错的堆栈信息,首先定位到代码行 File "F:\Python\mq\.venv\Lib\site-packages\kombu\utils\url.py", line 70 ,在此处加一个断点,调试一下(生产服务不能调试就print输出一下信息)

  1. 调试出问题的代码
    报错的代码方法如下
def url_to_parts(url):
    # type: (str) -> urlparts
    """Parse URL into :class:`urlparts` tuple of components."""
    scheme = urlparse(url).scheme
    schemeless = url[len(scheme) + 3:]
    # parse with HTTP URL semantics
    parts = urlparse('http://' + schemeless)
    path = parts.path or ''
    path = path[1:] if path and path[0] == '/' else path
    return urlparts(
        scheme,
        unquote(parts.hostname or '') or None,
        parts.port,
        unquote(parts.username or '') or None,
        unquote(parts.password or '') or None,
        unquote(path or '') or None,
        dict(parse_qsl(parts.query)),
    )

parts.port 获取的值从 urlparse 方法中解析出来的
在这里插入图片描述
执行完 urlparse 方法之后获取到的数值如下
在这里插入图片描述
port 的解析在 urlparse 这一步出了问题,重点来看看这个方法的逻辑
在这里插入图片描述
经过调试发现问题出在切割方法里面 urllib.parse.urlsplit,具体处理出问题代码在如下片段
在这里插入图片描述
链接中有 # 号导致切割之后端口号错位未获取到

  1. 去除链接中的#号的正常解析的数据如下
    在这里插入图片描述
    链接中没有 # 号之后,端口可以正常解析了
Celery报错AttributeError的终极解决方案:从EntryPoints问题到完整依赖修复 本文深度剖析了Celery任务队列中常见的AttributeError: 'EntryPoints' object has no attribute 'get'报错的根本原因,即importlib-metadata库API变更导致的依赖冲突。文章不仅提供了针对性的版本降级与锁定等快速修复方案,更系统性地介绍了使用虚拟环境、pip-tools、Poetry等工具构建稳定依赖环境的最佳实践,帮助开发者从根本上规避Celery依赖地狱,构建健壮的异步任务系统。 阅读详情

相关推荐

Ubuntu 20.04 安装 Django 必须用 venv 虚拟环境

虚拟环境(venv)是 Python 项目依赖隔离的基础机制,其核心原理是通过复制解释器、重定向 site-packages 路径,实现与系统 Python 的完全解耦。这一技术保障了版本可控、环境可复现和部署安全性,是现代 Web 开发(尤其是 Django、Flask 等框架)的工程标配。在 Ubuntu 20.04 等 Debian 系发行版中,因系统预装 Python 3.8 及 apt 管理的全局包,直接使用 pip install 会污染系统环境,引发 ModuleNotFoundError、版

weixin_30520015的博客 421

python中kombu库其他用法详解

python中kombu库其他用法详解

IT之一小佬的博客 637

PyCon 2012:Python工程化奠基之年技术考古

Python工程化并非始于今日,其核心工具链与安全范式早在2012年PyCon就已萌芽。从pip的--require-hashes哈希校验机制,到PyPI强制HTTPS迁移所驱动的TLS协议适配,再到virtualenv对Windows中文路径的编码攻坚,这些‘脏活累活’共同构成了现代Python可复现、可审计、可分发的基础设施底座。它们不是语法糖或新特性,而是解决真实部署冲突、供应链信任与跨平台兼容等基础问题的技术沉淀。理解PyCon 2012,就是理解pip install为何默认校验、venv为何能隔

weixin_30251829的博客 316

Python 中的 Kombu 类库

Kombu 是一个用于 Python 的消息队列库,提供了高效、灵活的消息传递机制。它是 Celery 的核心组件之一,但也可以单独使用。Kombu 支持多种消息代理(如 RabbitMQ、Redis、Amazon SQS 等),并提供了消息生产者和消费者的功能。安装命令 pip install kombu redis。

NLP工程化 2795

Python 2到3迁移实战:从健康体检到外科手术式重构

Python版本迁移本质是代码健壮性升级,核心在于识别并解决Python 2/3间语法差异、字符串类型(bytes/str)语义断裂、字典视图行为变更等底层原理问题。其技术价值远超兼容性适配,直接关系到Unicode处理稳定性、依赖链可靠性及生产环境可维护性。典型应用场景包括遗留系统现代化改造、金融/政务类高可靠性服务升级、以及CI/CD流水线标准化建设。本文聚焦真实迁移中的测试覆盖率驱动、阻塞依赖精准识别、futurize双阶段治理等关键实践,提供可审计、可回滚、可量化的工程化路径。

chudan0503的博客 401

kombu------python的消息库

kombu是一个python的消息库。 Kombu的目标是通过为AMQP协议提供一个地道的高层次接口,来使python中的消息编程更为简单。同时也为通用的消息问题提供试验和测试的解决方案。 AMQP是先进的消息队列协议,一个提供消息定位,队列,路由,高靠性和安全性的开放的标准协议,其中RabbitMQ消息服务是一个流行的实现。 特性 通过可扩展的通道允许应用程序支持多种消息

happyAnger6的专栏 9192

Python消息库——kombu的简单使用

相比于pika,kombu考虑的更全面,如它支持重连策略、支持connection pool和producer pool、故障转移策略等,于是我选择了kombu作为RabbitMQ的client端。 kombu文档 连接池(connection pools) 1、创建连接池 翻译自kombu文档:通过kombu.pools.connections可以得到一个连接池,传入一个连接实例,kombu.pools.connections会返回一个连接池实例。如果创建连接实例所传入的参数是一样的,如Connectio

a512961402的博客 6184

kombu, python的消息库.zip

kombu, python的消息库 kombu-- python的消息传递库 版本:站点:下载:关键字:关键字:4.1.0http://kombu.me/https://pypi.python.org/pypi/kombu/

celery 停止_如何解决django-celery启动后迅速关闭

日志中也没有打印什么明显的错误,只是显示连接了rabbitmq后就关闭了[2019-09-11 06:08:45,729: INFO/Beat] beat: Starting...[2019-09-11 06:08:45,731: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//[2019-09-11 06:08:45,...

weixin_39552204的博客 2275

Python库 | kombu-5.1.0b1-py3-none-any.whl

python库。 资源全名:kombu-5.1.0b1-py3-none-any.whl

华中农业大学C++考试基础练习题

实验一 1 通过日期求某月的天数。 输入日期的年份和月份,求该月有多少天。提示:对于月份为1、3、5、7、8、10、12的月份天数为31,月份为4、6、9、11的月份天数为30,月份为2时要结合年份考虑闰年的情况。 输入描述 输入两个正整数y和m分别表示年份和月份。 输出描述 如果y和m满足条件:1900<=y<3000,0<m<13,输出该月的天数;否则输出“Input error!”。 输入样例 2010 12 输出样例 31 #include"iostream" using n

雨的博客 1万+

手把手教你配置django----djcelery,以及使用

安装celery pip install celery==3.1.26.post2 pip install djcelery 在settings里配置 #settings.py INSTALLED_APPS = [ ... 'djcelery', ] 配置基本连接信息 #settings.py import djcelery djcelery.setup_loader() #broker BROKER_URL= 'amqp://liuchuan:123456@123.57.45.14

qq_45618388的博客 1428

AppleAccount注册之生成sign

根据日志发现:签名来自于AuthKit的-[AKAppleIDServerResourceLoadDelegate signRequest:withCompletionHandler:]的一个block,这个库是放在共享缓存库里的,找到提前准备好的IDA文件,先去找主方法,根据分析IDA,最后找到了实际生成签名的方法:t1。,接受五个参数,context(之前讲的获取到的客户端证书),bytes(待加密的body字节),length(字节长度),以及两个接受结果的参数,直接进这个方法看,

2503_90751938的博客 1004

AI赋能开发:系统性诊断与解决SCRAM认证不支持的实战指南

在现代数据库与分布式系统中,认证机制是保障数据安全访问的核心组件。SCRAM(Salted Challenge Response Authentication Mechanism)作为一种基于挑战-响应的强认证协议,其原理是通过哈希算法和随机数(Nonce)来抵御重放攻击,相比传统的密码明文或MD5认证,能显著提升安全性。这项技术的价值在于为数据库(如MongoDB、PostgreSQL)和消息中间件提供了标准化的、防窃听的认证方案。其典型应用场景包括云原生应用、微服务架构以及任何需要安全客户端-服务端通信

csxc65837的博客 369

Window10 intel realsense D435安装并实现opencv显示realsense读取的彩色和深度数据(QT+openCV+rsD35)

(1)点击"官方指南" 来到下载页,-&gt;最新的稳定版本发布 (本人下的2.16.5,现在最新2.17.0) 不需要做开发,只要下载Intel RealSense Viewer就好,这个就是相机的可视化界面,简洁明了。对应的安装包是Intel.RealSense.Viewer.exe。 本人的毕设要用到深度图做开发,所以安装Intel.RealSense.SDK.exe,SDK...

Pabebe的博客 1万+

metaRTC嵌入式webrtc编译指南

metaRTC编译支持qmake和cmake,qmake使用QT最为方便,新版本新增了cmake支持。 ...

metaRTC的博客 9518

python env中安装redis

在env中确定是安装了redis的,而且redis服务都启动了,ps查看redis进程都在,但是通过命令(python manage.py celery worker -c 4 --loglevel=info)启动work的时候,总是报错说找不到redis File "/home/wfq/python27/lib/python2.7/site-packages/kombu-3.0.37-py...

wang725的专栏 989

星座SAR动目标检测(GMTI)

参考代码 星座SAR动目标检测 www.youwenfan.com/contentcsg/52399.html。

feifeigo123的博客 549

Celery+RabbitMQ消息队列实战:从入门到生产环境踩坑指南

本文分享了Celery+RabbitMQ在分布式系统中的实战经验与踩坑案例。首先介绍了基础配置方法,包括环境准备、任务定义等。重点剖析了三个典型生产环境问题:消息丢失的"幽灵任务"、心跳超时导致的连接中断以及死信队列配置不当引发的消息堆积,并给出了具体解决方案。文章还探讨了高级特性如优先级队列、监控告警和自定义状态跟踪,以及性能优化建议包括Worker池选择、连接管理和任务批处理。最后总结出核心原则:必须监控消息大小、确保连接健康、配置死信队列和建立监控告警系统,同时指出了常见误区。这些

小陈工的博客 451

⚡【C++要笑着学】(13) STL介绍:什么是STL标准模板库 | STL的版本 | 浅谈STL的缺陷

再讲解函数模板之前先对STL做一个小铺垫,本篇将对STL做一个简单的介绍。

有道无术, 术尚可求。有术无道, 止于术。 3034

[SV]SystemVerilog学习笔记之struct & union

SystemVerilog学习笔记(四) 一、结构体(struct) 1.1、结构体(struct) 结构体声明:结构体默认是变量,也可以声明为线网 var struct{ //通过var进行结构体变量声明 logic [31:0] a, b; logic [ 7:0] opcode; } Instruction_Word_var; wire struct{ //结构体线网声明,定义为线网类型时,结构体的所有成员必须...

元直的博客 1万+

centos6u3 安装 celery 总结

耗时大概6小时. 执行 pip install celery 之后, 在 mac 上 celery 可以正常运行, 在 centos 6u3 上报错如下: Traceback (most recent call last): File "/home/work/collie/venv/bin/celery", line 11, in <module> sys.ex...

weixin_34250709的博客 178

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

RapidSMS 性能提升指南:使用 Celery 实现短信异步处理

RapidSMS 是一个基于 Python 和 Django 构建短信应用的开源框架,当短信量逐渐增大时,同步处理模式会成为性能瓶颈。本指南将带你掌握 **RapidSMS 短信异步处理** 的核心方案——通过内置的 CeleryRouter 将短信收发放入 Celery 消息队列后台执行,实现 **RapidSMS 性能提升**,让短信应用轻松应对高并发场景。 ## 为什么需要短信异步处理?

gitblog_00605的博客 872

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

django-celery-beat自动调度异步任务

它支持使用任务队列的方式在分布的机器、进程、线程上执行任务调度。Celery不仅支持异步任务(如发送邮件、文件上传、图像处理等耗时操作),还支持定时任务,即需要在特定时间执行的任务。Celery本身不提供消息服务,需要借助RabbitMQ、Redis等消息中间件,本项目使用的是Redis。。它包含一个调度器,负责根据配置的时间表计划任务的执行。这些任务通常是Celery任务,即异步执行的函数或方法。

凡梦千华的博客 3587

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

django-celery 版本 常用命令

http://celery.github.io/django-celery/introduction.html #先启动服务器 python manage.py runserver #再启动worker python manage.py celery worker -c 4 --loglevel=info Program Replace with celeryd ...

weixin_30532973的博客 911
上一篇: window python开发环境搭建- Anaconda
下一篇: idea 快捷键大全
Chengdu.S
博客等级 码龄9年 282粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chengdu.S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值