public IQueueAck SendAsync(QueueItem message, int connectTimeout) { using ( Task <IQueueAck> task = Task <IQueueAck> .Factory.StartNew(() => PublishItem(message, EnsureConnectTimeout(connectTimeout)) , canceller.Token, TaskCreationOptions.None, TaskScheduler.Default)) { task.Wait(); if (task.IsCompleted) { IQueueAck ack = task.Result; return(ack); } else if (task.IsCanceled) { return(new QueueAck(MessageState.OperationCanceled, message)); } else if (task.IsFaulted) { return(new QueueAck(MessageState.OperationFailed, message)); } else { return(new QueueAck(MessageState.UnExpectedError, message)); } } }
IQueueAck ExecRout(QueueItem item, QueueHost qh) { if (qh == null) { throw new MessageException(MessageState.InvalidMessageHost, "Invalid QueueHost for Routing " + item.Host); } IQueueAck ack = null; if (qh.IsLocal) { item.Host = qh.HostName; MQueue Q = Get(item.Host); if (Q == null) { throw new MessageException(MessageState.InvalidMessageHost, "message.RoutHostName not found " + item.Host); } ack = Q.Enqueue(item); return(ack);// ptr.MessageState; } var api = new QueueApi(qh.NetProtocol); ack = api.SendAsync(item, 0); return(ack); }
//public static TransStream DoError(MessageState state, QueueCmd cmd, Exception ex) //{ // try // { // string lbl = ex.Message; // return QueueItem.Ack(state, cmd, ex).ToTransStream(); // //using (NetStream stream = new NetStream()) // //{ // // response.EntityWrite(stream, null); // // WriteReponse(pipeStream, stream.ToArray()); // //} // } // catch (Exception x) // { // QLogger.ErrorFormat("QueueResponse WriteError Exception: " + x.Message); // //var ack = new Message(MessageState.StreamReadWriteError, new MessageException(MessageState.StreamReadWriteError, "Invalid stream to write ack")); // //return ack.GetEntityStream(false); // return null; // } //} public static TransStream DoResponse(IQueueAck item) { if (item == null) { return(null); //throw new MessageException(MessageState.MessageError, "Invalid queue item to write response"); } QLogger.Debug("QueueController DoResponse IQueueAck: {0}", item.Print()); return(item.ToTransStream()); }
public static void SendItem(bool isAsync) { var host = QueueHost.Parse("tcp:127.0.0.1:15000?NC_Quick"); QueueApi q = QueueClient.GetApi(host); var item = QueueClient.CreateQueueItem("Hello world " + DateTime.Now.ToString("s"), "test"); IQueueAck ack = null; if (q.IsAsync) { ack = QueueClient.SendItemAsync(q, item, 0); } else { ack = QueueClient.SendItem(q, item, 0); } Console.WriteLine("State:{0},Creation:{1},Host:{2},Label:{3}, Identifier:{4}, Duration:{5}, item:{6}", ack.MessageState, ack.Creation, ack.Host, ack.Label, ack.Identifier, ack.Duration, item.Id); //var duration = DateTime.Now.Subtract(start); //var milliseconds = duration.TotalMilliseconds; //Console.WriteLine("duration: {0}, item: {1}", milliseconds, item); }