FinalT opened a new issue, #2477:
URL: https://github.com/apache/dubbo-go/issues/2477
## 1、同一个端口下只能注册一个服务
原因:在服务暴露的过程中,对于第一个注册的服务,TripleProtocol为其创建server,并将url.Location(端口号)和server存入tp.serverMap中,随后启动server实现服务暴露,对于注册第二个具有相同端口的服务,TripleProtocol发现已有相同端口号的服务,采用直接返回的策略,导致服务无法暴露,但日志输出服务已暴露,事实上,我们无法调用这个服务。
```go
// Export TRIPLE service for remote invocation
func (tp *TripleProtocol) Export(invoker protocol.Invoker) protocol.Exporter
{
//...
//服务已暴露
logger.Infof("[TRIPLE Protocol] Export service: %s", url.String())
tp.openServer(invoker, info)
return exporter
}
```
```go
func (tp *TripleProtocol) openServer(invoker protocol.Invoker, info
*server.ServiceInfo) {
//...
if _, ok := tp.serverMap[url.Location]; ok {
// 发现已有相同端口的服务,直接返回
return
}
//...
srv := NewServer()
tp.serverMap[url.Location] = srv
srv.Start(invoker, info)
}
```
```go
// Start TRIPLE server
func (s *Server) Start(invoker protocol.Invoker, info *server.ServiceInfo) {
//...
go func() {
mux := http.NewServeMux()
if info != nil {
handleServiceWithInfo(invoker, info, mux, hanOpts...)
} else {
compatHandleService(mux)
}
// todo: figure it out this process
//reflection.Register(server)
// todo: without tls
if cfg == nil {
srv.Handler = h2c.NewHandler(mux, &http2.Server{})
} else {
srv.Handler = mux
}
if err = srv.ListenAndServe(); err != nil {
logger.Errorf("server serve failed with err: %v", err)
}
}()
```
## 2、服务暴露过早,导致语义上的分歧
在新triple中,我们启动流程是这样的:
1、创建server,添加配置
2、注册服务
3、启动服务
事实上,在注册服务过程中,服务已经启动,与我们通常认知是不太相符的。
```go
func main() {
// 创建server,添加配置
srv, err := server.NewServer(
server.WithServerProtocol(
protocol.WithTriple(),
protocol.WithPort(20000),
),
)
if err != nil {
panic(err)
}
// 注册服务(服务已经暴露)
if err := greettriple.RegisterGreetServiceHandler(srv,
&api.GreetTripleServer{}); err != nil {
panic(err)
}
// 启动服务
if err := srv.Serve(); err != nil {
panic(err)
}
}
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]