c# - Azure 服务总线连续 WebJob 暂停

标签 c# azure azure-webjobs azureservicebus

有没有办法暂停连续的网络作业 - 在一定时间间隔内停止从服务总线接收消息? 我有一个不断接收发布数据的系统。然后发布的数据被发送到服务总线。我想知道是否有办法停止处理消息。当然,另一个解决方案是不发送这些消息 - 将它们保留在发送者系统的队列中。

最佳答案

您已经有了排队机制...服务总线。听起来您正在使用 ServiceBusTrigger 属性以声明方式连接到队列。即

public static void ProcessQueueMessage([QueueTrigger("queue")] string message, TextWriter log)

但这并不是在连续网络作业中接收消息的唯一方法。您可以使用 QueueClient 对象来轻松接收这些消息:

var connectionString = "//connection string here//";
var queueName = "samplequeue";

var client = QueueClient.CreateFromConnectionString(cnStr, queueName);

client.OnMessage(message =>
{
   string msg = message.GetBody<string>();
   // Process message here...
});

Console.ReadLine();

(有关更多信息,请参阅 https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues。)

因此,在您的网络作业中,您可以监听两个总线:第一个是您已经用来处理业务消息的操作总线。新主题是控制总线。它始终在监听,但只有当您希望更改操作队列的行为时才向它发送消息。

因此,您将“START”发送到控制总线。收到该消息将调用上面的代码并导致操作总线开始处理消息。

如果要停止处理,请向控制总线发送“STOP”。收到此消息后,在操作总线上调用 client.Close();。这将暂停消息的处理,直到收到下一个“START”消息。

当然,您可以对此进行扩展。例如,您可以向控制总线发送“暂停 10 分钟”,这可以停止正在运行的总线,然后设置一个计时器以在 10 分钟后重新启动它。您只受您的想象力的限制!

就我个人而言,我可能会使用 Json 消息而不是纯文本,但只要适合您的需求即可。

关于c# - Azure 服务总线连续 WebJob 暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40784608/

相关文章:

Azure 应用程序 map 未连接 Application Insight

c# - 在联合身份 token 上获取 "not a valid Base-64 string"

azure - 发布为 Azure WebJob 在 VS 2013 中不起作用

azure - 按计划运行不再是 Azure Web 作业中的一个选项?

c# - WPF TextBox UpdateSourceTrigger=LostFocus 不断更新数据

c# - 多线程无法正常执行

c# - 如何让应用程序作为服务运行?

c# - 如何在线程中旋转这两个进程?

Azure ServiceBus REST API 队列中的消息总数

c# - Azure Webjob TimerTrigger 不工作