[apache/dubbo]Springboot多协议会暴露多个接口服务

2023-12-22 801 views
6

昨天问了一个多协议的配置问题已经解决了,但是又出现了一个新的问题 就是我配置了多协议以后,比如dubbo和hessian,但是dubbo admin上会注册两个接口. 如果服务端指定了用某一个,则客户端会用指定那一个 问题来了,如果服务端不指定协议,那么客户端会随机选. 导致某个服务时而正常时而异常. 这个还有什么其他配置吗? 要完成的需求是,定义两个协议dubbo和hessian,但我指定某个服务是hessian时,这个服务就用hessian,如果不指定,全部都注册dubbo.不用两个都注册.谢谢 https://github.com/apache/dubbo/issues/5374#issuecomment-557373732

回答

6

provider目前看是没有这种配置的,对于consumer来说,你注册的两种协议是就是两个提供者,默认的RandomLoadBalance是会随机选择的,所以,你应该是从consumer层去规定这次该使用哪种协议

3

好麻烦啊.没有更好的办法了吗?

2

目前我是没看到provider有对应配置实现

8

可以通过 @Service(protocol = "${dubbo.protocols.dubbo.id}") 指定

1

可以通过 @service(protocol = "${dubbo.protocols.dubbo.id}") 指定

感谢回复,我们也是这样的做的,但是有点挫,类多的话还麻烦,每个类都得指定这个东西.

0

@cookiejoo 如果只是少量服务使用hessian 的话,可以配置 dubbo.protocols.hessian.default=false, 然后需要暴露hessian的通过 @service(protocol=xx) 指定

4

The services have to specify their own protocol(s), or the consumers of those services can't choose the appropriate protocol(s).

2

同样的问题,但是配置 dubbo.protocols.hessian.default=false没有生效。 Dubbo version: 2.7.1 配置如下: protocols: dubbo: name: dubbo port: 20880 default: true server: netty hessian: name: hessian port: 20881 default: false server: servlet 在nacos上看到同一个服务注册了两次。看了dubbo:protocol的配置手册,没有default这个属性,是不是已经被废弃了?

9

这是一个bug,在 #5952 已经修复