聊聊dubbo-go的broadcastCluster
时间:2022-07-22
本文章向大家介绍聊聊dubbo-go的broadcastCluster,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
序
本文主要研究一下dubbo-go的broadcastCluster
broadcastCluster
dubbo-go-v1.4.2/cluster/cluster_impl/broadcast_cluster.go
type broadcastCluster struct{}
const broadcast = "broadcast"
func init() {
extension.SetCluster(broadcast, NewBroadcastCluster)
}
// NewBroadcastCluster ...
func NewBroadcastCluster() cluster.Cluster {
return &broadcastCluster{}
}
func (cluster *broadcastCluster) Join(directory cluster.Directory) protocol.Invoker {
return newBroadcastClusterInvoker(directory)
}
- broadcastCluster的join方法执行newBroadcastClusterInvoker
newBroadcastClusterInvoker
dubbo-go-v1.4.2/cluster/cluster_impl/broadcast_cluster_invoker.go
type broadcastClusterInvoker struct {
baseClusterInvoker
}
func newBroadcastClusterInvoker(directory cluster.Directory) protocol.Invoker {
return &broadcastClusterInvoker{
baseClusterInvoker: newBaseClusterInvoker(directory),
}
}
- newBroadcastClusterInvoker方法实例化broadcastClusterInvoker
Invoke
dubbo-go-v1.4.2/cluster/cluster_impl/broadcast_cluster_invoker.go
func (invoker *broadcastClusterInvoker) Invoke(ctx context.Context, invocation protocol.Invocation) protocol.Result {
invokers := invoker.directory.List(invocation)
err := invoker.checkInvokers(invokers, invocation)
if err != nil {
return &protocol.RPCResult{Err: err}
}
err = invoker.checkWhetherDestroyed()
if err != nil {
return &protocol.RPCResult{Err: err}
}
var result protocol.Result
for _, ivk := range invokers {
result = ivk.Invoke(ctx, invocation)
if result.Error() != nil {
logger.Warnf("broadcast invoker invoke err: %v when use invoker: %vn", result.Error(), ivk)
err = result.Error()
}
}
if err != nil {
return &protocol.RPCResult{Err: err}
}
return result
}
- Invoke方法首先通过invoker.directory.List(invocation)获取invokers,之后遍历invokers,挨个执行result = ivk.Invoke(ctx, invocation),如果最后err不为nil,则返回err,否则返回最后的result
小结
broadcastCluster的join方法执行newBroadcastClusterInvoker;其Invoke方法首先通过invoker.directory.List(invocation)获取invokers,之后遍历invokers,挨个执行result = ivk.Invoke(ctx, invocation),如果最后err不为nil,则返回err,否则返回最后的result
doc
- 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 数组属性和方法
- TokyoWesterns CTF 6th 2020 部分WP
- 极客巅峰2020 部分WriteUp
- norecon:一款自动化recon工具
- Bashtop:一款功能强大的LinuxOSXFreeBSD资源监控工具
- iOS 推送手机消息背后的技术
- 手把手教你使用 cert-manager 签发免费证书
- flink源码分析之TaskManager启动篇
- 【面试说】一年半前端 Bigo 一二三 面
- 【前端进阶】深入浅出浏览器事件循环【内附练习题】
- 【面试说】一年半前端 Shopee 面经
- 【前端进阶】深入浅出 JavaScript 中的 this
- 手把手带你玩转 AWS Lambda
- Guava 中的 Stopwatch 是个什么鬼?
- Mybatis接口Mapper内的方法为啥不能重载?
- 基于K-Means聚类算法的主颜色提取