当前位置: 首页 > 知识库问答 >
问题:

从Azure Webjobs管理数据库连接的策略

连翰
2023-03-14

我使用带有队列触发函数(依赖于Azure webjobs sdk)的Azure webjobs来执行一些后台处理工作。在webjobs中,我建立了与SQL Azure数据库的各种连接(使用PetaPoco,它使用system.data.sqlclient)。

我希望在我的数据库连接策略中有目的--特别是因为环境中存在一些固有的并发问题。

我应该如何处理webjob场景中的连接,考虑到上面描述的并发场景?当然,Webjobs只是长期存在的控制台进程(这些都是连续的Webjobs)。我是否应该在webjob启动时创建一个数据库连接,并在webjob的生存期内简单地重用该连接?当我需要时,我应该实例化并关闭每个函数的连接吗?

这些是我想要理解的事情。

共有1个答案

百里业
2023-03-14

当然,Webjobs只是长期存在的控制台进程(这些都是连续的Webjobs)。

进程是长期存在的进程,但对于,触发的子进程将在触发函数执行后释放。它意味着连接也会在子进程中自动释放。为了获得最佳的程序实践,我们最好在退出函数之前手动关闭它。

第二个并发场景是网站扩展场景,其中运行webjob本身的多个实例。这些当然是在不同的过程中。

WebJob SDK队列触发器将自动阻止由多个实例触发的队列。

如果web应用程序在多个实例上运行,则在每台机器上运行一个连续的WebJob,每台机器将等待触发器并尝试运行函数。WebJobs SDK队列触发器自动防止函数多次处理队列消息;函数不必被编写成幂等。但是,如果希望确保即使宿主web应用程序有多个实例,也只能运行函数的一个实例,则可以使用Singleton属性。

如何在允许并行执行和多实例的WebJobs SDK中使用Azure队列存储,我们可以从Doucment中获得更多信息。

 类似资料:
  • 问题内容: 我想在学习Guice的同时创建一个示例项目,该项目使用JDBC读取/写入SQL数据库。但是,在使用Spring多年之后,让它抽象化了连接处理和事务,我正在努力从概念上进行工作。 我想要一个可以启动和停止事务并调用大量存储库的服务,这些存储库可以重用相同的连接并参与相同的事务。我的问题是: 在哪里创建数据源? 如何授予存储库访问连接的权限?(ThreadLocal?) 管理事务的最佳方法

  • 问题内容: 在Java Servlet中管理数据库连接的最佳方法是什么? 当前,我只是在函数中打开一个连接,然后在中将其关闭。 但是,我担心“永久地”保持数据库连接可能是一件坏事。 这是处理此问题的正确方法吗?如果没有,有什么更好的选择? 编辑:给出更多的说明:我尝试为每个请求简单地打开/关闭一个新连接,但是通过测试,由于创建了太多的连接,我看到了性能问题。 通过多个请求共享连接是否有任何价值?此

  • 我们正在尝试将我们的单片应用程序转换为基于微服务的体系结构。我们使用Postgresql作为单一应用程序中的数据库之一,并使用BoneCP进行连接池。 当这个整体被拆分为多个独立的微服务,每个服务都运行在不同的JVM中时,我可以考虑两种连接池选项 BoneCP或任何适合每个微服务的连接池-我的初步研究表明,这是主要选择。可以对每个服务的连接需求进行细粒度控制。但是,不利的一面是,随着服务数量的增加

  • 问题内容: 我在Web应用程序中使用spring-boot,并使用spring- jpa从数据库中读取/写入数据库。它工作得很好,但是我想了解如何管理数据库连接。以下是我的数据库属性配置: 我已将最大连接数设置为500。当用户在我的spring应用程序上发出请求时,将为他打开数据库连接。完成请求后,spring jpa会关闭此连接吗?如果没有,它将何时关闭未使用的连接? 我已经阅读了http://

  • 我从http://docs.spring.io/spring-data/jpa/docs/current/reference/html/阅读了spring jpa参考文档。但它没有提到任何关于联系的事情。

  • 我正在构建一个节点应用程序,它将查询简单的和更复杂的(多连接)查询。我正在寻找关于我应该如何管理mySQL连接的建议。 我有以下几个要素: server.js:express Router1.js(虚构名称):快速路由器中间件 Router2.js(虚构名称):快速路由器中间件 我是否应该在每次请求“/router1/”时都连接到mysql,就像本例中那样,还是最好在启动时保持一个连接打开?作为: