/// <summary> /// Push a request in right custom output /// </summary> /// <param name="order"></param> /// <returns></returns> public TContext Execute(ActionOrder order) { TContext context = null; if (!_dic.TryGetValue(order.Name, out ActionModel action)) { throw new InvalidOperationException(order.Name); } order.ExecutedAt = ClockActionBus.Now(); Stopwatch sp = new Stopwatch(); try { sp.Start(); context = (TContext)action.Execute(this, order); order.Result = context.Result; order.Success = true; } catch (Exception e) { context.Exception = e; } finally { sp.Stop(); string key = string.Empty; Trace.WriteLine(new { Key = key, action.Name, ElapsedTime = sp.Elapsed }, ConstantsCore.PerfMon); } return(context); }
public void UnserializeTest() { var o = new ActionOrder() { Uuid = Guid.NewGuid().ToString(), Name = "actionTest", ExecutedAt = ClockActionBus.Now(), PushedAt = ClockActionBus.Now(), Result = "ok", Success = false, }.Argument("arg1", "{ \"test\": \"ok\" }") ; var txt = o.ToString(); var p = ActionOrder.Unserialize(txt); Assert.AreEqual(o.ExecutedAt, p.ExecutedAt); Assert.AreEqual(o.Name, p.Name); Assert.AreEqual(o.PushedAt, p.PushedAt); Assert.AreEqual(o.Result, p.Result); Assert.AreEqual(o.Success, p.Success); Assert.AreEqual(o.Uuid, p.Uuid); Assert.AreEqual(o.Arguments.Count, 1); Assert.AreEqual(o.Arguments.Count, p.Arguments.Count); var txt2 = p.ToString(); var q = ActionOrder.Unserialize(txt2); Assert.AreEqual(p.Arguments["arg1"].Value, q.Arguments["arg1"].Value); Assert.AreEqual(txt, txt2); }
private Task Callback(IBrokerContext context) { var ctx = (ActionBusContext)_action.Evaluate(context.Utf8Data); if (ctx.Exception == null) { _acknowledgeQueue.Publish( new { context.Utf8Data, Exception = ctx.Exception } ); context.Commit(); } else { if (context.CanBeRequeued()) { context.RequeueLast(); } else { Dictionary <string, object> _headers = new Dictionary <string, object>(); foreach (var item in context.Headers) { _headers.Add(item.Key, System.Text.Encoding.ASCII.GetString((byte[])item.Value)); } _deadQueue.Publish( new { RepushedAt = ClockActionBus.Now(), OriginExchange = context.Exchange, OriginRoutingKey = context.RoutingKey, ctx.Exception }, _headers ); context.Commit(); } } return(Task.CompletedTask); }