dubbox

下载

项目链接:https://github.com/dangdangdotcom/dubbox
clone至本地

  1. git clone https://github.com/dangdangdotcom/dubbox.git

maven编译

由于dubbox并没向maven提交编译后的jar包,需要在本地编译得到jar包。
在项目目录下执行以下命令,等待完成。

  1. mvn install -f ./pom.xml -D maven.test.skip=true

图片.png
编译完成

可以看到maven的本地仓库中出现了dubbo相关的包

图片.png

启动zookeeper,部署dubbox到tomcat

编译完成后在dubbox项目的dubbo-admin目录下新出现target目录,内容如下所示
图片.png
将dubbo-admin-2.8.4.war这个包复制到tomcat的webapps目录下。(启动tomcat会生成dubbo-admin-2.8.4这个目录,这边我已经启动过了)

图片.png

运行ZooKeeper的bin目录下的zkServer.cmd,启动一个ZooKeeper实例,再启动tomcat。成功启动后tomcat的webapps目录下会出现dubbo-admin-2.8.4这个新目录,进入其WEB-INF目录可以看到以下内容。
图片.png
打开dubbo.properties这个文件,可以看到dubbo的一些配置信息。
注册中心使用了ZooKeeper,以及访问者的用户名和密码。这里无需修改。

  1. dubbo.registry.address=zookeeper://127.0.0.1:2181
  2. dubbo.admin.root.password=root
  3. dubbo.admin.guest.password=guest

打开浏览器访问以下地址:http://localhost:8080/dubbo-admin-2.8.4/,用户名和密码均输入root,即可进入dubbo控制台。
图片.png

遇到问题

1

启动ZooKeeper实例后,再启动tomcat时产生如下错误信息

  1. 23-May-2020 12:59:24.263 严重 [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[HTTP/1.1-8080]]
  2. org.apache.catalina.LifecycleException: Protocol handler initialization failed
  3. at org.apache.catalina.connector.Connector.initInternal(Connector.java:1032)
  4. at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
  5. at org.apache.catalina.core.StandardService.initInternal(StandardService.java:552)
  6. at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
  7. at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:848)
  8. at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
  9. at org.apache.catalina.startup.Catalina.load(Catalina.java:639)
  10. at org.apache.catalina.startup.Catalina.load(Catalina.java:662)
  11. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  12. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  13. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  14. at java.lang.reflect.Method.invoke(Method.java:498)
  15. at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:303)
  16. at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
  17. Caused by: java.net.BindException: Address already in use: bind
  18. at sun.nio.ch.Net.bind0(Native Method)
  19. at sun.nio.ch.Net.bind(Net.java:433)
  20. at sun.nio.ch.Net.bind(Net.java:425)
  21. at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
  22. at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
  23. at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:221)
  24. at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1118)
  25. at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:223)
  26. at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:587)
  27. at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:74)
  28. at org.apache.catalina.connector.Connector.initInternal(Connector.java:1030)
  29. ... 13 more

这是因为ZooKeeper和tomcat都默认使用了本机的8080端口,已经先启动了ZooKeeper,所以tomcat无法在启动。

  • 解决方法

打开ZooKeeper的zoo.cfg配置文件,加上以下内容,为服务端指定一个未被占用的端口号。

  1. # the port at which the server will connect
  2. admin.serverPort=8081

更多详细内容可以参考以下这篇:zookeeper 和tomcat 部署在同一主机8080端口问题

2

运行DubboxTest时报错

  1. Exception in thread "main" com.alibaba.dubbo.rpc.RpcException: Fail to start server(url: dubbo://192.168.56.1:20880/com.hit.DubboDemoService?anyhost=true&application=dubbox-app&channel.readonly.sent=true&codec=dubbo&connections=100&dubbo=2.8.4&generic=false&heartbeat=60000&interface=com.hit.DubboDemoService&methods=hello&owner=littlesnow&pid=21272&side=provider&timeout=40000&timestamp=1590223210974) Failed to bind NettyServer on /192.168.56.1:20880, cause: Failed to bind to: /0.0.0.0:20880
  2. at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol.createServer(DubboProtocol.java:331)
  3. at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol.openServer(DubboProtocol.java:308)
  4. at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol.export(DubboProtocol.java:258)
  5. at com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper.export(ProtocolListenerWrapper.java:56)
  6. at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper.export(ProtocolFilterWrapper.java:55)
  7. at com.alibaba.dubbo.rpc.Protocol$Adpative.export(Protocol$Adpative.java)
  8. at com.alibaba.dubbo.registry.integration.RegistryProtocol.doLocalExport(RegistryProtocol.java:153)
  9. at com.alibaba.dubbo.registry.integration.RegistryProtocol.export(RegistryProtocol.java:107)
  10. at com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper.export(ProtocolListenerWrapper.java:54)
  11. at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper.export(ProtocolFilterWrapper.java:53)
  12. at com.alibaba.dubbo.rpc.Protocol$Adpative.export(Protocol$Adpative.java)
  13. at com.alibaba.dubbo.config.ServiceConfig.doExportUrlsFor1Protocol(ServiceConfig.java:489)
  14. at com.alibaba.dubbo.config.ServiceConfig.doExportUrls(ServiceConfig.java:285)
  15. at com.alibaba.dubbo.config.ServiceConfig.doExport(ServiceConfig.java:246)
  16. at com.alibaba.dubbo.config.ServiceConfig.export(ServiceConfig.java:145)
  17. at com.alibaba.dubbo.config.spring.ServiceBean.onApplicationEvent(ServiceBean.java:110)
  18. at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:96)
  19. at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:334)
  20. at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:948)
  21. at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
  22. at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
  23. at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
  24. at com.hit.DubboxTest.main(DubboxTest.java:12)
  25. Caused by: com.alibaba.dubbo.remoting.RemotingException: Failed to bind NettyServer on /192.168.56.1:20880, cause: Failed to bind to: /0.0.0.0:20880
  26. at com.alibaba.dubbo.remoting.transport.AbstractServer.<init>(AbstractServer.java:74)
  27. at com.alibaba.dubbo.remoting.transport.netty.NettyServer.<init>(NettyServer.java:63)
  28. at com.alibaba.dubbo.remoting.transport.netty.NettyTransporter.bind(NettyTransporter.java:33)
  29. at com.alibaba.dubbo.remoting.Transporter$Adpative.bind(Transporter$Adpative.java)
  30. at com.alibaba.dubbo.remoting.Transporters.bind(Transporters.java:48)
  31. at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchanger.bind(HeaderExchanger.java:41)
  32. at com.alibaba.dubbo.remoting.exchange.Exchangers.bind(Exchangers.java:63)
  33. at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol.createServer(DubboProtocol.java:329)
  34. ... 22 more
  35. Caused by: org.jboss.netty.channel.ChannelException: Failed to bind to: /0.0.0.0:20880
  36. at org.jboss.netty.bootstrap.ServerBootstrap.bind(ServerBootstrap.java:272)
  37. at com.alibaba.dubbo.remoting.transport.netty.NettyServer.doOpen(NettyServer.java:94)
  38. at com.alibaba.dubbo.remoting.transport.AbstractServer.<init>(AbstractServer.java:68)
  39. ... 29 more
  40. Caused by: java.net.BindException: Address already in use: bind
  41. at sun.nio.ch.Net.bind0(Native Method)
  42. at sun.nio.ch.Net.bind(Net.java:433)
  43. at sun.nio.ch.Net.bind(Net.java:425)
  44. at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
  45. at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
  46. at org.jboss.netty.channel.socket.nio.NioServerBoss$RegisterTask.run(NioServerBoss.java:193)
  47. at org.jboss.netty.channel.socket.nio.AbstractNioSelector.processTaskQueue(AbstractNioSelector.java:366)
  48. at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:290)
  49. at org.jboss.netty.channel.socket.nio.NioServerBoss.run(NioServerBoss.java:42)
  50. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  51. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  52. at java.lang.Thread.run(Thread.java:748)

这是因为20880这个端口被占用了,Dubbo无法使用,更换一下端口号。

  1. <dubbo:protocol name="dubbo" port="20888"/>

参考链接

Zookeeper+Dubbox 环境搭建日记
zookeeper 和tomcat 部署在同一主机8080端口问题

https://cloud.tencent.com/developer/article/1024537