关于 rabbitmq 心跳机制的总结和使用经验

2022-11-13
阅读 1 分钟
2.5k
A:首先,我们要知道 amqp 是基于 tcp 的,tcp 是有心跳机制的。那么为什么不用 tcp 的心跳来保证『可靠性』呢?答案就是 tcp 的心跳,从 amqp 层面是无法介入的,我们需要一个应用层心跳机制。比如使用 tcp 心跳发现『网络不可达』需要十几分钟,这在一些场景下,太长了,不可接受。

nameko 关闭消息确认和持久化

2022-11-11
阅读 5 分钟
1.4k
动机:最近使用 nameko + rabbitmq 做的系统的流量太低了,系统的 QPS 在 1k-2k 之间。所以需要优化系统的 QPS,自己用 kombu 裸写了生产者消费者的 demo 代码,即便开了消息持久化,发现吞吐量可以随随便便过 2w+/s(特指的是生产者投递消息的速率),所以一定有问题。

为什么 nameko 投递消息的速度这么慢?

2022-11-10
阅读 2 分钟
841
使用 kombu 投递消息,哪怕开了消息持久化,单连接投递速度也在 1w+/s但是 nameko,慢的离谱,不开持久化 1k+/s;开了消息持久化,100+/s为什么呢?后来研究了一下,这个和 amqp 的消息确认(confirm_publish)选项有关系。参考:Kombu实现RabbitMQ的可靠消息发布(confirm机制)如何开启 confirm_publish 呢?创建连接...

ubuntu 上的 yarn 安装的可执行文件在哪里?

2022-11-07
阅读 1 分钟
822
ubuntu 上的 yarn 安装的可执行文件在哪里?使用 yarn 安装一些东西 {代码...} 但是要用的时候,却没有 {代码...} 怎么办?通过 yarn全局安装后命令为何不能使用? 了解到,用下面的方式就可以查看了: {代码...}

使用 kombu 作为 rabbitmq 的消费者客户端 —— 并发消费篇

2022-11-06
阅读 2 分钟
1.9k
前提:一个进程一个 amqp 连接我本来想用多线程来实现,但是貌似做不到:一个连接,多个线程消费但是我又不想一个线程一个连接,这样太浪费连接数了然后我想到 nameko 是一个进程一个连接,然后使用 evnetlet 协程来实现,并发消费所以我写了下面的 demo {代码...} 消费一个任务需要 1 秒预取 10 个协程池 size 为 10从...

kombu 维护消费者心跳

2022-11-06
阅读 2 分钟
1.5k
单线程对于只有一个进程一个线程一个 amqp 连接的情况我们开了一个连接用来任务消费,这个时候,我们需要一个『后台』来帮我们维护 amqp 的心跳怎么实现这个『后台』呢?选择其实很多,比如:线程eventlet 协程gevent 协程下面就以 『eventlet 协程』 举例子了 {代码...}

rabbitmq 消费者为什么需要心跳

2022-11-06
阅读 1 分钟
958
rabbitmq 的心跳和 amqp 协议有关系,你要是用 rabbitmq 的 http 协议,就没有心跳的概念。所以我们谈论 rabbitmq 的心跳的时候,其实讲的是 amqp 的心跳。因为使用 rabbitmq 的时候, 99%

kibana 判断 doc 是不是存在

2022-10-26
阅读 1 分钟
1k
国内的互联网真的是贫瘠的不行,这么基本的东西还需要我来整理kibanba 查看一个 index 有多少 doc {代码...} 这里的 test_renmin_meta_new 是 index namekibanba 查看一个 index 内的所有 doc {代码...} 参考:How To Return All Documents From An Index In Elasticsearchkibana 判断 doc 是不是存在 {代码...} test_renm...

kombu 连接池详解

2022-10-24
阅读 7 分钟
1.9k
起因使用 nameko 的时候,想看看 nameko 的连接复用原理(指的是和 rabbitmq 的 amqp 网络连接的复用)一般连接复用有两种方案:TLS(Thread Local Storage)连接池第一种方案,实现最简单,但是有局限性。比如使用线程池的情况下才有用,比如使用协程、或者无复用的线程就不合适了第二种方案,连接池是最通用的方案,但...

python 泛型?看这一篇就够了

2022-10-23
阅读 2 分钟
9k
前言网上关于 python 泛型的介绍实在是太少了,而且都是浅尝辄止我得整点高级和完善点的首先 python 是一个强类型动态语言一般来讲动态类型不需要泛型,因为泛型就是让类型动起来,那我们在这里将啥 『python泛型』呢?很简单,python 有 typing hint,如果你不写 typing hint,也不介意 ide 给你的类型提示都是 Any 的...

rust 各种括号的用法

2022-10-23
阅读 1 分钟
1.5k
rust 充斥这大量的语法噪声我们统计一下 rust 各种括号的用法:花括号圆括号尖括号

内联是什么意思?

2022-10-23
阅读 1 分钟
983
编程中的内联是什么意思?编程中的内联函数是什么意思?Rust 中的内联函数调用太多了会有性能问题吗?

minikube 替代品

2022-10-22
阅读 1 分钟
895
同类型,主流的有下面四个:minikubekindmicrok8sk3s因为 minikube 是谷歌官方出品,所以一开始想用 minikube,但是这玩意,根本装不上,只能寻求其他替代品了

python 通过 c 库利用多核性能的提前条件

2022-10-20
阅读 1 分钟
1.1k
众所周知,Python自身的字节码在执行的时候由于GIL的机制,是无法同时利用多CPU的计算资源的;但是对于python封装的C库、并且线程是在C库中创建并维护的、并且线程并不需要callback Python的代码的情况下,还是能利用的多核的并发优势的。

loguru 添加默认的 extra

2022-10-19
阅读 3 分钟
2.5k
翻看了一下 loguru 的源代码loguru 有很恶心的 pyi 文件来影响我们看源代码,建议删除 pyi 后再看。python 删除 pyi 文件可以使用 logger.bind,但是 logger.bind 会返回一个新的 logger,以后都要使用这个新的 logger 才行 {代码...} 参考文章:How to use Loguru defaults + and extra information?loguru 貌似没有提供...

python 删除 pyi 文件

2022-10-19
阅读 1 分钟
1.9k
不值从何时起,想看某些模块的源码的时候,跳转到的不是 py 文件,而是 pyi 文件。这太愚蠢了,是可忍孰不可忍!怎么删除呢?看我操作首先输入 pip show loguru 就能看到这个 loguru 包在文件系统上的位置看 Location {代码...} 然后进入 Location 对应的路径 {代码...} 如果你只要删除 loguru 下面的 pyi,而不是所有第...

kombu 的 pools 中的 connections 到底在干嘛?

2022-10-16
阅读 2 分钟
1.3k
Connection and Producer Pools官方文档只能说写的很 low让我们自己从代码中发现原理吧 {代码...} 首先这玩意不是一个保险柜site-packages/kombu/pools.py {代码...} site-packages/kombu/pools.py {代码...} site-packages/kombu/pools.py {代码...} site-packages/kombu/utils/collections.py {代码...}

kombu 的惰性 connection ?

2022-10-16
阅读 2 分钟
1.2k
kombu 这套东西,到底是在哪里建立 amqp 连接的 {代码...} 方法:人肉看代码,手动二分,加 wireshark 抓包在这里加了一个断言site-packages/kombu/transport/pyamqp.py {代码...}

kombu 创建优先队列并支持消息优先级

2022-10-14
阅读 1 分钟
1.2k
rabbitmq 里面,队列中的message是不分优先级的,只会先进先出,哪怕是 publish 的时候,给 message 带上 priority 也是一个摆设

'collections' has no attribute 'MutableMapping'

2022-10-14
阅读 1 分钟
8.6k
AttributeError: module 'collections' has no attribute 'MutableMapping'

最优雅的采集 python 程序的日志方案——日志存储篇

2022-10-14
阅读 2 分钟
1.9k
不管运行程序的平台是 docker 还是 k8s, 采集日志有两种方案:方案一:采集程序的标准输出方案二:程序把日志写文件中,然后采集日志文件在先来分析一下方案一和二的好坏方案一的坏处就是:『多行日志采集』不管是用『行首正则表达式』还是『json化』都不是优雅的解决方案『行首正则表达式』,不是所有模块的日志都有固...

python 的 .gitignore 长什么样子——我的 .gitignore 模板

2022-10-14
阅读 2 分钟
2.3k
默认的 {代码...} 注意,这个默认的会 ignore env 相关的内容,这个自行判断要不要 {代码...} 我一般会手动添加一下内容首先 ignore 的是 idea 和 vscode 的配置文件夹如果你已经提交了 .idea 或者 .vscode ,那可以吃后悔药,比如: git rm --cached -r .idea然后在 mac 上会出现 .DS_Store 也要 ignorePipfile.lock 是 ...

loguru 过滤不同 level 的日志

2022-10-14
阅读 1 分钟
3.2k
loguru 不打印低级别的日志 {代码...} logger.add 的时候,设置 level 参数就好了value 要用大写哦把 level 设为 debug 就是都打印常用的日志级别是4个errorwarninginfodebug比如我希望输出全部四个级别,就用 level='DEBUG'输出 info、warning、error,就用 level='INFO'输出 warning、error,就用 level='WARNING'输出...

rust 省略 return 关键字的用法

2022-10-12
阅读 1 分钟
1.8k
在 rust 的函数中,可以不写 return像在 python 中,不写 return 表示 return None但是在 rust 中,rust 省略 return 关键字,『函数会默认使用最后一条语句的执行结果作为返回值』参考:Rust 函数

pipenv 报错 module 'collections' has no attribute 'MutableMapping'

2022-10-11
阅读 4 分钟
6.4k
这个问题很简单,因为 apt 安装的 pipenv 版本太老了,用最新的 pipenv 版本就好了,怎么获得最新的 pipenv 版本?直接用 pip 安装!

kombu 如何判断一个 message 是否 acknowledged/requeued/rejected

2022-10-10
阅读 1 分钟
1.2k
直接使用 message 的 acknowledged 属性就好了 {代码...} 当我们使用 acknowledged 的时候,其实干的是下面的事情:kombu/message.py {代码...} ACK_STATES 是什么呢?kombu/message.py {代码...} 可以看到,已经有三个状态了哦

rabbitmq docker 修改默认配置

2022-10-08
阅读 2 分钟
2.7k
conf 和 config 不可以乱用,因为代表的是不同格式,不然会报错误, 比如把 rabbitmq.conf 命名为 rabbitmq.config 是不可取的:Failed to load advanced configuration file "/etc/rabbitmq/rabbitmq.config": unknown POSIX error

kombu register_callback 和 on_message 的区别?

2022-10-08
阅读 2 分钟
1.1k
register_callback 添加的 func 接受两个参数 {代码...} register_callback 添加的 func 接受一个参数 {代码...} 相关的代码可见:kombu/messaging.py {代码...} 从上面可以看出,如果你需要 kombu 帮你做 decode,那可以选择 register_callback; 但是让 kombu 做 decode 有一个坏处,就是 decode 失败了,没有办法把 me...

论 rabbitmq+nameko 可以支撑多大规模的业务

2022-10-07
阅读 1 分钟
977
来谈谈 rabbitmq+nameko 的技术选型 —— 什么场景下可以选用 『rabbitmq+nameko』,将从优缺点两个层面分析。主要以缺点为主

Python 获取一个函数的参数的默认值

2022-10-04
阅读 1 分钟
1.2k
可以使用 inspect 模块的 signature 方法来实现示例代码如下: {代码...} 输出 {代码...}