聊聊dubbo-go的RPCInvocation
时间:2022-07-22
本文章向大家介绍聊聊dubbo-go的RPCInvocation,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
序
本文主要研究一下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
- 1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
- 1647: [Usaco2007 Open]Fliptile 翻格子游戏
- 1295: [SCOI2009]最长距离
- 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课
- 数据结构之哈夫曼树和编码器的构造
- 1578: [Usaco2009 Feb]Stock Market 股票市场
- webp图片实践之路
- 3522: [Poi2014]Hotel
- 3299: [USACO2011 Open]Corn Maze玉米迷宫
- 2272: [Usaco2011 Feb]Cowlphabet 奶牛文字
- 1632: [Usaco2007 Feb]Lilypad Pond
- 1630/2023: [Usaco2005 Nov]Ant Counting 数蚂蚁
- Java设计模式(七)Decorate装饰器模式
- 1623: [Usaco2008 Open]Cow Cars 奶牛飞车
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法