某些部署方案需要动态指定服务注册的地址。例如,docker bridge网络模式需要指定用于外部网络通信的注册主机IP。Dubbo在启动阶段提供两对系统属性,用于设置外部通信的IP和端口地址。
- DUBBO_IP_TO_REGISTRY — 注册到注册中心的IP地址
- DUBBO_PORT_TO_REGISTRY — 注册到注册中心的端口
- DUBBO_IP_TO_BIND — 监听IP地址
- DUBBO_PORT_TO_BIND — 监听端口
- 以上四种配置是可选的。如果没有配置,Dubbo将自动获得IP和端口。请根据部署方案灵活选择。
- Dubbo支持多协议。如果应用程序同时公开多个不同的协议服务,并且需要为每个服务单独指定IP或端口。请分别在上述属性之前添加协议前缀。例如:
- HESSIAN_DUBBO_PORT_TO_BIND hessian 协议绑定端口
- DUBBO_DUBBO_PORT_TO_BIND dubbo dubbo协议绑定端口
- HESSIAN_DUBBO_IP_TO_REGISTRY hessian协议注册IP
- DUBBO_DUBBO_IP_TO_REGISTRY dubbo协议注册IP
-
PORT_TO_REGISTRY
或者IP_TO_REGISTRY
不会被用作默认PORT_TO_BIND
orIP_TO_BIND
,但反之亦然。
- 如果设置
PORT_TO_REGISTRY=20881
IP_TO_REGISTRY=30.5.97.6
,则PORT_TO_BIND
IP_TO_BIND
不会受到影响。 - 如果设置
PORT_TO_BIND=20881
IP_TO_BIND=30.5.97.6
,则PORT_TO_REGISTRY=20881
IP_TO_REGISTRY=30.5.97.6
默认为。
dubbo-docker-sample 本地操作过程:
- 将项目克隆到本地
git clone git@github.com:dubbo/dubbo-docker-sample.git
cd dubbo-docker-sample
- 打包当地的maven
mvn clean install
- 通过docker build构建一个镜像
docker build --no-cache -t dubbo-docker-sample .
Dockerfile
FROM openjdk:8-jdk-alpine
ADD target/dubbo-docker-sample-0.0.1-SNAPSHOT.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT exec java $JAVA_OPTS -jar /app.jar
- 从镜像创建和运行容器
# 由于我们使用zk注册中心,首先我们启动zk容器
docker run --name zkserver --restart always -d zookeeper:3.4.9
docker run -e DUBBO_IP_TO_REGISTRY=30.5.97.6 -e DUBBO_PORT_TO_REGISTRY=20881 -p 30.5.97.6:20881:20880 --link zkserver:zkserver -it --rm dubbo-docker-sample
假设主机IP为30.5.97.6。
设置提供程序以通过环境变量注册注册中心的IP地址和端口DUBBO_IP_TO_REGISTRY=30.5.97.6
DUBBO_PORT_TO_REGISTRY=20881
实现端口映射-p 30.5.97.6:20881:20880
, 其中 20800 是dubbo自动选择的侦听端口。没有监控IP配置,因此它将监听0.0.0.0(所有IP)。
启动后,提供者的注册地址为 30.5.97.6:20881, 容器的监听地址为: 0.0.0.0:20880
- 测试
另一个主机或容器执行
telnet 30.5.97.6 20881
ls
invoke com.alibaba.dubbo.test.docker.DemoService.hello("world")