weibocom / motan-go

The golang implementation of Motan
Other
471 stars 112 forks source link

zookeeper 集群问题 #154

Open miibyxs opened 5 years ago

miibyxs commented 5 years ago

注册中心使用zookeeper集群方式时,服务无法正常注册到注册中心

日志信息如下:

执行 go run client.go 时有如下输出:

start parse config path:./../conf/motan-client.yaml 
load mybasicRefer configuration success. url: motan2://:0/cn.interfaces.rpc.MotanDemoService?group=motan-demo-rpc
use log dir:./clientlogs
motan call fail! err:No referers for request, RequestID: 0, Request info: map[M_g:motan-demo-rpc M_mdu: M_p:cn.interfaces.rpc.MotanDemoService M_s:client-test M_v:]

zookeeper 集群是使用 docker 搭建的,同样情况下我使用 Java 则不存在这个问题,基本可以排除 zookeeper 集群的问题。

<!-- java: motan-server.xml -->
<motan:registry regProtocol="zookeeper" name="my_zookeeper" address="127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"/>

另外当 zk-registry 中配置 hostport 为任意一个 zookeeper 节点时,都可以正常运行

motan-registry:
  zk-registry:
    protocol: zookeeper
    host: 127.0.0.1
    port: 2181
    registrySessionTimeout: 10000

请问一下,这个可能是什么原因引起的?

具体配置如下:

config of registries

motan-registry: zk-registry: protocol: zookeeper address: "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183" registrySessionTimeout: 10000

conf of basic service

motan-basicService: mybasicService: application: "server-test" group: motan-demo-rpc protocol: motan2 registry: zk-registry haStrategy: failover loadbalance: roundrobin serialization: simple nodeType: server

conf of services

motan-service: mytest-demo: path: cn.interfaces.rpc.MotanDemoService basicService: mybasicService ref : "main.MotanDemoService" export: "motan2:8009"


* `motan-client.yaml`
```yaml
#config fo client
motan-client:
  log_dir: "./clientlogs"
  application: "client-test"

#config of registries
motan-registry:
  zk-registry:
    protocol: zookeeper
    address: "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"
    registrySessionTimeout: 10000

#conf of basic refers
motan-basicRefer:
  mybasicRefer:
    application: "client-test"
    group: motan-demo-rpc
    protocol: motan2
    registry: zk-registry
    requestTimeout: 1000
    haStrategy: failover
    loadbalance: roundrobin
    serialization: simple
    retries: 1

#conf of refers
motan-refer:
  mytest-demo:
    path: cn.interfaces.rpc.MotanDemoService
    basicRefer: mybasicRefer

代码如下:

import ( "fmt" "time"

"github.com/weibocom/motan-go"

)

func main() { runServer() }

func runServer() { mscontext := motan.GetMotanServerContext("./../conf/motan-server.yaml") mscontext.RegisterService(&MotanDemoService{}, "") mscontext.Start(nil) mscontext.ServicesAvailable() //注册服务后,默认并不提供服务,调用此方法后才会正式提供服务。需要根据实际使用场景决定提供服务的时机。作用与java版本中的服务端心跳开关一致。 time.Sleep(time.Second * 50000000) }

type MotanDemoService struct{}

func (m *MotanDemoService) Hello(name string) string { fmt.Printf("MotanDemoService hello:%s\n", name) return "hello " + name }


* `client.go`
```go
package main

import (
    "fmt"

    "github.com/weibocom/motan-go"
)

func main() {
    runClient()
}

func runClient() {
    mccontext := motan.GetClientContext("./../conf/motan-client.yaml")
    mccontext.Start(nil)

    var reply string

    mclient := mccontext.GetClient("mytest-demo")
    err := mclient.Call("hello", []interface{}{"Golang"}, &reply)
    if err != nil {
        fmt.Printf("motan call fail! err:%v\n", err)
    } else {
        fmt.Printf("motan call success! reply:%s\n", reply)
    }
}
Zha-Zha commented 5 years ago

感谢反馈问题! 该问题已经定位,是zookeeper模块的address获取有问题 马上修复,merge代码后回复您

Zha-Zha commented 5 years ago

@Lizhg 问题已经解决,请更新一下代码 pr: #155 commit: bd795a91ff67f91932d5616d3b43986beb753bfc

miibyxs commented 5 years ago

@Zha-Zha 好的,感谢。