问题标签 [azure-webjobssdk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3971 浏览

azure - Azure WebJob QueueTrigger 重试策略

我想让我的队列每 90 分钟重试一次失败的 webjobs,并且只尝试 3 次。

创建队列时,我使用以下代码

但是,当模拟失败的网络作业尝试时,队列使用默认的重试策略。我错过了一些东西。

0 投票
1 回答
2359 浏览

azure - Azure WebJobs 能否按需轮询队列?

我有一个 WebJob,当用户将文件上传到 blob 存储时触发它 - 它由上传完成后创建的队列存储消息触发。

根据文件的用途,它会将消息发布到其他队列以触发处理作业。

其中一些作业时间紧迫,运行速度相对较快。在一种情况下,处理大约需要三秒钟,用户正在等待结果。

但是,由于最小队列轮询间隔为 2 秒,因此用户必须等待两个 WebJobs 被调用的时间通常是其等待时间的两倍。

我尝试将两个 WebJobs 合并为一个,希望当第一个处理程序发布队列消息时,会立即触发相应的处理处理程序,但实际上它始终等待两秒钟才能接收到消息。

我的问题是,如果我知道有消息等待,是否有办法告诉我的 WebJob 立即从同一个 WebJob 中检查队列触发器?或者甚至更好地配置它以在我从 WebJob 内部发布到队列时立即检查队列触发器?

或者切换到服务总线队列会提高对新消息的响应能力?

更新

在有关使用 blob 触发器的文档中,它说:

使用 Blob 属性创建的 Blob 有一个例外。当 WebJobs SDK 创建新 blob 时,它会立即将新 blob 传递给任何匹配的 BlobTrigger 函数。因此,如果您有一系列 blob 输入和输出,SDK 可以有效地处理它们。但是,如果您希望为通过其他方式创建或更新的 blob 运行 blob 处理函数的低延迟,我们建议使用 QueueTrigger 而不是 BlobTrigger。

http://azure.microsoft.com/en-gb/documentation/articles/websites-dotnet-webjobs-sdk-storage-blobs-how-to/

然而,没有提到任何类似的队列。这意味着如果您在这种情况下需要非常低的延迟,那么 blob 比队列更好,这似乎是错误的。

更新 2

我最终通过将编排代码从第一个 WebJob 中拉出并进入应用程序的服务层并删除 WebJob 来解决这个问题。无论如何,它运行速度很快,所以也许将其分离到自己的 WebJob 中是一种矫枉过正。这意味着只需要在文件上传后触发处理 WebJob。

0 投票
2 回答
708 浏览

c# - 我怎样才能确保我不会遇到这种竞争状况?

我当前的进程以以下方式运行:

1.) 用户在前端应用程序中输入 URL 进行分析

2.) 前端验证 URL 并在包含 URL 属性的表中创建 URL 记录

3.) 前端在表中创建/更新一行,跟踪 URL 所处的处理阶段(每个 URL 都有自己的内部 ID)

3.A) 状态码更新为“排队”状态

---- 表格定义:

4.) 前端向包含提交 URL 的内部 ID 的 Azure 存储队列发送消息

第一条消息发送到队列后------------>

4.A) 在 UI 中创建一个对象供用户单击(以“刷新”数据)

4.B)用户在创建的对象上单击(这很可能会发生)一旦创建(如果验证则立即)

4.C) 另一条消息被发送到包含 URL ID 的队列

<--------------------------------

5.) 一个正在运行的 azure webjob(后台任务)不断拾取这些消息并开始处理

6.) 网络作业确定此 URL 是否已准备好进行处理

.....它准备好开始处理如果

  • 它是新的(LastUpdated 字段为空)
  • 附加到项目的状态代码表示错误
  • 距离上次更新已 15 分钟

.....如果它退出

  • 消息中的 ID 无效
  • 附加的状态代码表示它目前正在处理中
  • 距离 LastUpdated 不到 15 分钟

一旦确定被认为可以继续...

  • 如果是新的,webjob 会将 LastUpdated 更新为 Datetime.Now
  • 在流程的每个步骤开始时,状态代码都会更新以反映这一点
  • 在该过程的最后,LastUpdated 被更新为当前时间

  • 一个 try catch 围绕着这个过程

a.) 如果过程出错,则更新状态代码以反映

b.) 一条新消息被推入队列进行重试

确定 URL 是否可以解析的函数:

队列消息通过这个函数进入:

...现在的问题是,这个连续运行的 webjob 一次可以接收多条消息(我想将其扩展到更多的 webjobs 从同一个队列中读取)

如何确定 IsReadyToParse() 函数实际上反映了当前的处理状态?

如果数据库即将将状态代码更新为“正在处理”,但另一个线程刚刚读取了状态代码并给出了 OK 以继续该过程怎么办?

0 投票
2 回答
1030 浏览

c# - WebJob ServiceBus 主题权限

我参与了一个多层项目,其中一部分是使用来自第三方系统的“事件”流。供应商通过 Azure 服务总线主题发布这些 - 他们提供、控制和管理总线。我们只提供了 URI、TopicName 和订阅详细信息。

我们的方法是组合一个 Webjob,使用ServiceBusTriggerSDK 中提供的功能来处理侦听新消息并触发将它们处理到我们的系统中。但是,我们似乎遇到了障碍,因为作业不断无法从主题中读取。这项工作以模糊的方式失败Timeout Exception

但更进一步,跟踪包括:

供应商随后确认订阅对该主题的唯一许可/声明是Listen

任何人都可以确认许可要求是ServiceBusTrigger什么?

作为+1,假设它出于某种原因需要更多Listen(即需要Manage),有人愿意提出替代方法吗?失去 WebJob 基础设施似乎是一种耻辱(该项目已经有 3 个其他工作)——尤其是失去了诸如主题消息的异步和并发处理之类的功能

0 投票
1 回答
545 浏览

azure - 如果是,Azure Webjob 支持异步执行,如何?

我想执行我的Azure Webjob方法async,但我想知道Azure Webjob支持Async Execution or not

任何人都可以在这方面帮助我。执行webjob方法ProcessSub1MessagesProcessSub2Messages异步。

0 投票
2 回答
4532 浏览

azure - 如何在没有“始终开启”的情况下保持 Azure WebJob 运行

我有一个与网站关联的连续网络作业,并且我在共享模式下运行该网站。我不想使用 Always On 选项,因为我的应用程序并不真正需要。我只想在对我的网站进行调用时处理该消息。

我的问题是,即使我每 5 分钟在我的网站上不断调用一个虚拟的保持活动方法,该方法在几分钟后向该 Web 作业监控的队列发布一条消息,该工作仍然会停止。

我的 webjob 是一个使用 WebJob SDK 构建的简单控制台应用程序,其代码如下

消息处理函数如下所示:

该工作的消息日志基本上说

我不介意这种情况是否发生,但是当网站开始下一个保持活动状态的调用时,webjob 没有启动。所有消息都排队,直到我进入管理仪表板或 SCM 门户,如下所示

我可以看到这样的状态:

如果有人可以帮助我了解这里出了什么问题,我将不胜感激。

0 投票
1 回答
734 浏览

azure-webjobs - 如何使用 azure sdk(使用 azure webjobs)为 azure queue 设置可见性(时间)选项?

我在我的 azure webjobs(控制台应用程序)中的功能正在正确地完成工作并从我的队列中获取消息,但我需要一种方法来控制“时间可见”选项或能够在收到消息后从队列中删除消息.

功能:

我知道当您以编程方式访问队列时,它是您传入的参数。但是我没有以这种方式访问​​它。在 webjobs 应用程序中使用 azure sdk 的正确方法是什么?

编辑:

可见性选项是从作业从队列中提取消息到消息重新出现在队列中的时间(因为该过程尚未完成并假定它失败)。在我的情况下,默认的 30 秒不足以让进程一直运行。

参考(部分:如何:利用其他选项使消息出队): http ://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-queues/

0 投票
1 回答
1575 浏览

azure - Azure WebJob 函数有错误

我有一个 Azure WebJob,当它从队列中获取消息时出现错误

“函数出现错误。有关详细信息,请参阅 Azure WebJobs SDK 仪表板”。

仪表板没有显示任何错误,它只是坚持我的连接字符串没有设置它们,否则它不会接收到消息。

在本地调试时,如何找出实际错误是什么?

0 投票
1 回答
312 浏览

visual-studio-2012 - 为 Visual Studio 2012 配置 Windows Azure webjobs sdk

我有一个在 Visual Studio 2012 中使用 .Net 框架 4 开发的现有应用程序。我的项目托管在云 Azure 上。我想在其中添加一个 Windows Azure WebJob 项目,但找不到配置它的扩展。

我在下面找到了一个扩展,但它不适用于 2012 https://visualstudiogallery.msdn.microsoft.com/f4824551-2660-4afa-aba1-1fcc1673c3d0

有什么方法可以为 2012 年配置它。我安装了 Windows Azure 2.2 sdk。

0 投票
1 回答
107 浏览

c# - 无法让它 24/7 运行并由队列消息触发

像往常一样,本来应该很简单的事情变成了一场试图寻找文档和解决初期问题的游戏。

我正在尝试运行一个简单的 webjob,在本地运行良好,但通过 VS2013 将其部署到 azure 似乎可以运行,但运行会产生错误。这显然是一个已知问题,我需要将 exe 复制到发布文件夹的根目录,所以我将构建设置为构建到项目的根目录中。这似乎有效。

webjob 是根据队列中的消息按需设置的。

首先在 webjob 仪表板上,我收到有关连接字符串的警告,但我在 app.config 和网站门户中也有这些字符串。所以我不知道为什么会出现这种情况?

其次,一旦我发布我右键单击并从 VS2013 运行网络作业,它就会启动并且似乎可以工作。但它运行并最终因错误而超时。该站点设置为始终打开,它是一个标准站点,不运行任何其他站点。

那么我应该怎么做才能保持 webjob 运行呢?

作业本身有一个异步签名,因为它在里面用 documentdb 做事,所以有等待等等。因为它似乎正在工作,我认为一切都很好,但这可能会导致问题?

关键是它为什么运行然后停止?我应该怎么做才能让这个 24/7 全天候监听队列消息?