原创 RabbitMQ源碼編譯
RabbitMQ支持多種安裝方式,如果需要分析和調試RabbitMQ源碼,則需要使用RabbitMQ源碼編譯安裝方式。 RabbitMQ是基於erlang語言編寫的,其源碼託管到github上的。Github上的二進制包可以直接用於安裝使
原创 RabbitMQ exchange binding queue原理
RabbitMQ根據exchange的類型規則將消息路由到相應的queue,其中exchange的類型包括direct,topic,fanout以及headers,我們這裏主要介紹topic exchange類型的消息路由原理,其他exc
原创 基於py-amqp編寫生產者和消費者代碼
在介紹erlang的dbg調試RabbitMQ源碼之前,首先介紹基於py-amqp編寫RabbitMQ的生產者和消費者代碼,其中py-amqp的安裝包可在以下鏈接下載:https://pypi.org/project/amqp/ 1 公共
原创 RabbitMQ exchange route queue原理
根據前一篇文檔介紹的《RabbitMQ exchange binding queue原理》後,這篇文章將介紹exchange如何route消息到正確的queue中,其代碼流程如下: 在RabbitMQ的客戶端發送消息時,將指定excha
原创 RabbitMQ節點關閉後啓動原理
RabbitMQ節點關閉後啓動流程圖如下: 1 mnesia:wait_for_tables解釋 如果Mnesia推斷另一個節點(遠程)的拷貝比本地節點的拷貝更新時,初始化時在節點上覆製表可能會導致問題,初始化進程無法處理。在這種情況
原创 python裝飾器實現週期性函數調用
python的裝飾器可用於權限校驗,週期性函數調用等功能,下面通過兩種方式實現週期性函數的調用。 # -*- coding:utf-8 -*- from functools import wraps import time import
原创 迭代器實現的固定數據獲取
有時會遇到這種場景,在數據量特別大的情況下,不能一次性將數據讀到內存中,此時迭代器便派上用場。即一次性只讀有限的數據量,在下一次函數或者對象調用時,在上一次的index下繼續讀取下一個有限長度的數據,即可以通過python的yield實現
原创 處理Windows文件格式爲Linux文件格式的方法
本文將介紹處理Windows文件格式爲Linux文件格式的3種方法。 1 判斷Windows文件格式 在Linux系統中,當我們執行shell腳本時,有時會出現以下錯誤: [root@master test]# sh t.sh t.sh
原创 關於static和可重入函數
1、概述 static 聲明的變量在C語言中有兩方面的特徵: 1)、變量會被放在程序的全局存儲區中,這樣可以在下一次調用的時候還可以保持原來的賦值。這一點是它與堆棧變量和堆變量的區別。 2)、變量用static告知
原创 函數重入問題
主要用於多任務環境中,一個可重入的函數簡單來說就是可以被中斷的函數,也就是說,可以在這個函數執行的任何時刻中斷它,轉入OS調度下去執行另外一段代碼,而返回控制時不會出現什麼錯誤;而不可重入的函數由於使用了一些系統資源,比如全局變量區,中斷
原创 OpenStack的oslo_messaging組件使用
首先給出OpenStack的RPC通信的代碼調用架構。 OpenStack消息通信架構圖 OpenStack層封裝call和cast接口用於遠程調用RPC的server上的方法,這些方法都是構造RPC的
原创 python屬性的代理訪問
# -*- coding:utf-8 -*- #由於方法二存在弊端,建議使用方法一 #方法一 class A: def __init__(self): print("A class initializatio
原创 shell處理json字符串
對於shell一般字符串的解析可以使用grep/sed/cut/awk等命令,對於json字符串的解析一般使用jq命令,但是有時需要在shell中構建json字符串,對於這種情況下使用python處理非常方便,下面便在shell中調用py
原创 python實例屬性管理
在python中,需要對某個實例attribute增加除訪問與修改之外的其他處理邏輯,比如類型檢查或合法性驗證。下面通過兩種方法進行實現。(具體參考《python cookbook》) # -*- coding:utf-8 -*- #
原创 RabbitMQ heartbeat原理
RabbitMQ的heartbeat是用於客戶端與RabbitMQ之間連接的存活狀態檢測,類似於tcp keepalives功能。本文將介紹RabbitMQ的heartbeat功能何時被創建以及如何檢測連接存活狀態。 1. RabbitM