diff --git a/samples/dubbo-sample-service/src/main/java/org/apache/dubbo/erlang/sample/service/impl/UserOperatorImpl.java b/samples/dubbo-sample-service/src/main/java/org/apache/dubbo/erlang/sample/service/impl/UserOperatorImpl.java
index c62913d..0670887 100644
--- a/samples/dubbo-sample-service/src/main/java/org/apache/dubbo/erlang/sample/service/impl/UserOperatorImpl.java
+++ b/samples/dubbo-sample-service/src/main/java/org/apache/dubbo/erlang/sample/service/impl/UserOperatorImpl.java
@@ -21,6 +21,7 @@
 import org.apache.dubbo.erlang.sample.service.bean.UserInfoRequest;
 import org.apache.dubbo.erlang.sample.service.bean.UserRes;
 import org.apache.dubbo.erlang.sample.service.facade.UserOperator;
+import org.apache.dubbo.rpc.RpcContext;
 
 public class UserOperatorImpl implements UserOperator {
 
@@ -46,6 +47,7 @@
         info.setUserAge(99);
         info.setUserId("id123");
         info.setUserName("中文姓名");
+        RpcContext.getContext().setAttachment("attachment_test_key","attachment_test_value");
         return info;
     }
 
diff --git a/src/dubbo_invoker.erl b/src/dubbo_invoker.erl
index e9bbc4d..05aea10 100644
--- a/src/dubbo_invoker.erl
+++ b/src/dubbo_invoker.erl
@@ -37,34 +37,14 @@
     {error, Reason :: timeout|no_provider|any()}.
 invoke_request(Interface, Request, RequestOption) ->
     invoke_request(Interface, Request, RequestOption, self()).
-%%    invoke_request(Interface, Request, maps:get(ctx, RequestOption, []), RequestOption, self()).
 
 
 -spec invoke_request(Interface :: binary(), Request :: #dubbo_request{}, RpcContext :: list(), RequestState :: map(), CallBackPid :: pid()) ->
     {ok, reference()}|
     {ok, reference(), Data :: any(), RpcContent :: list()}|
     {error, Reason :: timeout|no_provider|request_full|any()}.
-invoke_request(Interface, Request, RpcContext, RequestState, CallBackPid) ->
-    case dubbo_provider_consumer_reg_table:select_connection(Interface, Request#dubbo_request.mid) of
-        {ok, #connection_info{pid = Pid, host_flag = HostFlag}} ->
-            case dubbo_traffic_control:check_goon(HostFlag, 199) of
-                ok ->
-                    Request2 = merge_attachments(Request, RpcContext),
-                    {ok, RequestData} = dubbo_codec:encode_request(Request2),
-                    Ref = get_ref(RequestState),
-                    gen_server:cast(Pid, {send_request, Ref, Request2, RequestData, CallBackPid, RequestState}),
-                    case is_sync(RequestState) of
-                        true ->
-                            sync_receive(Ref, get_timeout(RequestState));
-                        false -> {ok, Ref}
-                    end;
-                full ->
-                    {error, request_full}
-            end;
-        {error, none} ->
-            logger:error("[INVOKE] ~p error Reason no_provider", [Interface]),
-            {error, no_provider}
-    end.
+invoke_request(Interface, Request, _RpcContext, _RequestState, CallBackPid) ->
+    invoke_request(Interface,Request,#{},CallBackPid).
 
 invoke_request(Interface, Request, RequestOption, CallBackPid) ->
     case dubbo_provider_consumer_reg_table:get_interface_info(Interface) of
@@ -73,11 +53,14 @@
         #interface_info{protocol = Protocol, loadbalance = LoadBalance} ->
             ReferenceConfig = #reference_config{sync = is_sync(RequestOption)},
             Ref = get_ref(RequestOption),
+            RpcContext = get_ctx(RequestOption),
+            Attachments = merge_attachments(Request,RpcContext),
             Invocation = Request#dubbo_request.data#dubbo_rpc_invocation{
                 loadbalance = LoadBalance,
                 call_ref = Ref,
                 reference_ops = ReferenceConfig,
-                source_pid = CallBackPid
+                source_pid = CallBackPid,
+                attachments = Attachments
             },
             Result = dubbo_extension:invoke(filter, invoke, [Invocation], {ok, Ref}, [Protocol]),
             Result
@@ -92,32 +75,12 @@
     maps:is_key(sync, Option).
 get_ref(Option) ->
     maps:get(ref, Option, make_ref()).
+get_ctx(Option)->
+    maps:get(ctx, Option, []).
 
-get_timeout(Option) ->
-    maps:get(timeout, Option, ?REQUEST_TIME_OUT).
-
-
-sync_receive(Ref, TimeOut) ->
-    receive
-        {'$gen_cast', {response_process, Ref, RpcContent, Response}} ->
-            {ok, Ref, Response, RpcContent}
-    after
-        TimeOut ->
-            {error, timeout}
-    end.
-merge_attachments(#dubbo_request{data = null} = Request, _Option) ->
-    Request;
-merge_attachments(Request, Option) ->
-    Attachements = Request#dubbo_request.data#dubbo_rpc_invocation.attachments,
-    case lists:keyfind(attachments, 1, Option) of
-        false -> OptionAttachments = [];
-        {attachments, OptionAttachments} ->
-            OptionAttachments
-    end,
+merge_attachments(Request, OptionAttachments) ->
+    Attachments = Request#dubbo_request.data#dubbo_rpc_invocation.attachments,
     List = [
-        {<<"version">>, <<"0.0.0">>},
-        {<<"timeout">>, <<"5000">>}
+        {<<"version">>, <<"0.0.0">>}
     ],
-    Attachements2 = lists:merge3(Attachements, OptionAttachments, List),
-    Data2 = Request#dubbo_request.data#dubbo_rpc_invocation{attachments = Attachements2},
-    Request#dubbo_request{data = Data2}.
+    lists:merge3(Attachments, OptionAttachments, List).
diff --git a/src/dubbo_protocol_dubbo.erl b/src/dubbo_protocol_dubbo.erl
index 21470a5..f559e35 100644
--- a/src/dubbo_protocol_dubbo.erl
+++ b/src/dubbo_protocol_dubbo.erl
@@ -84,8 +84,6 @@
 
 
 invoke(#dubbo_rpc_invocation{source_pid = CallBackPid, transport_pid = TransportPid, call_ref = Ref} = Invocation, Acc) ->
-
-%%    Request2 = merge_attachments(Request, RpcContext), %% @todo need add rpc context to attachment
     Request = dubbo_adapter:reference(Invocation),
     {ok, RequestData} = dubbo_codec:encode_request(Request),
     gen_server:cast(TransportPid, {send_request, Ref, Request, RequestData, CallBackPid, Invocation}),
@@ -128,7 +126,6 @@
             logger:info("got one response mid ~p, is_event ~p state ~p", [Res#dubbo_response.mid, Res#dubbo_response.is_event, Res#dubbo_response.state]),
             case Res#dubbo_response.is_event of
                 false ->
-                    %% @todo rpccontent need merge response with request
                     ResponseData = dubbo_type_transfer:response_to_native(Res),
                     dubbo_invoker:invoke_response(Invocation, ResponseData);
                 _ ->
