Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

kitex单server多service调用 #1534

Closed
Ambition6666 opened this issue Sep 8, 2024 · 7 comments
Closed

kitex单server多service调用 #1534

Ambition6666 opened this issue Sep 8, 2024 · 7 comments

Comments

@Ambition6666
Copy link

单server多service怎么添加注册中心?

报错

{"level":"error","ts":1725794886.8642902,"msg":"service discovery error: no instance remains for ucenter"}

server代码

// 服务注册
	addr, _ := net.ResolveTCPAddr("tcp", config.ServerAddr)

	retryConfig := retry.NewRetryConfig(
		retry.WithMaxAttemptTimes(10),
		retry.WithObserveDelay(20*time.Second),
		retry.WithRetryDelay(5*time.Second),
	)

	r, err := etcd.NewEtcdRegistryWithRetry([]string{config.EtcdAddr}, retryConfig) // r 不能重复使用.
	if err != nil {
		panic(err)
	}

	svr := server.NewServer(server.WithServerBasicInfo(&rpcinfo.EndpointBasicInfo{ServiceName: config.ServerName}), server.WithRegistry(r), server.WithServiceAddr(addr), server.WithSuite(suite), server.WithRefuseTrafficWithoutServiceName())

	err = login.RegisterService(svr, handler.NewLoginImpl())
	if err != nil {
		panic(err)
	}

	err = register.RegisterService(svr, handler.NewRegisterImpl())
	if err != nil {
		panic(err)
	}

	err = svr.Run()
	if err != nil {
		panic(err)
	}

client代码

var loginCli login.Client

func initLogin() {
	r, err := etcd.NewEtcdResolver([]string{config.EtcdAddr})
	if err != nil {
		panic(err)
	}
	loginCli, err = login.NewClient(config.ServerName, client.WithResolver(r), client.WithTransportProtocol(transport.GRPC), client.WithMetaHandler(transmeta.ClientHTTP2Handler))

	if err != nil {
		panic(err)
	}
}
@Ambition6666
Copy link
Author

看官方示例

好像客户端的代码得写出每个service的服务名称

clienta := servicea.MustNewClient("servicea", client.WithTransportProtocol(transport.GRPC), client.WithHostPorts("127.0.0.1:8888"))
clientb := serviceb.MustNewClient("serviceb", client.WithTransportProtocol(transport.GRPC), client.WithHostPorts("127.0.0.1:8888"))

所以想问加注册中心客户端该怎么调用?

@HeyJavaBean
Copy link
Member

@Ambition6666
Copy link
Author

FYI: https://www.cloudwego.io/zh/docs/kitex/tutorials/service-governance/service_discovery/

这个文档好像只提供了单server单service的调用案例?

@HeyJavaBean
Copy link
Member

服务注册时以server为粒度的,再多service也只是一个server

@Ambition6666
Copy link
Author

服务注册时以server为粒度的,再多service也只是一个server

我服务端注册的server的服务名是ucenter, 然后etcd也有相应的key, 但是客户端的调用使用ucenter为服务名显示调用失败(no instance remains for ucenter), 检查了key键也没有错, 后面看了官方的某个调用,好像是要service的每个服务名

@Ambition6666
Copy link
Author

服务注册时以server为粒度的,再多service也只是一个server

试了一下单service调用,好像也不行,那应该不是service的问题

@Ambition6666
Copy link
Author

调没成功是因为这个#42, 升级下版本就好了
另外client调用要加transport.TTHeader跟transmeta.ClientTTHeaderHandler这两个参数

	registerCli, err = register.NewClient(config.ServerName, client.WithResolver(r), client.WithTransportProtocol(transport.TTHeader), client.WithMetaHandler(transmeta.ClientTTHeaderHandler))

@Ambition6666 Ambition6666 changed the title kitex客户端调用出错 kitex单server多service调用 Sep 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants