有没有办法暂停连续的网络作业 - 在一定时间间隔内停止从服务总线接收消息? 我有一个不断接收发布数据的系统。然后发布的数据被发送到服务总线。我想知道是否有办法停止处理消息。当然,另一个解决方案是不发送这些消息 - 将它们保留在发送者系统的队列中。
最佳答案
您已经有了排队机制...服务总线。听起来您正在使用 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/