


Der CosmosDB-Timer-Trigger funktioniert nicht ordnungsgemäß
Ich habe eine Frage zu meiner Funktionsanwendung „timertrigger“.
Ich habe diese Funktion entwickelt, um mit dem Telegram-Bot zu kommunizieren und Nachrichten nach einer API-Anfrage zu senden.
Ich habe die Feature-App lokal ausprobiert und sie hat großartig funktioniert. Wenn ich jedoch versuche, cosmosdb zum Speichern der Informationen zu verwenden, stoße ich auf ein Problem und kann die Informationen nicht speichern.
Ich habe alle Variablen und Dinge eingerichtet, die ich brauche, um meine App mit Telegram und Cosmosdb zu verbinden
try: database_obj = client.get_database_client(database_name) await database_obj.read() return database_obj except exceptions.cosmosresourcenotfounderror: print("creating database") return await client.create_database(database_name) # </create_database_if_not_exists> # create a container # using a good partition key improves the performance of database operations. # <create_container_if_not_exists> async def get_or_create_container(database_obj, container_name): try: todo_items_container = database_obj.get_container_client(container_name) await todo_items_container.read() return todo_items_container except exceptions.cosmosresourcenotfounderror: print("creating container with lastname as partition key") return await database_obj.create_container( id=container_name, partition_key=partitionkey(path="/lastname"), offer_throughput=400) except exceptions.cosmoshttpresponseerror: raise # </create_container_if_not_exists> async def populate_container_items(container_obj, items_to_create): # add items to the container family_items_to_create = items_to_create # <create_item> for family_item in family_items_to_create: inserted_item = await container_obj.create_item(body=family_item) print("inserted item for %s family. item id: %s" %(inserted_item['lastname'], inserted_item['id'])) # </create_item> # </method_populate_container_items> async def read_items(container_obj, items_to_read): # read items (key value lookups by partition key and id, aka point reads) # <read_item> for family in items_to_read: item_response = await container_obj.read_item(item=family['id'], partition_key=family['lastname']) request_charge = container_obj.client_connection.last_response_headers['x-ms-request-charge'] print('read item with id {0}. operation consumed {1} request units'.format(item_response['id'], (request_charge))) # </read_item> # </method_read_items> # <method_query_items> async def query_items(container_obj, query_text): # enable_cross_partition_query should be set to true as the container is partitioned # in this case, we do have to await the asynchronous iterator object since logic # within the query_items() method makes network calls to verify the partition key # definition in the container # <query_items> query_items_response = container_obj.query_items( query=query_text, enable_cross_partition_query=true ) request_charge = container_obj.client_connection.last_response_headers['x-ms-request-charge'] items = [item async for item in query_items_response] print('query returned {0} items. operation consumed {1} request units'.format(len(items), request_charge)) # </query_items> # </method_query_items> async def run_sample(): print('aaaa') print('sss {0}'.format(cosmosclient(endpoint,credential=key))) async with cosmosclient(endpoint, credential = key) as client: print('connected to db') try: database_obj = await get_or_create_db(client, database_name) # create a container container_obj = await get_or_create_container(database_obj, container_name) family_items_to_create = ["link", "ss", "s", "s"] await populate_container_items(container_obj, family_items_to_create) await read_items(container_obj, family_items_to_create) # query these items using the sql query syntax. # specifying the partition key value in the query allows cosmos db to retrieve data only from the relevant partitions, which improves performance query = "select * from c " await query_items(container_obj, query) except exceptions.cosmoshttpresponseerror as e: print('\nrun_sample has caught an error. {0}'.format(e.message)) finally: print("\nquickstart complete") async def main(mytimer: func.timerrequest) -> none: utc_timestamp = datetime.datetime.utcnow().replace( tzinfo=datetime.timezone.utc).isoformat() asyncio.create_task(run_sample()) logging.info(' sono partito') sendnews() if mytimer.past_due: logging.info('the timer is past due!') logging.info('python timer trigger function ran at %s', utc_timestamp)
Ich habe meine Funktion begonnen
func host start --port 7072
Aber ich denke, dass etwas mit der Verbindung zur Datenbank nicht stimmt, weil console.log('connected to db') nicht gedruckt wird.
Es scheint, dass nicht alle Vorgänge im Zusammenhang mit cosmosdb ausgeführt werden. Wenn ein Fehler auftritt, weiß ich nicht, wie ich ihn beheben kann.
Ich erhalte keine Fehlermeldungen in meinem Terminal, aber wie gesagt, cosmosdb scheint nicht zu funktionieren.
Ich bin mir nicht sicher, ob ich Ihnen alle notwendigen Informationen gegeben habe. Vielen Dank für Ihre Hilfe.
Richtige Antwort
Das gleiche Problem ist auch bei der Verwendung asynchroner Funktionen aufgetreten. Bei mir funktioniert es, wenn ich eine nicht asynchrone Funktion verwende.
Bitte überprüfen Sie dieses Dokument
als ReferenzMein Code:
timetrigger1/__init__.py
:
import datetime import logging import asyncio import azure.functions as func from azure.cosmos import cosmos_client import azure.cosmos.exceptions as exceptions from azure.cosmos.partition_key import partitionkey endpoint = "https://timercosmosdb.documents.azure.com/" key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" database_name = "todolist" container_name = "test" def get_or_create_db(client,database_name): try: database_obj = client.get_database_client(database_name) database_obj.read() return database_obj except exceptions.cosmosresourcenotfounderror: logging.info("creating database") return client.create_database_if_not_exists(database_name) def get_or_create_container(database_obj, container_name): try: todo_items_container = database_obj.get_container_client(container_name) todo_items_container.read() return todo_items_container except exceptions.cosmosresourcenotfounderror: logging.info("creating container with lastname as partition key") return database_obj.create_container_if_not_exists( id=container_name, partition_key=partitionkey(path="/id"), offer_throughput=400) except exceptions.cosmoshttpresponseerror: raise def populate_container_items(container_obj,items): inserted_item = container_obj.create_item(body=items) logging.info("inserted item for %s family. item id: %s" %(inserted_item['lastname'], inserted_item['id'])) def read_items(container_obj,id): item_response = container_obj.read_item(item=id, partition_key=id) request_charge = container_obj.client_connection.last_response_headers['x-ms-request-charge'] logging.info('read item with id {0}. operation consumed {1} request units'.format(item_response['id'], (request_charge))) def query_items(container_obj, query_text): query_items_response = container_obj.query_items( query=query_text, enable_cross_partition_query=true ) request_charge = container_obj.client_connection.last_response_headers['x-ms-request-charge'] items = [item for item in query_items_response] logging.info('query returned {0} items. operation consumed {1} request units'.format(len(items), request_charge)) def run_sample(): logging.info('aaaa') client = cosmos_client.cosmosclient(endpoint, key) logging.info('connected to db') try: id= "test" database_obj = get_or_create_db(client,database_name) container_obj = get_or_create_container(database_obj,container_name) item_dict = { "id": id, "lastname": "shandilya", "firstname": "vivek", "gender": "male", "age": 35 } populate_container_items(container_obj,item_dict) read_items(container_obj,id) query = "select * from c " query_items(container_obj, query) except exceptions.cosmoshttpresponseerror as e: logging.info('\nrun_sample has caught an error. {0}'.format(e.message)) finally: logging.info("\nquickstart complete") def main(mytimer: func.timerrequest) -> none: utc_timestamp = datetime.datetime.utcnow().replace( tzinfo=datetime.timezone.utc).isoformat() run_sample() logging.info(' sono partito') logging.info('python timer trigger function ran at %s', utc_timestamp)
output
:
functions: timertrigger1: timertrigger for detailed output, run func with --verbose flag. [2024-01-30t09:00:24.818z] executing 'functions.timertrigger1' (reason='timer fired at 2024-01-30t14:30:24.7842979+05:30', id=5499e180-4964-4d7e-b9f2-b024860945dd) [2024-01-30t09:00:24.822z] trigger details: unscheduledinvocationreason: ispastdue, originalschedule: 2024-01-30t14:30:00.0000000+05:30 [2024-01-30t09:00:25.022z] aaaa [2024-01-30t09:00:26.387z] connected to db [2024-01-30t09:00:28.212z] inserted item for shandilya family. item id: test [2024-01-30t09:00:28.373z] read item with id test. operation consumed 1 request units [2024-01-30t09:00:28.546z] quickstart complete [2024-01-30t09:00:28.548z] python timer trigger function ran at 2024-01-30t09:00:25.008468+00:00 [2024-01-30t09:00:28.547z] sono partito [2024-01-30t09:00:28.546z] query returned 1 items. operation consumed 1 request units [2024-01-30t09:00:28.592z] executed 'functions.timertrigger1' (succeeded, id=5499e180-4964-4d7e-b9f2-b024860945dd, duration=3793ms) [2024-01-30t09:00:29.296z] host lock lease acquired by instance id '000000000000000000000000aae5f384'.
{ "id": "test", "lastName": "Shandilya", "firstName": "Vivek", "gender": "male", "age": 35, "_rid": "ey58AO9yWqwCAAAAAAAAAA==", "_self": "dbs/ey58AA==/colls/ey58AO9yWqw=/docs/ey58AO9yWqwCAAAAAAAAAA==/", "_etag": "\"01001327-0000-1a00-0000-65b8baac0000\"", "_attachments": "attachments/", "_ts": 1706605228 }
Das obige ist der detaillierte Inhalt vonDer CosmosDB-Timer-Trigger funktioniert nicht ordnungsgemäß. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen an? Uvicorn ist ein leichter Webserver, der auf ASGI basiert. Eine seiner Kernfunktionen ist es, auf HTTP -Anfragen zu hören und weiterzumachen ...

Fastapi ...

Verständnis der Anti-Crawling-Strategie von Investing.com Viele Menschen versuchen oft, Nachrichten von Investing.com (https://cn.investing.com/news/latest-news) zu kriechen ...

Wie erstellt in Python ein Objekt dynamisch über eine Zeichenfolge und ruft seine Methoden auf? Dies ist eine häufige Programmieranforderung, insbesondere wenn sie konfiguriert oder ausgeführt werden muss ...
