golang rpc找不到服务
Posted
技术标签:
【中文标题】golang rpc找不到服务【英文标题】:golang rpc can't find service 【发布时间】:2020-01-21 15:13:08 【问题描述】:我在这段代码中找不到错误。
当我运行它时,我得到Error in Broker.Connect: rpc: can't find service Broker.Connect
。
我知道这条消息意味着当客户端尝试调用远程过程 Connect 时,他没有找到它。但我不明白为什么。我确定我发布的过程连接正确。
我给你看我的代码。 我认为缺少一些简单的东西,但我就是不明白是什么。
这是我要发布的服务器界面:
package Broker
import (
"MyRand/Rand"
"fmt"
"math/rand"
"strconv"
)
type ConsumerId struct
Name string
Address string
type Broker int
func (b *Broker)Connect(s string, r *ConsumerId) error
r.Name = Rand.String(10)
CL.lock.Lock()
exists := true
for exists
e := CL.list.Front()
for i := 0; i < CL.list.Len(); i++
var v ConsumerId = e.Value.(ConsumerId)
if s == v.Address
if v.Name != r.Name
portNumber := rand.Intn(1000) + rand.Intn(9000)
s = strconv.Itoa(portNumber)
break
else
continue
if i == CL.list.Len() -1
exists = false
e = e.Next()
r.Address = s
CL.list.PushBack(r)
CL.lock.Unlock()
fmt.Println("Host connected: " + s)
return nil
这是发布方法的代码:
package Broker
import (
"container/list"
"fmt"
"log"
"net"
"net/rpc"
"sync"
)
type ConsumerList struct
lock sync.RWMutex
list list.List
const ServerAddr = ":1234"
var CL *ConsumerList
var b *Broker
var l net.Listener
var e error
func initialization()
CL = new(ConsumerList)
b = new(Broker)
server := rpc.NewServer()
e = server.RegisterName("Broker", b)
if e != nil
log.Fatal("Format of service Broker is not correct: ", e)
// Listen for incoming tcp packets on specified port.
l, e = net.Listen("tcp", ServerAddr)
if e != nil
log.Fatal("Listen error:", e)
func FuncBroker()
initialization()
for
fmt.Println("Broker.go42")
rpc.Accept(l)
最后,这是调用过程并触发错误的代码:
package Consumer
import (
"MyProject/Broker"
"container/list"
"fmt"
"log"
"math/rand"
"net"
"net/rpc"
"os"
"strconv"
)
var subscriptions *list.List
var id Broker.ConsumerId
var client *rpc.Client
var e error
func connect()
client, e := rpc.Dial("tcp", "localhost" + Broker.ServerAddr)
if e != nil
log.Fatal("Error in dialing: ", e)
portN := 1000+rand.Intn(8999)
portNString := strconv.Itoa(portN)
e = client.Call("Broker.Connect", portNString, &id)
if e != nil
log.Fatal("Error in Broker.Connect: ", e)
func FuncConsumer()
connect()
defer client.Close()
// go exposeInterface()
subscriptions = new(list.List)
// userCommands()
os.Exit(0)
很明显,当我运行代码时,我首先运行代理,然后运行消费者。
有人可以帮我吗?
【问题讨论】:
您注册了“Server”作为服务的名称,而不是“Broker”。 @BurakSerdar,我编辑是因为那是一个测试。即使与“经纪人”也不起作用。 【参考方案1】:错误是使用rpc.Accept(l)
调用accept
,我更正了server.Accept(l)
,其中server
是此处取值server := rpc.NewServer()
。
【讨论】:
以上是关于golang rpc找不到服务的主要内容,如果未能解决你的问题,请参考以下文章
Gmail API - Oauth2/google:找不到凭据(Golang)
dubbo启动消费者找不到服务端com.alibaba.dubbo.rpc.RpcException: No provider available from registry ip:2181 for
IIS默认网站启动不了,iis提示:找不到指定的程序,错误127
Go语言 go get 找不到 google.golang.org/protobuf/encoding/prototext 解决办法