Azure WebJob Scale Out 只有 2 个作业在工作
Azure WebJob Scale Out only 2 Jobs working
我在3个实例中得到了一个小的WebJob运行,WebJob是由ServiceBusTrigger触发的,每个job大约需要20秒(为了测试我加了一个sleep)。
现在我向 ServiceBus 队列添加了 3 个项目,但只有 2 个 WebJob 实例在工作。
第三个实例在做什么,我怎样才能让这个实例也在队列中工作?
我的代码非常基础:
public class Functions
{
// This function will get triggered/executed when a new message is written
// on an Azure Queue called queue.
public static void ProcessQueueMessage([ServiceBusTrigger("jobs2")] string message, TextWriter log)
{
string url = "https://requestb.in/xxxxx";
log.WriteLine(message);
log.WriteLine("gotmsg");
Thread.Sleep(20000);
log.WriteLine("sending");
string postData = "test=" + message;
Console.WriteLine(postData);
System.Net.WebRequest req = System.Net.WebRequest.Create(url);
//Add these, as we're doing a POST
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
//We need to count how many bytes we're sending. Post'ed Faked Forms should be name=value&
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(postData);
req.ContentLength = bytes.Length;
System.IO.Stream os = req.GetRequestStream();
os.Write(bytes, 0, bytes.Length); //Push it out there
os.Close();
System.Net.WebResponse resp = req.GetResponse();
if (resp == null) return;
System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
log.WriteLine(sr.ReadToEnd().Trim());
}
}
What is the third instance doing and how can i get the instance to also work on the queue?
第三个实例应该作为默认值。我假设 Azure WebApp 对多个实例使用指定的 LoadBalance 策略。而且我们似乎没有办法配置 LoadBalance 策略。在您的情况下,似乎 3 条消息不足以进行测试。请尝试使用更多消息对其进行测试。我在我这边测试它,它工作正常。以下是我使用的发送消息的测试代码
QueueClient.CreateFromConnectionString("connection string", QueueName);
for (int i = 0; i < 20; i++)
{
var sendMessage = new BrokeredMessage("test message"+i);
client.Send(sendMessage);
}
我在3个实例中得到了一个小的WebJob运行,WebJob是由ServiceBusTrigger触发的,每个job大约需要20秒(为了测试我加了一个sleep)。
现在我向 ServiceBus 队列添加了 3 个项目,但只有 2 个 WebJob 实例在工作。
第三个实例在做什么,我怎样才能让这个实例也在队列中工作?
我的代码非常基础:
public class Functions
{
// This function will get triggered/executed when a new message is written
// on an Azure Queue called queue.
public static void ProcessQueueMessage([ServiceBusTrigger("jobs2")] string message, TextWriter log)
{
string url = "https://requestb.in/xxxxx";
log.WriteLine(message);
log.WriteLine("gotmsg");
Thread.Sleep(20000);
log.WriteLine("sending");
string postData = "test=" + message;
Console.WriteLine(postData);
System.Net.WebRequest req = System.Net.WebRequest.Create(url);
//Add these, as we're doing a POST
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
//We need to count how many bytes we're sending. Post'ed Faked Forms should be name=value&
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(postData);
req.ContentLength = bytes.Length;
System.IO.Stream os = req.GetRequestStream();
os.Write(bytes, 0, bytes.Length); //Push it out there
os.Close();
System.Net.WebResponse resp = req.GetResponse();
if (resp == null) return;
System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
log.WriteLine(sr.ReadToEnd().Trim());
}
}
What is the third instance doing and how can i get the instance to also work on the queue?
第三个实例应该作为默认值。我假设 Azure WebApp 对多个实例使用指定的 LoadBalance 策略。而且我们似乎没有办法配置 LoadBalance 策略。在您的情况下,似乎 3 条消息不足以进行测试。请尝试使用更多消息对其进行测试。我在我这边测试它,它工作正常。以下是我使用的发送消息的测试代码
QueueClient.CreateFromConnectionString("connection string", QueueName);
for (int i = 0; i < 20; i++)
{
var sendMessage = new BrokeredMessage("test message"+i);
client.Send(sendMessage);
}