Tag: 队列服务

调用OnMessage()后自动处理BrokeredMessage

我正在尝试从Azure Service Bus排队项目,以便我可以批量处理它们。 我知道Azure Service Bus有一个ReceiveBatch()但由于以下原因似乎有问题: 我一次最多只能获得256条消息,然后根据消息大小,这可能是随机的。 即使我查看有多少消息在等待,我也不知道有多少RequestBatch调用,因为我不知道每次调用会给我多少消息。 由于消息将继续存在,我不能继续发出请求,直到它为空,因为它永远不会是空的。 我决定只使用比浪费偷看更便宜的消息监听器,并且会给我更多的控制权。 基本上我试图让一定数量的消息建立,然后立即处理它们。 我使用计时器强制延迟,但我需要能够在他们进来时对我的物品进行排队。 基于我的计时器要求,似乎阻塞集合不是一个好选项,所以我试图使用ConcurrentBag。 var batchingQueue = new ConcurrentBag(); myQueueClient.OnMessage((m) => { Console.WriteLine(“Queueing message”); batchingQueue.Add(m); }); while (true) { var sw = WaitableStopwatch.StartNew(); BrokeredMessage msg; while (batchingQueue.TryTake(out msg)) // <== Object is already disposed { …do this until I have a thousand ready to be written […]