如何在 Azure 共享托管中启动 Hangfire(“始终开启”)?

问题描述 投票:0回答:3

我想将一个简单的共享主机 ASP.NET MVC 站点部署到 Azure(使用免费站点选项),该站点使用 Hangfire 运行计划任务。

问题是该站点仅在第一个请求时启动,因此 Hangfire 直到那时才开始安排任务。使用 IIS 或专用 VM,您可以设置“始终开启”选项来预热站点。但这在共享主机中是不可能的。

对此我能做什么?我考虑购买最小的虚拟机,称为“A0”,并在其中放置一个 ping 脚本以确保我的站点始终正常运行。这可行,但似乎有点矫枉过正。

还有其他好的选择吗?

asp.net azure hangfire
3个回答
7
投票

我知道的老问题,但也许我遗漏了一些东西。我使用 UptimeRobot (https://uptimerobot.com/),因为它不断向您的 Web 服务器发出请求以保持其活动状态。这不是比自己创建自动化作业简单得多吗?再说一遍,我不确定处于共享环境中是否会使 UptimeRobot 毫无用处,但这只是我想传递的一个想法。


4
投票

如果您仍然想使用 Azure 网站,则必须从 SHARED 切换到 BASIC(这是第一个具有 ALWAYS ON 选项的网站),但它比最便宜的 VM 贵 3 倍以上。

如果我是你,我会选择最便宜的云服务 - Web 角色。它的成本比最便宜的 VM 贵一点,但它已经针对网站进行了配置,您不必自己设置所有内容 + 您可以使用 Visual Studio 来部署它,您可以通过 RDP 到盒子等等。

请参阅 http://azure.microsoft.com/en-us/pricing/details/cloud-services/ 了解定价详细信息。

但正如评论中所建议的,Azure Schedule 值得一看。

更新:(警告 - 有趣但完全不严肃的解决方案)

使用 Azure Scheduler 对您的网页执行 ping 操作以使其保持活动状态;-) 您可以使用免费套餐每小时创建最多 5 个具有最大执行次数的作业。这意味着您可以创建 5 个职位,每 12 分钟就会对您的网站执行一次 ping 操作。


0
投票

这个答案来晚了,但它省去了我一些麻烦。

我必须在 Azure 中使用 Hangfire 作业运行一个非常简单的站点来进行一些处理。为了实现“始终在线”而将其扩展到 B 计划或更高版本的成本太高了。

在免费层中保持应用程序服务始终开启的一个解决方法是创建一个计划的 Hangfire 作业,该作业将在网站启动并自行 ping 后每 10 分钟运行一次。

即使您的应用程序不需要 Hangfire,您也可以为了计划的作业而将其放入其中,并使用 InMemory 存储来保存作业,只要它每 10 分钟 ping 一次站点即可。

这将使应用程序服务保持预热并始终开启,而不会耗尽使用配额 - 每日 CPU 时间消耗可能少于 10 秒,远低于免费套餐每日 60 分钟的限制。对于 Azure SQL 数据库,DB DTU 消耗也非常低。

作业设置示例:

// Call this right after your app service starts.
RecurringJob.AddOrUpdate<PingJob>("Azure Always On", x => x.PingAsync("https://<yousite>.azurewebsites.net/"), "*/10 * * * *");

以及

PingJob
的实现,使用包
Flurl.Http
来保持超级简单:

using Flurl.Http;

namespace YourAwesomeApp;

public class PingJob
{
    public Task PingAsync(string url) => url.GetAsync();
}
© www.soinside.com 2019 - 2024. All rights reserved.