kódminták Azure Blob Storage Python 2.1-es verziójú ügyfélkódtárak használatával
Ez a cikk a Pythonhoz készült Azure Blob Storage ügyfélkódtár 2.1-es verzióját használó kódmintákat mutatja be.
2023. március 31-én megszüntettük az Azure SDK-kódtárak támogatását, amelyek nem felelnek meg az Azure SDK jelenlegi irányelveinek. Az új Azure SDK-kódtárak rendszeresen frissülnek, hogy egységes élményeket és a biztonsági állapotot erősítsék. Javasoljuk, hogy térjen át az új Azure SDK-kódtárakra, hogy kihasználhassa az új képességeket és a kritikus biztonsági frissítéseket.
Bár a régebbi kódtárak 2023. március 31-e után is használhatók, a Microsofttól már nem kapnak hivatalos támogatást és frissítéseket. További információkért lásd a támogatás kivonásáról szóló közleményt.
Magas rendelkezésre állású alkalmazás létrehozása a Blob Storage használatával
Töltse le a mintaprojektet, és bontsa ki (csomagolja ki) a storage-python-circuit-breaker-pattern-ha-apps-using-ra-grs.zip fájlt. A git használatával is letöltheti az alkalmazás egy másolatát a fejlesztői környezetbe. A mintaprojekt tartalmaz egy egyszerű Python-alkalmazást.
git clone https://github.com/Azure-Samples/storage-python-circuit-breaker-pattern-ha-apps-using-ra-grs.git
A minta konfigurálása
Az alkalmazásban meg kell adnia a tárfiók hitelesítő adatait. Ezeket az információkat környezeti változókban tárolhatja az alkalmazást futtató helyi gépen. Kövesse az alábbi példák egyikét az operációs rendszertől függően a környezeti változók létrehozásához.
Az Azure Portalon lépjen a tárfiókra. Válassza a Hozzáférési kulcsok lehetőséget a tárfiók Beállítások területén. Illessze be a Tárfiók nevét és kulcsértékeit a következő parancsokba, és cserélje le a <saját fióknevét> és <a saját fiókkulcs> helyőrzőit. Ez a parancs menti a környezeti változókat a helyi gépre. Windows rendszerben a környezeti változó csak akkor érhető el, ha újra be nem tölti a használt parancssort vagy rendszerhéjat.
Linux
export accountname=<youraccountname>
export accountkey=<youraccountkey>
Windows
setx accountname "<youraccountname>"
setx accountkey "<youraccountkey>"
A konzolalkalmazás futtatása
Az alkalmazás terminálon vagy parancssorban való futtatásához lépjen a circuitbreaker.py könyvtárra, majd írja be a python circuitbreaker.py
parancsot. Az alkalmazás feltölti a HelloWorld.png képet a megoldásból a tárfiókra. Az alkalmazás ellenőrzi, hogy a rendszerkép replikálva lett-e a másodlagos RA-GZRS végpontra. Ezután elkezdi letölteni a képet legfeljebb 999 alkalommal. Minden egyes olvasást egy P vagy egy S jelöl. Ahol a P az elsődleges végpontot, az S pedig a másodlagos végpontot jelöli.
A mintakód a circuitbreaker.py
fájlban található run_circuit_breaker
metódussal letölt egy képet a tárfiókból a get_blob_to_path metódus segítségével.
A Storage-objektum újrapróbálkozási függvénye lineáris újrapróbálkozási szabályzatra van beállítva. Az újrapróbálkozási függvény határozza meg, hogy egy kérelmet újra kell-e próbálni, valamint megadja, hogy hány másodpercnyi várakozás után történjen az újrapróbálkozás. Állítsa a retry_to_secondary értéket true (igaz) értékre, ha a kérést újra meg kell próbálni másodlagosra, ha az elsődleges kérés sikertelen. A mintaalkalmazásban az egyéni újrapróbálkozási szabályzat a Storage-objektum retry_callback
függvényében van definiálva.
A letöltés előtt a Service objektum retry_callback és response_callback függvény van definiálva. Ezek a függvények határozzák meg az eseménykezelőket, amelyek a letöltés sikeres befejezésekor vagy a sikertelen letöltés utáni újrapróbálkozásokkal aktiválódnak.
A kódminta ismertetése
Újrapróbálkozási eseménykezelő
A rendszer akkor hívja meg az retry_callback
eseménykezelőt, ha a kép letöltése meghiúsult, és újrapróbálkozásra van beállítva. Ha a rendszer elérte a próbálkozások alkalmazásban definiált maximális számát, a kérelem LocationMode paramétere SECONDARY
értékre változik. Ez a beállítás kényszeríti az alkalmazást, hogy a másodlagos végpontról kísérelje meg letölteni a képet. Ez a konfiguráció csökkenti a rendszerkép kéréséhez szükséges időt, mivel az elsődleges végpontot nem próbálkozik meg határozatlan ideig.
def retry_callback(retry_context):
global retry_count
retry_count = retry_context.count
sys.stdout.write(
"\nRetrying event because of failure reading the primary. RetryCount= {0}".format(retry_count))
sys.stdout.flush()
# Check if we have more than n-retries in which case switch to secondary
if retry_count >= retry_threshold:
# Check to see if we can fail over to secondary.
if blob_client.location_mode != LocationMode.SECONDARY:
blob_client.location_mode = LocationMode.SECONDARY
retry_count = 0
else:
raise Exception("Both primary and secondary are unreachable. "
"Check your application's network connection.")
Befejezett kérelem eseménykezelő
A rendszer akkor hívja meg az response_callback
eseménykezelőt, ha a kép letöltése sikerült. Ha az alkalmazás a másodlagos végpontot használja, továbbra is ezt a végpontot használja majd legfeljebb 20 alkalommal. A 20. alkalom után az alkalmazás visszaállítja a LocationMode paramétert PRIMARY
értékre, és az elsődleges végponton próbálkozik újra. Ha a kérelem sikeres, az alkalmazás továbbra is az elsődleges végpontról végzi a beolvasást.
def response_callback(response):
global secondary_read_count
if blob_client.location_mode == LocationMode.SECONDARY:
# You're reading the secondary. Let it read the secondary [secondaryThreshold] times,
# then switch back to the primary and see if it is available now.
secondary_read_count += 1
if secondary_read_count >= secondary_threshold:
blob_client.location_mode = LocationMode.PRIMARY
secondary_read_count = 0