anchor.diff:  
   handle_info({message, _Channel, Message, _Pid}, St) ->
     error_logger:info_msg("ferryman_server receive message ~s", [Message]),
  -  case jsonrpc2:handle(Message, St#st.handler, fun jiffy:decode/1, fun jiffy:encode/1) of
  -    noreply ->
  -      error_logger:info_msg("ferryman_server don't reply for cast message ~s", [Message]),
  -      nop;
  -    {reply, Msg} ->
  -      {MsgAttrs} = jiffy:decode(Msg),
  -      Id = proplists:get_value(<<"id">>, MsgAttrs),
  -      error_logger:info_msg("ferryman_server reply for message ~s", [Id]),
  -      eredis:q(St#st.client, ["RPUSH", Id, Msg]),
  -      eredis:q(St#st.client, ["DEL", Id])
  -  end,
  +  Self = self(),
  +  spawn_link(fun() -> handle_request(Self, Message, St#st.handler) end),
     eredis_sub:ack_message(St#st.sub),
     {noreply, St};
   handle_info(_Info, #st{sub = Sub} = St) ->
  
positive.code: -module(ferryman_server).
  
  -export([
           start_link/5
          ]).
  
  -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
  
negative.code: code_change(_OldVsn, St, _Extra) -> {ok, St}.
  
  terminate(_Reason, _St) -> ok.
  
  %% ===================================================================
  %% PRIVATE
  %% ===================================================================
  
  handle_request(ParentPid, Message, Handler) ->
    case jsonrpc2:handle(Message, Handler, fun jiffy:decode/1, fun jiffy:encode/1) of
      noreply ->
        error_logger:info_msg("ferryman_server don't reply for cast message ~s", [Message]),
        nop;
      {reply, Msg} ->
        {MsgAttrs} = jiffy:decode(Msg),
        Id = proplists:get_value(<<"id">>, MsgAttrs),
        error_logger:info_msg("ferryman_server reply for message ~s", [Id]),
        put_reply(ParentPid, Id, Msg)
        % eredis:q(St#st.client, ["RPUSH", Id, Msg]),
        % eredis:q(St#st.client, ["DEL", Id])
    end.
  
  