返回顶部
首页 > 资讯 > 精选 >cosmosdb 的计时器触发器无法正常工作
  • 527
分享到

cosmosdb 的计时器触发器无法正常工作

2024-02-22 13:02:39 527人浏览 独家记忆
摘要

问题内容 我对我的函数应用“timertrigger”有疑问。 我开发了此功能来与 telegram 机器人进行通信,以便在 api 请求后发送消息。 我在本地尝试过该功能应用程序,效

问题内容

我对我的函数应用“timertrigger”有疑问。

开发了此功能来与 telegram 机器人进行通信,以便在 api 请求后发送消息。

我在本地尝试过该功能应用程序,效果很好。但是,当我尝试使用 cosmosdb 存储信息时,遇到问题并且无法保存信息。

我已经设置了将我的应用程序与 telegram 和 cosmosdb 连接所需的所有变量和内容

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)

我已经开始我的功能

func host start --port 7072

但我认为与数据库的连接出了问题,因为 console.log('connected to db') 没有被打印。

似乎所有与cosmosdb相关的操作都没有执行,如果有错误不知道如何解决。

我的终端中没有任何错误,但正如我所说,cosmosdb 似乎不起作用。

我不确定是否向您提供了所有必要的信息。感谢您的帮助。


正确答案


我在使用异步函数时也遇到了同样的问题。当我使用非异步函数时,它对我有用。

参考请查看此 document

我的代码: 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
}

以上就是cosmosdb 的计时器触发器无法正常工作的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: cosmosdb 的计时器触发器无法正常工作

本文链接: https://lsjlt.com/news/567179.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • cosmosdb 的计时器触发器无法正常工作
    问题内容 我对我的函数应用“timertrigger”有疑问。 我开发了此功能来与 telegram 机器人进行通信,以便在 api 请求后发送消息。 我在本地尝试过该功能应用程序,效...
    99+
    2024-02-22
  • mysql触发器的工作原理是什么
    MySQL触发器是一种特殊类型的存储过程,它在指定的事件发生时自动执行。触发器可以在数据库表中的数据发生更改之前、之后或替代发生更改...
    99+
    2023-10-12
    mysql
  • sql触发器的工作原理是什么
    SQL触发器是一种特殊的存储过程,它会在数据库表的某个特定事件发生时自动触发执行。触发器能够对表的INSERT、UPDATE、DEL...
    99+
    2023-10-25
    sql
  • Oracle Trigger触发器的正确使用方法
    Oracle Trigger是一种在数据库中定义的特殊对象,它可以在特定的数据库操作(如插入、更新或删除)发生时自动触发相关的操作。...
    99+
    2023-09-23
    Oracle
  • Windows11上的麦克风无法正常工作如何解决
    这篇“Windows11上的麦克风无法正常工作如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来...
    99+
    2023-04-22
    windows11
  • MySQL 触发器中的“FOR EACH ROW”如何工作?
    实际上“FOR EACH ROW”意味着更新或删除的每个匹配行。换句话说,我们可以说触发器并不应用于每一行,它只是说对每个受影响的表行执行触发器主体。我们可以通过以下示例来说明这一点 -示例在此示例中,我们创建两个表,Sample 和 Sa...
    99+
    2023-10-22
  • 如果您的iPhone相机无法正常工作该怎么办
    基本疑难解答:重新启动iPhone解决iPhone相机问题的第一步很简单,但非常有效:重新启动iPhone。无法解释的故障通常可以通过重新启动系统来解决。以下是您的操作方法:按住电源按钮(位于设备的右侧或顶部,具体取决于型号),直到出现“滑...
    99+
    2023-08-06
  • 数据库触发器的工作原理是什么
    数据库触发器是一种特殊的数据库对象,可以在数据库中的指定操作发生时自动执行一些预定义的操作。它的工作原理主要包括以下几个步骤: ...
    99+
    2023-10-24
    数据库
  • 租用美国服务器时无法正常运行的原因有哪些
    租用美国服务器时无法正常运行的原因有:1、美国服务器硬件设备出现故障导致;2、美国服务器搭建的网站程序使服务器负担过重导致;3、业务规模扩大,美国服务器无法满足需求时会影响服务器正常运行;4、其他问题,如服务器受到攻击、机房环境、网络环境等...
    99+
    2024-04-02
  • 服务器无法正常运行的原因有哪些
    服务器无法正常运行的原因有:1、服务器的硬件设备出现老化、陈旧或损坏,导致传输速度、响应速度及处理速度等受阻碍;2、网站程序过多,导致服务器的负担过重,从而影响服务器的正常运行;3、服务器空间容纳超出临界点,存储空间不足,从而影响服务器的正...
    99+
    2024-04-02
  • 服务器无法正常运行的原因是什么
    服务器无法正常运行的原因可能有很多种,以下是一些常见的原因: 1.硬件故障:服务器的硬件部件(如CPU、内存、硬盘等)出现故障可能导...
    99+
    2024-04-22
    服务器
  • Win7系统中的桌面小工具无法使用或显示不正常时如何修复
     Win 7系统相比较win XP增加了许多常用小程序的集合,有“日历”、“时钟”、“便签”等等。但是当Win 7系统中的桌面小工具无法使...
    99+
    2023-06-04
    Win7 桌面小工具 工具 桌面 系统
  • 造成服务器无法正常运行的原因有哪些
    造成服务器无法正常运行的原因有:1、服务器的硬件设备出现出现陈旧、老化以及损坏等问题导致;2、服务器网站程序的页面大小太大,导致服务器负担过重,从而影响正常运行;3、服务器网站数据量不断增加,导致服务器存储空间不足而影响网站正常运行。具体内...
    99+
    2024-04-02
  • 香港服务器无法正常使用的原因有哪些
    香港服务器无法正常使用的原因有:1、网站访问量突然增大,香港服务器无法承受导致;2、香港服务器后台运行的程序过多导致服务器突然黑屏或死机;3、香港服务器硬件出现故障导致无法正常使用;4、服务器管理员操作不当导致香港服务器出现故障。具体内容如...
    99+
    2024-04-02
  • 美国服务器无法正常使用的情况有哪些
    美国服务器无法正常使用的情况有:1、美国服务器硬件设备出现故障导致;2、美国服务器搭建的网站程序使服务器负担过重导致;3、业务规模扩大,美国服务器无法满足当前业务需求时导致;4、其他问题,如服务器受到攻击、机房环境、网络环境等因素所导致。具...
    99+
    2024-04-02
  • 连接云服务器凭据无法工作的原因
    如果您的云服务器凭据无法工作,请检查以下几个方面: 云服务器的网络连接速度:检查您的网络连接速度。如果您的网络连接速度过慢,服务器可能无法正常工作,这可能会导致云服务器的数据传输中断。 云服务器的内存:检查云服务器的内存。如果云服务器的...
    99+
    2023-10-27
    凭据 原因 服务器
  • SQLServer2005触发器提示其他会话正在使用事务的解决方法
    SQLServer2005触发器提示其他会话正在使用事务的解决方法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希...
    99+
    2024-04-02
  • android之计时器(Chronometer)的使用以及常用的方法
    在Android的SDK中,为我们提供了一个计时器,这个计时器称为Chronometer,我们可以成它为Android的一个组件,同时它也具备自己独有的方法。下面我们举例介绍下...
    99+
    2022-06-06
    方法 计时器 Android
  • Linux下Tomcat启动正常,但浏览器无法访问的解决方法
    1、服务器可ping通 2、服务器抓本地的http请求包,可以抓到 3、本地抓服务器返回的http响应包,抓不到 经过查找,是由于开启了Linux防火墙 查看防火墙配置(需要root权限) [root@lo...
    99+
    2022-06-04
    解决方法 无法访问 浏览器
  • 租用美国服务器无法正常运行的原因有哪些
    租用美国服务器无法正常运行的原因有:1、美国服务器的硬件设备出现出现陈旧、老化以及损坏等问题导致;2、美国服务器网站程序的页面大小太大,导致服务器负担过重,从而影响正常运行;3、美国服务器网站数据量不断增加,导致服务器存储空间不足而影响网站...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作