azure queuetrigger 中的单身人士无法按预期工作
singleton in azure queuetrigger not working as expected
我的理解显然是错误的,任何澄清都会有所帮助。
我认为将 [Singleton] 添加到 Web 作业会迫使它一个接一个 运行。
好像不是这样。
这是我非常基本的测试代码(针对包含大约 149 条消息的队列)
[Singleton] //just run one at a time
public static void ProcessQueueMessage([QueueTrigger("datatrac-stops-to-update")] string message, TextWriter log)
{
monitorEntities mDb = new monitorEntities();
//go get the record
int recordToGet = Convert.ToInt32(message);
var record = (from r in mDb.To_Process where r.Id == recordToGet select r).FirstOrDefault();
record.status = 5;
mDb.SaveChanges();
Console.WriteLine($"Finished record {message}");
}
当它 运行s 我在控制台上得到这个:
当我逐步执行时,我遇到了冲突错误。
我哪里不明白?
已解决 - 更多信息
这是我为解决这个问题所做的工作,就像 Haitham 在他的回答中所说的那样 [Singleton] 指的是 webjob 本身有多少个实例 运行ning -- 而不是每个实例处理了多少个项目。
这是通过修改我的 Main 来解决的:
static void Main(string[] args)
{
var config = new JobHostConfiguration();
config.Queues.BatchSize = 2;
设置为 1 时,一次只能 运行 1 个。
当设置为 2 像上面然后修改下面的代码:
public static void ProcessQueueMessage([QueueTrigger("datatrac-stops-to-update")] string message, TextWriter log)
{
var threadID = Thread.CurrentThread.ManagedThreadId;
Console.WriteLine($"{threadID} : started record {message}");
产生这种行为(这是预期的):
Link 我在上面找到文档的地方:
https://github.com/Azure/azure-webjobs-sdk/wiki/Queues#config
Singleton 并不意味着它会 运行 它一个接一个,主要是实例化 web 作业的实例 class.
如果您需要一次 运行 一个,您可以对静态变量使用锁来防止代码执行多次。
但无论如何我都不建议这样做,你必须看看为什么会出现冲突错误
我的理解显然是错误的,任何澄清都会有所帮助。
我认为将 [Singleton] 添加到 Web 作业会迫使它一个接一个 运行。 好像不是这样。
这是我非常基本的测试代码(针对包含大约 149 条消息的队列)
[Singleton] //just run one at a time
public static void ProcessQueueMessage([QueueTrigger("datatrac-stops-to-update")] string message, TextWriter log)
{
monitorEntities mDb = new monitorEntities();
//go get the record
int recordToGet = Convert.ToInt32(message);
var record = (from r in mDb.To_Process where r.Id == recordToGet select r).FirstOrDefault();
record.status = 5;
mDb.SaveChanges();
Console.WriteLine($"Finished record {message}");
}
当它 运行s 我在控制台上得到这个:
当我逐步执行时,我遇到了冲突错误。
我哪里不明白?
已解决 - 更多信息
这是我为解决这个问题所做的工作,就像 Haitham 在他的回答中所说的那样 [Singleton] 指的是 webjob 本身有多少个实例 运行ning -- 而不是每个实例处理了多少个项目。
这是通过修改我的 Main 来解决的:
static void Main(string[] args)
{
var config = new JobHostConfiguration();
config.Queues.BatchSize = 2;
设置为 1 时,一次只能 运行 1 个。 当设置为 2 像上面然后修改下面的代码:
public static void ProcessQueueMessage([QueueTrigger("datatrac-stops-to-update")] string message, TextWriter log)
{
var threadID = Thread.CurrentThread.ManagedThreadId;
Console.WriteLine($"{threadID} : started record {message}");
产生这种行为(这是预期的):
Link 我在上面找到文档的地方:
https://github.com/Azure/azure-webjobs-sdk/wiki/Queues#config
Singleton 并不意味着它会 运行 它一个接一个,主要是实例化 web 作业的实例 class.
如果您需要一次 运行 一个,您可以对静态变量使用锁来防止代码执行多次。 但无论如何我都不建议这样做,你必须看看为什么会出现冲突错误