Dubbo是阿里巴巴公司开源的一个高性能、轻量级的Java RPC框架,可以和 Spring框架无缝集成。在本章中,Dubbo版本为2.7.22,注册中心为ZooKeeper,版本为3.4.8,讲述上云过程中的遇到的一些问题以及相关解决方案。
注册到zk的IP错误
登录dubbo-admin查看注册到zk的信息,发现为容器的IP,造成服务不可用。
通过阅读Dubbo源码我们得知注册到zk的IP和port的获取规则,源码位置如下:
org.apache.dubbo.config.ServiceConfig#findConfigedHosts
org.apache.dubbo.config.ServiceConfig#findConfigedPorts
那么我们可以在deploy.yaml中指定IP,以及在配置文件中指定port的方式解决该问题。
spec:
template:
containers:
- env:
- name: DUBBO_IP_TO_REGISTRY
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.hostIP
## dubbo 配置 start
dubbo.application.name = dubbo-demo-provide
dubbo.application.owner = programmer
dubbo.application.organization = dubbo
dubbo.application.parameters.qos.enable = false
dubbo.application.parameters.qqos.accept.foreign.ip = false
dubbo.registry.address = zookeeper://127.0.0.1:2181
dubbo.registry.timeout = 30000
dubbo.metadata-report.address = zookeeper://127.0.0.1:2181
dubbo.metadata-report.timeout = 30000
## 配置dubbo连接池
dubbo.protocols.dubbo.name = dubbo
dubbo.protocols.dubbo.port = 28888
dubbo.protocols.dubbo.dispatcher = all
dubbo.protocols.dubbo.threads = 800
dubbo.protocols.dubbo.accepts = 1000
dubbo.protocols.dubbo.accesslog = true
## 配置rest连接池,restful风格,由resteasy实现
dubbo.protocols.rest.name = rest
dubbo.protocols.rest.server = tomcat
dubbo.protocols.rest.port = 8888
dubbo.protocols.rest.contextpath = dubbo-provide-service
dubbo.protocols.rest.threads = 800
dubbo.protocols.rest.accepts = 1000
dubbo.protocols.rest.accesslog = true
## dubbo 配置 end
在service.yaml中进行如下配置
spec:
ports:
- name: dubbo-rest
port: 8888
targetPort: 8888
nodePort: 8888
- name: dubbo-rpc
port: 28888
targetPort: 28888
nodePort: 28888
- name: http
port: 8880
targetPort: 8880
nodePort: 8880