原创 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