本文整理汇总了Golang中github.com/adrianco/spigo/gotocol.Send函数的典型用法代码示例。如果您正苦于以下问题:Golang Send函数的具体用法?Golang Send怎么用?Golang Send使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Send函数的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: CreateEureka
// create eureka service registries in each zone
func CreateEureka() {
// setup name service and cross zone replication links
znames := archaius.Conf.ZoneNames
Create("eureka", EurekaPkg, archaius.Conf.Regions, 3)
for n, ch := range eurekachan {
var n1, n2 string
switch names.Zone(n) {
case znames[0]:
n1 = znames[1]
n2 = znames[2]
case znames[1]:
n1 = znames[0]
n2 = znames[2]
case znames[2]:
n1 = znames[0]
n2 = znames[1]
}
for nn, cch := range eurekachan {
if names.Region(nn) == names.Region(n) && (names.Zone(nn) == n1 || names.Zone(nn) == n2) {
//log.Println("Eureka cross connect from: " + n + " to " + nn)
gotocol.Send(ch, gotocol.Message{gotocol.NameDrop, cch, time.Now(), gotocol.NilContext, nn})
}
}
}
}
开发者ID:bigpg,项目名称:spigo,代码行数:26,代码来源:asgard.go
示例2: SendToName
// send a message directly to a name via asgard, only used during setup
func SendToName(name string, msg gotocol.Message) {
if noodles[name] != nil {
gotocol.Send(noodles[name], msg)
} else {
log.Fatal("Asgard can't send to " + name)
}
}
开发者ID:bigpg,项目名称:spigo,代码行数:8,代码来源:asgard.go
示例3: Connect
// Tell a source node how to connect to a target node directly by name, only used when Eureka can't be used
func Connect(source, target string) {
if noodles[source] != nil && noodles[target] != nil {
gotocol.Send(noodles[source], gotocol.Message{gotocol.NameDrop, noodles[target], time.Now(), gotocol.NilContext, target})
//log.Println("Link " + source + " > " + target)
} else {
log.Fatal("Asgard can't link " + source + " > " + target)
}
}
开发者ID:bigpg,项目名称:spigo,代码行数:9,代码来源:asgard.go
示例4: NameDrop
// NameDrop updates local buddy list
func NameDrop(dependencies *map[string]time.Time, microservices *map[string]chan gotocol.Message, msg gotocol.Message, name string, listener chan gotocol.Message, eureka map[string]chan gotocol.Message, crosszone ...bool) {
if msg.ResponseChan == nil { // dependency by service name, needs to be looked up in eureka
(*dependencies)[msg.Intention] = msg.Sent // remember it for later
for _, ch := range eureka {
//log.Println(name + " looking up " + msg.Intention)
gotocol.Send(ch, gotocol.Message{gotocol.GetRequest, listener, time.Now(), gotocol.NilContext, msg.Intention})
}
} else { // update dependency with full name and listener channel
microservice := msg.Intention // message body is buddy name
if len(crosszone) > 0 || names.Zone(name) == names.Zone(microservice) {
if microservice != name && (*microservices)[microservice] == nil { // don't talk to myself or record duplicates
// remember how to talk to this buddy
(*microservices)[microservice] = msg.ResponseChan // message channel is buddy's listener
(*dependencies)[names.Service(microservice)] = msg.Sent
for _, ch := range eureka {
// tell one of the service registries I have a new buddy to talk to so it doesn't get logged more than once
gotocol.Send(ch, gotocol.Message{gotocol.Inform, listener, time.Now(), gotocol.NilContext, name + " " + microservice})
return
}
}
}
}
}
开发者ID:dberkholz,项目名称:spigo,代码行数:24,代码来源:handlers.go
示例5: Distribute
// distribute tokens to one zone of a cassandra cluster, this doesn't yet allow for clusters to grow or replace nodes
func Distribute(cass map[string]chan gotocol.Message) string {
size := len(cass)
// each node owns a share of the full range
hashrange := uint32(0xFFFFFFFF) / uint32(size)
// make a config string of the form cass1:0,cass4:1000,cass2:2000
i := 0
s := ""
for n, _ := range cass {
s += fmt.Sprintf("%s:%v,", n, hashrange*uint32(i))
i++
}
s = strings.TrimSuffix(s, ",")
// send the config to each node, repurposing the Chat message type as a kind of Gossip setup
for _, c := range cass {
gotocol.Send(c, gotocol.Message{gotocol.Chat, nil, time.Now(), gotocol.NilContext, s})
}
return s // for logging and test
}
开发者ID:shuoy,项目名称:spigo,代码行数:19,代码来源:priamCassandra.go
示例6: ConnectEveryEureka
// connect to eureka services in every region
func ConnectEveryEureka(name string) {
for n, ch := range eurekachan {
gotocol.Send(noodles[name], gotocol.Message{gotocol.Inform, ch, time.Now(), gotocol.NilContext, n})
}
}
开发者ID:bigpg,项目名称:spigo,代码行数:6,代码来源:asgard.go
示例7: StartNode
// Start a node using the named package, and connect it to any dependencies
func StartNode(name string, dependencies ...string) {
if names.Package(name) == "eureka" {
eurekachan[name] = make(chan gotocol.Message, archaius.Conf.Population)
go eureka.Start(eurekachan[name], name)
return
} else {
noodles[name] = make(chan gotocol.Message)
}
// start the service and tell it it's name
switch names.Package(name) {
case "pirate":
go pirate.Start(noodles[name])
case "elb":
go elb.Start(noodles[name])
case "denominator":
go denominator.Start(noodles[name])
case "zuul":
go zuul.Start(noodles[name])
case "karyon":
go karyon.Start(noodles[name])
case "monolith":
go monolith.Start(noodles[name])
case "staash":
go staash.Start(noodles[name])
case "priamCassandra":
go priamCassandra.Start(noodles[name])
case "store":
go store.Start(noodles[name])
default:
log.Fatal("asgard: unknown package: " + names.Package(name))
}
noodles[name] <- gotocol.Message{gotocol.Hello, listener, time.Now(), gotocol.NilContext, name}
// there is a eureka service registry in each zone, so in-zone services just get to talk to their local registry
// elb are cross zone, so need to see all registries in a region
// denominator are cross region so need to see all registries globally
// priamCassandra depends explicitly on eureka for cross region clusters
crossregion := false
for _, d := range dependencies {
if d == "eureka" {
crossregion = true
}
}
for n, ch := range eurekachan {
if names.Region(name) == "*" || crossregion {
// need to know every eureka in all zones and regions
gotocol.Send(noodles[name], gotocol.Message{gotocol.Inform, ch, time.Now(), gotocol.NilContext, n})
} else {
if names.Zone(name) == "*" && names.Region(name) == names.Region(n) {
// need every eureka in my region
gotocol.Send(noodles[name], gotocol.Message{gotocol.Inform, ch, time.Now(), gotocol.NilContext, n})
} else {
if names.RegionZone(name) == names.RegionZone(n) {
// just the eureka in this specific zone
gotocol.Send(noodles[name], gotocol.Message{gotocol.Inform, ch, time.Now(), gotocol.NilContext, n})
}
}
}
}
//log.Println(dependencies)
// pass on symbolic dependencies without channels that will be looked up in Eureka later
for _, dep := range dependencies {
if dep != "" && dep != "eureka" { // ignore special case of eureka in dependency list
//log.Println(name + " depends on " + dep)
gotocol.Send(noodles[name], gotocol.Message{gotocol.NameDrop, nil, time.Now(), gotocol.NilContext, dep})
}
}
}
开发者ID:bigpg,项目名称:spigo,代码行数:68,代码来源:asgard.go
注:本文中的github.com/adrianco/spigo/gotocol.Send函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论