private void Enqueue(string queueName, string data) { using (var queue = PersistentQueue.WaitFor(Path.Combine(queryRoot, queueName), TimeSpan.FromSeconds(30))) using (var session = queue.OpenSession()) { session.Enqueue(Encoding.UTF8.GetBytes(data)); session.Flush(); } }
void AddToQueue(byte[] data) { Thread.Sleep(150); using (var queue = PersistentQueue.WaitFor(SharedStorage, TimeSpan.FromSeconds(30))) using (var session = queue.OpenSession()) { session.Enqueue(data); session.Flush(); } }
byte[] ReadQueue() { Thread.Sleep(150); using (var queue = PersistentQueue.WaitFor(SharedStorage, TimeSpan.FromSeconds(30))) using (var session = queue.OpenSession()) { var data = session.Dequeue(); session.Flush(); return(data); } }
public void can_sequence_queues_on_separate_threads() { // ReSharper disable InconsistentNaming int t1s, t2s; // ReSharper restore InconsistentNaming t1s = t2s = 0; const int target = 100; var t1 = new Thread(() => { for (int i = 0; i < target; i++) { using (var subject = PersistentQueue.WaitFor("queue_b", TimeSpan.FromSeconds(10))) { using (var session = subject.OpenSession()) { Console.Write("("); session.Enqueue(new byte[] { 1, 2, 3, 4 }); Interlocked.Increment(ref t1s); session.Flush(); Console.Write(")"); } Thread.Sleep(0); } } }); var t2 = new Thread(() => { for (int i = 0; i < target; i++) { using (var subject = PersistentQueue.WaitFor("queue_b", TimeSpan.FromSeconds(10))) { using (var session = subject.OpenSession()) { Console.Write("<"); session.Dequeue(); Interlocked.Increment(ref t2s); session.Flush(); Console.Write(">"); } Thread.Sleep(0); } } }); t1.Start(); t2.Start(); t1.Join(); t2.Join(); Assert.That(t1s, Is.EqualTo(target)); Assert.That(t2s, Is.EqualTo(target)); }
/// <summary> /// 将一个对象放入指定的队列 /// 有可能在不同进程中入列和出列 /// </summary> /// <param name="queueName">队列名称</param> /// <param name="data">(序列化的)对象</param> public static void Enqueue(string queueRootFolder, string queueName, string data) { if (_queueRootFolder != null && _queueRootFolder != queueRootFolder) { throw new Exception("队列根目录必须与CreateDequeuers指定的一致"); } using (var queue = PersistentQueue.WaitFor(Path.Combine(queueRootFolder, queueName), TimeSpan.FromSeconds(60))) using (var session = queue.OpenSession()) { session.Enqueue(Encoding.UTF8.GetBytes(data)); session.Flush(); } }
/// <summary> /// 尝试获取Bus提供的文件夹下所以队列,并检查是否有数据 /// </summary> /// <returns></returns> protected override IntervalTask.WorkingState DoWork() { Directory.GetDirectories(_queueRootFolder, "*", SearchOption.TopDirectoryOnly) .AsParallel().ForAll(queuePath => { if (File.Exists(Path.Combine(queuePath, "meta.state"))) //检验是否是queue的文件夹 { var queueName = Path.GetFileName(queuePath); using (var queue = PersistentQueue.WaitFor(Path.Combine(_queueRootFolder, queueName), TimeSpan.FromSeconds(60))) if (queue?.EstimatedCountOfItemsInQueue > 0) { QueueWorkerBus.StartWorkersForQueue(queueName); } } }); return(IntervalTask.WorkingState.BUSY); }
/// <summary> /// 每次从队列取出一个并处理 /// </summary> /// <returns></returns> protected override WorkingState DoWork() { var isWorking = false; string dataString = null; using (var queue = PersistentQueue.WaitFor(Path.Combine(_queueRootFolder, _queueName), TimeSpan.FromSeconds(60))) using (var session = queue.OpenSession()) { var data = session.Dequeue(); if (data != null) { dataString = Encoding.UTF8.GetString(data); Helper.Log($"Get Dequeue Data : {dataString}"); } session.Flush(); } if (dataString != null) { isWorking = true; try { Helper.Log($"Start Processing Dequeue Data : {dataString}"); _dequeueAction(dataString); } catch (Exception ex) { var msg = $"Error Processing Dequeue Data : {dataString}"; Helper.Error(ex, msg); } finally { //防止在处理过程中断电 Helper.Log($"End Processing Dequeue Data : {dataString}"); } } return(isWorking ? WorkingState.BUSY : WorkingState.IDLE); }
public void Setup() { _q = PersistentQueue.WaitFor("./queue", TimeSpan.FromSeconds(10)); }