/// <summary> /// Here we do initial processing of requestData. /// <para>Processing of requestData can be passed to another object. Both for local and global messaging. Currenlty all processing is done in Entity. /// Entity uses Addresses to register in RMQ. /// </para> /// <para> Override this function to provide other threading models and remeber that this function is executed in the RMQ driver thread- switch ASAP.</para> public virtual void OnPreMessage(RequestData requestData) { //now everything is dispatched in thread pool ThreadPool.QueueUserWorkItem((r) => { //try release pending rpc if (Bus.TryHandleAsRPCResponse(this, requestData)) return; try { OnMessage(requestData); } catch (Exception ex) { //todo: log it //make sure that ack and RPC response (if necessary) is sent back requestData.RPCResponse(1, RequestData.ErrorCodeEnum.InternalError, ex.Message, null, null); } finally { //default response requestData.RPCResponse(RequestData.ErrorCodeEnum.Error, "default response"); } }); }