dubbo+zookeeper 分布式项目搭建

青旅半醒 2022-07-12 07:18 321阅读 0赞

dubbo简介:

  1. 系统间服务调用方式有三种,浏览器直接访问,通过ajax或者jsonp方式请求。第二种,httpclient方式发起http协议的请求,是后台调用。第三种基于RPC方式的远程过程调用协议的请求。DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

了解dubbo工作原理,下面的依赖关系图是重点内容:

Center

  1. 图中小方块Protocol, Cluster, Proxy, Service, Container, Registry, Monitor代表层或模块,蓝色的表示与业务有交互,绿色的表示只对Dubbo内部交互。
  2. 图中背景方块Consumer, Provider, Registry, Monitor代表部署逻辑拓普节点。
  3. 图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用。
  4. 图中只包含RPC的层,不包含Remoting的层,Remoting整体都隐含在Protocol中。
  5. ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。它的作用相当于对集群的管理,消费者和生产者都要到zookeeper进行服务的发布和注册。

下面我们亲手搭建一个分布式的服务:

1.将dubbo包安装到本地maven

2.安装zookeeper

3.写服务提供方代码(API项目,服务实现层项目)

4.写服务调用方代码

第一步,略

第二步,略

遇到三个问题:

  1. 1.dubboinstall的时候发生一个问题:Maven : error in opening zip file when running maven
  2. 解决:我们要做的就是删除repository目录下提示“error in opening zip file",然后从新编译就OK了,如果遇到多个这样的错误只需要把出现这种错误的目录删除,从新编译就行了。
  3. 2. Dubbo admin在JDK1.8环境运行报Invalid property 'URIType' of bean class
  4. 原因:URIType 的get和set方法写得不规范。
  5. 解决方法:降级jdk到1.7。
  6. 3.问题:dubbo部署到tomcat,一直执行到 INFO zkclient.ZkEventThread - Starting ZkClient 就不会再继续往下执行了
  7. 解决:这个简单,是因为zookeeper服务没有启动。

3.写服务提供方代码(API项目,服务实现层项目)

三个maven项目,dubbo-a、dubbo-b、dubbo-b-api。其中A是服务调用方,B是服务提供方,API项目中放着B暴露的接口,和POJO。A和B项目都依赖dubbo-b-api。dubbo是采用spring配置的,所以需要导入spring容器。

dubbo-b:

Center 1

dubbo-b-api:

Center 2

dubbo-a:

Center 3

实现类修不展示了,随便写点业务逻辑做测试就行,主要是配置文件的配置。

dubbo-a/dubbo-comsummer.xml:

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
  3. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  6. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
  7. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
  8. http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  9. <!-- 提供方应用信息,用于计算依赖关系 -->
  10. <dubbo:application name="dubbo-a-consumer"/>
  11. <!-- 这里使用的注册中心是zookeeper -->
  12. <dubbo:registry address="zookeeper://127.0.0.1:2181"
  13. client="zkclient"/>
  14. <!-- 从注册中心中查找服务 -->
  15. <dubbo:reference id="userService" interface="cn.itcast.dubbo.service.UserService"/>
  16. </beans>

dubbo-b/dubbo-server.xml:

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
  3. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  6. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
  7. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
  8. http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  9. <!-- 提供方应用信息,用于计算依赖关系 -->
  10. <dubbo:application name="dubbo-b-server"/>
  11. <!-- 这里使用的注册中心是zookeeper -->
  12. <dubbo:registry address="zookeeper://127.0.0.1:2181"
  13. client="zkclient"/>
  14. <!-- 用dubbo协议在20880端口暴露服务 -->
  15. <dubbo:protocol name="dubbo" port="20880"/>
  16. <!-- 将该接口暴露到dubbo中 -->
  17. <dubbo:service interface="cn.itcast.dubbo.service.UserService"
  18. ref="userServiceImpl"/>
  19. <!-- 将具体的实现类加入到Spring容器中 -->
  20. <bean id="userServiceImpl" class="cn.itcast.dubbo.service.impl.UserServiceImpl"/>
  21. <dubbo:monitor protocol="registry"/>
  22. </beans>

为什么会有api项目,把公共的内容抽取出来,如接口,pojo,解决了代码重复的问题,同时可以统一管理。

dubbo监控工具:dubbo-monitor-simple

服务运行之后,可以通过:dubbo-monitor-simple 监控dubbo服务。查看服务调用次数,等等。这里最大并发数是累加的。

Center 4

dubbo管理工具:dubbo-admin-2.5.3.war

1.解压到tomcat的root下面,替换了
2.配置D:\dubbo-tomcat7.0\webapps\ROOT\WEB-INF\dubbo.properties
3.启动tomcat,一定要先启动zkServer.cmd

最后访问8080端口,就可以看到dubbo的管理界面了

Center 5

总结:

  1. 多学习,多思考。

发表评论

表情:
评论列表 (有 0 条评论,321人围观)

还没有评论,来说两句吧...

相关阅读