序
本文次要钻研一下dubbo-go的RPCInvocation
Invocation
dubbo-go-v1.4.2/protocol/invocation.go
// Invocation ...type Invocation interface { MethodName() string ParameterTypes() []reflect.Type ParameterValues() []reflect.Value Arguments() []interface{} Reply() interface{} Attachments() map[string]string AttachmentsByKey(string, string) string Invoker() Invoker}
- Invocation定义了MethodName、ParameterTypes、ParameterValues、Arguments、Reply、Attachments、AttachmentsByKey、Invoker办法
RPCInvocation
dubbo-go-v1.4.2/protocol/invocation/rpcinvocation.go
type RPCInvocation struct { methodName string parameterTypes []reflect.Type parameterValues []reflect.Value arguments []interface{} reply interface{} callBack interface{} attachments map[string]string invoker protocol.Invoker lock sync.RWMutex}
- RPCInvocation定义了methodName、parameterTypes、parameterValues、arguments、reply、callBack、attachments、invoker、lock属性
NewRPCInvocation
dubbo-go-v1.4.2/protocol/invocation/rpcinvocation.go
// NewRPCInvocation ...func NewRPCInvocation(methodName string, arguments []interface{}, attachments map[string]string) *RPCInvocation { return &RPCInvocation{ methodName: methodName, arguments: arguments, attachments: attachments, }}
- NewRPCInvocation办法实例化RPCInvocation
NewRPCInvocationWithOptions
dubbo-go-v1.4.2/protocol/invocation/rpcinvocation.go
// NewRPCInvocationWithOptions ...func NewRPCInvocationWithOptions(opts ...option) *RPCInvocation { invo := &RPCInvocation{} for _, opt := range opts { opt(invo) } return invo}
- NewRPCInvocationWithOptions办法通过option实例化RPCInvocation
option
dubbo-go-v1.4.2/protocol/invocation/rpcinvocation.go
type option func(invo *RPCInvocation)// WithMethodName ...func WithMethodName(methodName string) option { return func(invo *RPCInvocation) { invo.methodName = methodName }}// WithParameterTypes ...func WithParameterTypes(parameterTypes []reflect.Type) option { return func(invo *RPCInvocation) { invo.parameterTypes = parameterTypes }}// WithParameterValues ...func WithParameterValues(parameterValues []reflect.Value) option { return func(invo *RPCInvocation) { invo.parameterValues = parameterValues }}// WithArguments ...func WithArguments(arguments []interface{}) option { return func(invo *RPCInvocation) { invo.arguments = arguments }}// WithReply ...func WithReply(reply interface{}) option { return func(invo *RPCInvocation) { invo.reply = reply }}// WithCallBack ...func WithCallBack(callBack interface{}) option { return func(invo *RPCInvocation) { invo.callBack = callBack }}// WithAttachments ...func WithAttachments(attachments map[string]string) option { return func(invo *RPCInvocation) { invo.attachments = attachments }}// WithInvoker ...func WithInvoker(invoker protocol.Invoker) option { return func(invo *RPCInvocation) { invo.invoker = invoker }}
- option提供了WithMethodName、WithParameterTypes、WithParameterValues、WithReply、WithCallBack、WithAttachments、WithInvoker办法
AttachmentsByKey
dubbo-go-v1.4.2/protocol/invocation/rpcinvocation.go
// AttachmentsByKey ...func (r *RPCInvocation) AttachmentsByKey(key string, defaultValue string) string { r.lock.RLock() defer r.lock.RUnlock() if r.attachments == nil { return defaultValue } value, ok := r.attachments[key] if ok { return value } return defaultValue}
- AttachmentsByKey办法通过r.attachments[key]获取对应key的值
SetAttachments
dubbo-go-v1.4.2/protocol/invocation/rpcinvocation.go
// SetAttachments ...func (r *RPCInvocation) SetAttachments(key string, value string) { r.lock.Lock() defer r.lock.Unlock() if r.attachments == nil { r.attachments = make(map[string]string) } r.attachments[key] = value}
- SetAttachments办法通过r.attachments[key]给指定key赋值,如果r.attachments为nil则通过make创立
小结
RPCInvocation定义了methodName、parameterTypes、parameterValues、arguments、reply、callBack、attachments、invoker、lock属性;NewRPCInvocation办法实例化RPCInvocation;NewRPCInvocationWithOptions办法通过option实例化RPCInvocation
doc
- invocation