Megosztás a következőn keresztül:


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