From dea5d83f14604d78b0fae4bbba5447758514fb49 Mon Sep 17 00:00:00 2001 From: pantianying <601666418@qq.com> Date: Fri, 8 May 2020 21:36:30 +0800 Subject: [PATCH] provider can get attachment in ctx --- common/constant/key.go | 3 +++ common/proxy/proxy.go | 7 ++++++- common/proxy/proxy_factory/default.go | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/common/constant/key.go b/common/constant/key.go index d9413fcc9..54ca9d614 100644 --- a/common/constant/key.go +++ b/common/constant/key.go @@ -180,6 +180,9 @@ const ( // ForceUseTag is the tag in attachment ForceUseTag = "dubbo.force.tag" Tagkey = "dubbo.tag" + + // Attachment key in context in invoker + AttachmentKey = "attachment" ) const ( diff --git a/common/proxy/proxy.go b/common/proxy/proxy.go index f98a44873..6b6808080 100644 --- a/common/proxy/proxy.go +++ b/common/proxy/proxy.go @@ -25,6 +25,7 @@ import ( import ( "github.com/apache/dubbo-go/common" + "github.com/apache/dubbo-go/common/constant" "github.com/apache/dubbo-go/common/logger" "github.com/apache/dubbo-go/protocol" invocation_impl "github.com/apache/dubbo-go/protocol/invocation" @@ -140,7 +141,7 @@ func (p *Proxy) Implement(v common.RPCService) { } // add user setAttachment - atm := invCtx.Value("attachment") + atm := invCtx.Value(constant.AttachmentKey) if m, ok := atm.(map[string]string); ok { for k, value := range m { inv.SetAttachments(k, value) @@ -148,6 +149,10 @@ func (p *Proxy) Implement(v common.RPCService) { } result := p.invoke.Invoke(invCtx, inv) + logger.Error(result.Attachments()) + if len(result.Attachments()) > 0 { + invCtx = context.WithValue(invCtx, constant.AttachmentKey, result.Attachments()) + } err = result.Error() logger.Debugf("[makeDubboCallProxy] result: %v, err: %v", result.Result(), err) diff --git a/common/proxy/proxy_factory/default.go b/common/proxy/proxy_factory/default.go index 114cfee23..013b39911 100644 --- a/common/proxy/proxy_factory/default.go +++ b/common/proxy/proxy_factory/default.go @@ -113,6 +113,7 @@ func (pi *ProxyInvoker) Invoke(ctx context.Context, invocation protocol.Invocati in := []reflect.Value{svc.Rcvr()} if method.CtxType() != nil { + ctx = context.WithValue(ctx, constant.AttachmentKey, invocation.Attachments()) in = append(in, method.SuiteContext(ctx)) } -- GitLab