阿里雲Centos搭建Spring項目+Dubbo+Zookeeper【圖文詳解+常見問題解決+下載鏈接】

該文章搭建之前需要具備的軟件及工具:

1.一臺雲服務器[我的是阿里雲的centos]

2.雲服務器安裝好JDK[沒安裝的參考這篇:阿里雲服務器安裝JDK]

3.雲服務器安裝好Tomcat[沒安裝的參考這篇:阿里雲服務器安裝Tomcat]

4.zookeeper,dubbo-admin[我用的版本:zookeeper3.4.6,dubbo-admin2.4.1]【文章中貼有下載地址鏈接】

1.搭建zookeeper

  • 下載zookeeper,安裝並解壓,此次我用的是:3.4.6,路徑如下

下載地址: zookeeper下載點我

  • 複製一份 zoo_sample.cfg  爲 zoo.cfg 如下

 

  • vim zoo.cfg

 

默認進來之後,會有

Server.1=Master:3333:4444

Server.2=slave1:3333:4444

Server.3=slave2:3333:4444

注意點1:更改成自己服務器的IP,具體幾個server可根據需要添加,由於服務器性能原因,我這裏只保留一個,就是單機模式

注意點2:上面的dataDir  dataLogDir  先手動去確認一下,沒有就手動  mkdir

注意點3:沒有myid文件,需要在上圖的:dataDir路徑下生成一個【vi myid就行】,同時寫入上面的server.X中 的 X

【Server.1=Master:3333:4444   就在myid中寫個1

Server.1=Master:3333:4444  Server.2=slave1:3333:4444   就寫1  2 】

【集羣模式下除了多個zookeeper外,在myid文件中也需要添加server.X中的X】

 

  • 修改完之後保存退出,進入bin目錄下,啓動

 ./zkServer.sh start   啓動指令

./zkServer.sh status 查看啓動狀態的指令

2.搭建dubbo-admin

  • 首先下載dubbo-admin的war包,沒有的可以在下面的鏈接進行下載

dubbo-admin-2.4.1.war

  • 下載完之後,打開找到裏面的dubbo.Properties,需要更改一點點[2181端口對應的zookeeper監聽的端口]

dubbo.registry.address=zookeeper://39.108.173.63:2181

dubbo.admin.root.password=root

dubbo.admin.guest.password=guest

  • 把紅色區域的IP更換成自己的即可
  • 然後把war包放在tomcat的webapps路徑下

  • 以上基本就完成了dubbo-admin的相關工作,啓動tomcat即可【啓動有問題的可以看下第四點:常見問題】

啓動完成之後訪問

http://39.108.173.63:8080/dubbo-admin-2.4.1/

3.創建Spring項目並訪問 

  • Spring項目的創建Demo,是可以直接拿來使用的,導入Eclipse之後更改裏面的公網IP即可,對應的代碼下載地址:
  • SpringDemo下載,即插即用

使用時候三個項目分別放在三個tomcat

  • 先啓動api
  • 再啓動provider
  • 再啓動consumer
  • 再啓動provider中的main
  • 再啓動consumer中的main 

4.常見問題及解決方案

  在搭建過程中,zookeeper搭建沒有遇到問題,遇到也都是可以百度到的,下面針對dubbo啓動的一次錯誤日誌,給出我此次的解決方案:

錯誤日誌:

java.net.UnknownHostException: izwz91b8s2j56kmxiwxcz: izwz91b8s2j56kmxiwxcz
	at java.net.InetAddress.getLocalHost(InetAddress.java:1473)
	at com.alibaba.dubbo.common.utils.NetUtils.getLocalAddress0(NetUtils.java:203)
	at com.alibaba.dubbo.common.utils.NetUtils.getLocalAddress(NetUtils.java:190)
	at com.alibaba.dubbo.common.utils.NetUtils.getLocalHost(NetUtils.java:154)
	at com.alibaba.dubbo.governance.sync.RegistryServerSync.<clinit>(RegistryServerSync.java:46)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:671)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:610)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:412)
	at org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:105)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:240)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:959)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
	at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
	at com.alibaba.citrus.webx.context.WebxComponentsLoader.initWebApplicationContext(WebxComponentsLoader.java:117)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5118)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5634)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
	at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1092)
	at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1984)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.UnknownHostException: izwz91b8s2j56km66xiwxcz
	at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
	at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901)
	at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293)
	at java.net.InetAddress.getLocalHost(InetAddress.java:1469)
	... 56 more
 WARN utils.ConfigUtils -  [DUBBO] No dubbo.properties found on the class path., dubbo version: 2.4.1, current host: 172.19.20.275

錯誤日誌主要看下最後,發現他提到:current host: 172.19.20.275

而上面又出現一個:UnknownHostException: izwz91b8s2j56kmxiwxcz

前者對應我阿里雲的公網IP,後者對應我的阿里雲實例ID

我的理解是:他默認映射的是私有IP而非共有IP,所以需要修改host文件,增加一組映射

具體修改方案如下:

vi /etc/hosts

遮擋部分對應自己的實例ID即可

vim /etc/sysconfig/network  

修改完之後需要重啓Linux,然後再依次啓動zookeeper,dubbo。就可以出現第三步的效果了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章