在宿主機配置zookeeper安裝目錄:/docker/develop/zookeeper
而且在文件夾建立 data 和logs 目錄:
mkdir -p /docker/develop/zookeeper/data
mkdir -p /docker/develop/zookeeper/logsjava
[root@centos-knight ~]# cd /docker/develop/zookeeper [root@centos-knight zookeeper]# mkdir -p /docker/develop/zookeeper/data [root@centos-knight zookeeper]# mkdir -p /docker/develop/zookeeper/logs
受權文件目錄:chmod -R 777 /docker/develop/zookeeper/spring
[root@centos-knight zookeeper]# chmod -R 777 /docker/develop/zookeeper/ [root@centos-knight zookeeper]#
拉取zookeeper鏡像:docker pull zookeeperdocker
[root@centos-knight zookeeper]# docker pull zookeeper Using default tag: latest latest: Pulling from library/zookeeper Digest: sha256:6b6b5f7fb6a47d2b311df5af1718af5a425a679dbb844d77913fa68d1a8bf0fd Status: Image is up to date for zookeeper:latest docker.io/library/zookeeper:latest [root@centos-knight zookeeper]#
臨時安裝Zookeeper服務:zookeeper-tmp-serverapache
docker run -itd -p 2181:2181 --restart always --name=zookeeper-tmp-server --privileged=true \ -v /docker/develop/zookeeper/data:/data \ -v /docker/develop/zookeeper/datalog:/datalog \ -v /docker/develop/zookeeper/logs:/logs \ -e "ZOO_STANDALONE_ENABLED=true" \ -e "TZ=Asia/Shanghai" \ -e "ZOO_4LW_COMMANDS_WHITELIST=*" \ -e "ZOO_AUTOPURGE_SNAPRETAINCOUNT=5" \ -e "ZOO_AUTOPURGE_PURGEINTERVAL=24" \ -e "ZOO_MAX_CLIENT_CNXNS=64" \ -e "ZOO_TICK_TIME=2000" \ -e "ZOO_INIT_LIMIT=100" \ -e "ZOO_SYNC_LIMIT=5" \ zookeeper:latest
複製zookeeper-tmp-server的conf到/docker/develop/zookeeper:segmentfault
[root@centos-knight ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 12947bdadd84 zookeeper:latest "/docker-entrypoint.…" 36 hours ago Up 36 hours 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp zookeeper-develop-server [root@centos-knight ~]# docker cp 12947bdadd84:/conf /docker/develop/zookeeper/
編寫zookeeper的zoo.cfg配置文件:centos
tickTime=2000 initLimit=100 syncLimit=5 dataDir=/data dataLogDir=/datalog clientPort=2181 quorumListenOnAllIPs=true preAllocSize=64M globalOutstandingLimit=100000 snapCount=50000 maxClientCnxns=64 minSessionTimeout=4000 maxSessionTimeout=40000 4lw.commands.whitelist=* standaloneEnabled=true admin.enableServer=true server.1=0.0.0.0:2888:3888 tcpKeepAlive=true ipReachableTimeout=0 cnxTimeout=3 electionAlg=3 autopurge.snapRetainCount=5 autopurge.purgeInterval=24 #忽略ACL驗證 skipACL=yes forceSync=yes fsync.warningthresholdms=50
編寫正式安裝Dcoekr命令:api
docker run -itd -p 2181:2181 -p 2888:2888 -p 3888:3888 --restart always --name=zookeeper-develop-server --privileged=true \ -v /docker/develop/zookeeper/conf/zoo.cfg:/conf/zoo.cfg \ -v /docker/develop/zookeeper/data:/data \ -v /docker/develop/zookeeper/logs:/datalog \ -e "TZ=Asia/Shanghai" \ -e "JAVA_OPTS=-server -Xms512m -Xmx512m -Xmn256m -Duser.home=/opt -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:+AlwaysPreTouch -XX:-UseBiasedLocking" \ zookeeper:latest
部署安裝dubbo-admin:app
docker run -itd --restart always --privileged=true --name dubbo-devleop-ops -p 8083:8080 -e admin.registry.address="zookeeper://IP:2181" -e admin.config-center="zookeeper://IP:2181" -e admin.metadata-report.address="zookeeper://IP:2181" -e "JAVA_OPTS=-server -Xms512m -Xmx512m -Xmn256m -Duser.home=/opt -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:+AlwaysPreTouch -XX:-UseBiasedLocking" -e TZ="Asia/Shanghai" apache/dubbo-admin:latest
建立工程:pivotal-cloud-dependencies [統一管理工程版本依賴資源]
通常都是使用Maven做爲構建工具,這裏便只需在pom.xml中添加以下依賴便可:
在<properties>標籤訂義依賴版本號:框架
<!--spring-boot dubbo setting --> <dubbo.version>2.7.3</dubbo.version> <spring-boot-dubbo.version>2.7.3</spring-boot-dubbo.version> <!--spring-boot zookeeper setting --> <zookeeper.version>3.5.6</zookeeper.version> <curator.version>4.2.0</curator.version>
在<dependencyManagement><dependencies>標籤添加以下內容:tcp
<!--spring-boot dubbo setting begin--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> <exclusions> <!--exclusion spring--> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <!--exclusion servlet-api--> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <!--exclusion log4j--> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <!--exclusion netty--> <exclusion> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${spring-boot-dubbo.version}</version> <exclusions> <!--exclusion dubbo--> <exclusion> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-metadata-report-zookeeper</artifactId> <version>${dubbo.version}</version> <exclusions> <!--exclusion dubbo-common--> <exclusion> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-common</artifactId> </exclusion> <!--exclusion dubbo-remoting-zookeeper--> <exclusion> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-remoting-zookeeper</artifactId> </exclusion> </exclusions> </dependency> <!--spring-boot dubbo setting end--> <!--spring-boot zookeeper setting begin--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>${zookeeper.version}</version> <exclusions> <!--exclusion log4j--> <exclusion> <artifactId>log4j</artifactId> <groupId>log4j</groupId> </exclusion> <!--exclusion slf4j-api--> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> <!--exclusion slf4j-log4j12--> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>${curator.version}</version> <exclusions> <!--exclusion curator-client--> <exclusion> <groupId>org.apache.curator</groupId> <artifactId>curator-client</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>${curator.version}</version> <exclusions> <!--exclusion curator-framework--> <exclusion> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-client</artifactId> <version>${curator.version}</version> <exclusions> <!--exclusion curator-framework--> <exclusion> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> </exclusion> <!--exclusion zookeeper--> <exclusion> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </exclusion> </exclusions> </dependency> <!--spring-boot zookeeper setting end-->
ps[注意事項]:
1.使用pivotal-cloud-dependencies的意義,能夠排除多餘和重複依賴,解決依賴衝突等具備指導和參考的做用
2.對於升級和改造能夠靈活切換,統一管理版本號等
建立工程:pivotal-dubbo-integration
與Dubbo相關的依賴:
<!--spring-boot dubbo setting begin--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${spring-boot-dubbo.version}</version> </dependency> <!--spring-boot dubbo setting end-->
與Zookeeper相關的依賴:
<!--spring-boot zookeeper setting begin--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>${zookeeper.version}</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>${curator.version}</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>${curator.version}</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-client</artifactId> <version>${curator.version}</version> </dependency> <!--spring-boot zookeeper setting end-->
而後運行打包構建命令:mvn clean install 將工程打成一個jar,而後在工程須要使用Dubbo做爲Provider和Consumer 的工程模塊中依賴此內部整合工程:
<!--pivotal dubbo setting begin --> <dependency> <groupId>com.mark.apple</groupId> <artifactId>pivotal-dubbo-integration</artifactId> version>${project.version}</version> </dependency> <!--pivotal dubbo setting end-->
ps[注意事項]:
1.使用pivotal-dubbo-integration的意義,能夠自定義封裝Dubbo相關特殊場景下的自定義模塊[自定義Dubbo序列化等],以及Dubbo性能調優等
2.能夠整合以及其餘框架,譬如[Dubbo網關以及Dubbo指標監控等]
最後在Provider和Consumer的工程配置相關屬性:
Provider 相關屬性配置:
##################################################### #########Springboot Dubbo Provider Setting########## ##################################################### pivotal.zookeeper.server-address=zookeeper://IP:2181 dubbo.metadata-report.address=${pivotal.zookeeper.server-address} dubbo.application.id=${spring.application.name}-${spring.profiles.active} dubbo.application.name=${spring.application.name}-${spring.profiles.active} dubbo.application.registry=${spring.application.name}-${spring.profiles.active} dubbo.application.organization=com.mark.apple dubbo.application.architecture=${dubbo.application.name} dubbo.application.environment=${spring.profiles.active} dubbo.application.logger=slf4j dubbo.config.override=true dubbo.config.multiple=true #dubbo file upload length # ProtocolConfig Bean dubbo.protocol.id=dubbo dubbo.protocol.name=dubbo #dubbo.protocol.status=client dubbo.protocol.payload=2147483647 dubbo.protocol.buffer=8192 dubbo.protocol.register=true dubbo.protocol.server=netty dubbo.protocol.transporter=netty dubbo.protocol.threadpool=cached dubbo.protocol.threads=200 dubbo.protocol.iothreads=2 dubbo.protocol.dispatcher=all #RegistryConfig Bean dubbo.registry.address=${pivotal.zookeeper.server-address} # ProtocolConfig Bean dubbo.protocol.id=dubbo dubbo.protocol.name=dubbo dubbo.protocol.port=28080 dubbo.protocol.status=server dubbo.protocol.payload=2147483647 dubbo.protocol.buffer=8192 dubbo.protocol.register=true dubbo.protocol.server=netty dubbo.protocol.transporter=netty dubbo.protocol.threadpool=cached dubbo.protocol.threads=200 dubbo.protocol.dispatcher=all dubbo.protocol.accepts=1000 #Dubbo Provider setting dubbo.provider.accepts=0 dubbo.protocol.iothreads=2 dubbo.provider.threads=200 dubbo.provider.threadpool=cached dubbo.provider.executes=0 dubbo.provider.validation=true dubbo.provider.connections=0 dubbo.provider.actives=0 dubbo.provider.buffer=8192 dubbo.provider.retries=3 dubbo.provider.delay=-1 dubbo.provider.timeout=360000 #Dubbo Consumer setting dubbo.consumer.lazy=true dubbo.consumer.connections=0 dubbo.consumer.actives=0 dubbo.consumer.retries=3 dubbo.consumer.timeout=360000 dubbo.consumer.validation=true dubbo.consumer.check=true dubbo.consumer.loadbalance=consistenthash #Base packages to scan Dubbo Components (e.g @Service , @Reference) dubbo.scan.base-packages=com.pivotal.authority.server.impl
Consumer相關屬性配置:
##################################################### #########Springboot Dubbo Consumer Setting########## ##################################################### pivotal.zookeeper.server-address=zookeeper://IP:2181 dubbo.metadata-report.address=${pivotal.zookeeper.server-address} # Dubbo Config properties dubbo.application.id=${spring.application.name}-${spring.profiles.active} dubbo.application.name=${spring.application.name}-${spring.profiles.active} dubbo.application.registry=${spring.application.name}-${spring.profiles.active} dubbo.application.organization=com.mark.apple dubbo.application.architecture=${dubbo.application.name} dubbo.application.environment=${spring.profiles.active} dubbo.application.logger=slf4j dubbo.config.override=true dubbo.config.multiple=true # ProtocolConfig Bean dubbo.protocol.id=dubbo dubbo.protocol.name=dubbo dubbo.protocol.status=client dubbo.protocol.payload=2147483647 dubbo.protocol.buffer=8192 dubbo.protocol.register=true dubbo.protocol.server=netty dubbo.protocol.transporter=netty dubbo.protocol.threadpool=cached dubbo.protocol.threads=200 dubbo.protocol.iothreads=2 dubbo.protocol.dispatcher=all #RegistryConfig Bean dubbo.registry.id=${dubbo.application.name} dubbo.registry.protocol=dubbo dubbo.registry.check=true dubbo.registry.address=${pivotal.zookeeper.server-address} #Dubbo Consumer setting dubbo.consumer.lazy=true dubbo.consumer.connections=0 dubbo.consumer.actives=0 dubbo.consumer.retries=3 dubbo.consumer.validation=true dubbo.consumer.check=true dubbo.consumer.loadbalance=consistenthash