dubbo入门学习
Posted biehongli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dubbo入门学习相关的知识,希望对你有一定的参考价值。
官方网址:http://dubbo.apache.org/zh-cn/index.html
学习可以参考官网中文文档:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
1、Apache Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
1 如果项目表现层、服务层是不同的项目,可以使用dubbo实现两个系统之间的通信。服务层和表现层相互通信,使用dubbo中间件,让表现层调用服务层。工程之间的相互通信可以使用dubbo,,可以统一管理服务,系统之间的调用。 2 如何实现远程通信。 3 1、Webservice,效率不高,基于soap协议,项目中不推荐使用。 4 2、使用restful形式的服务,http+json,很多项目中应用。如果服务太多,服务之间的调用关系混乱,需要治疗服务。 5 3、dubbo,使用rpc协议进行远程调用,直接使用socket通信,传输效率高,并且可以统计出系统之间的调用关系,调用次数。缺点,由于是java开发,只能是两个java项目进行调度。
2、dubbo架构。术语来自官网。可以直接查看官网。
节点角色说明
节点 | 角色说明 |
---|---|
Provider |
暴露服务的服务提供方 |
Consumer |
调用远程服务的服务消费方 |
Registry |
服务注册与发现的注册中心 |
Monitor |
统计服务的调用次数和调用时间的监控中心 |
Container |
服务运行容器 |
调用关系说明
- 服务容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者在启动时,向注册中心订阅自己所需的服务。
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。
3、注册中心(推荐zookeeper,也可以使用redis的呢)
注册中心负责服务地址得注册与查找,相当于目录服务,服务提供者和消费者只在启动得时候与注册中心交互,注册中心不转发请求,压力较小,使用dubbo2.3.3以上版本,建议使用zookeeper注册中心。zookeeper是一个树形的目录服务,支持变更推送,适合作为dubbo服务的注册中心,工业强度高,可以用于生产环境,推荐使用。
4、安装zookeeper,必须首先安装jdk,这里安装jdk1.7版本。首先将安装包上传到机器上面哦。
[root@localhost jdk1.7.0_55]# tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/soft
[root@localhost ~]# vim /etc/profile
1 export JAVA_HOME=/home/hadoop/soft/jdk1.7.0_55 2 export PATH=$PATH:$JAVA_HOME/bin
[root@localhost ~]# source /etc/profile
[root@localhost ~]# java
[root@localhost ~]# javac
[root@localhost ~]# java -version
5、开始安装zookeeper,首先将安装包上传到机器上面哦。
解压缩操作哦。
[root@localhost package]# tar -zxvf zookeeper-3.4.6.tar.gz -C /home/hadoop/soft/
然后配置一下zookeeper,就可以启动zookeeper了。
首先创建一个data文件夹。
配置完成了,就可以启动zookeeper。进行验证是否可以正常启动。
1 [root@localhost bin]# ./zkServer.sh start 2 JMX enabled by default 3 Using config: /home/hadoop/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg 4 Starting zookeeper ... STARTED 5 [root@localhost bin]# ./zkServer.sh status 6 JMX enabled by default 7 Using config: /home/hadoop/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg 8 Mode: standalone 9 [root@localhost bin]#
[root@localhost bin]# ./zkServer.sh start 启动
[root@localhost bin]# ./zkServer.sh status 查看启动状态
[root@localhost bin]# ./zkServer.sh stop 关闭
6、zookeeper安装成功以后,就可以操作,服务如何发布,客户端如何引用服务。
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何api侵入,只需要用spring加载dubbo的配置即可,dubbo基于spring的schema扩展进行加载。
远程服务。在本地服务的基础上,只需要简单的配置,即可以完成远程话。
将传统写的xml配置文件中的bean注入以及bean的依赖注入的配置拆分成两份,将服务定义部分放在服务提供方remote-provider.xml,将服务引用部分放在服务消费方remote-consumer.xml配置文件中。并在提供方增加暴漏服务配置<dubbo:service>,在消费方增加引用服务配置<dubbo:reference>。官网截图:
7、发布dubbo服务。定义一个接口。
1 package com.taotao.service; 2 3 import com.taotao.pojo.TbItem; 4 5 /** 6 * 7 * @ClassName: ItemService.java 8 * @author: biehl 9 * @since: 2019年8月2日 下午3:32:36 10 * @Copyright: ©2019 biehl 版权所有 11 * @version: 0.0.1 12 * @Description:商品接口类 13 * 14 */ 15 public interface ItemService 16 17 /** 18 * 根据itemId查询出商品信息 19 * 20 * @param itemId 21 * @return 22 */ 23 public TbItem getItemById(long itemId); 24 25
定义实现接口的实现类。
1 package com.taotao.service.impl; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.stereotype.Service; 5 import org.springframework.util.StringUtils; 6 7 import com.taotao.mapper.TbItemMapper; 8 import com.taotao.pojo.TbItem; 9 import com.taotao.service.ItemService; 10 11 /** 12 * 13 * @ClassName: ItemServiceImpl.java 14 * @author: biehl 15 * @since: 2019年8月2日 下午3:51:24 16 * @Copyright: ©2019 biehl 版权所有 17 * @version: 0.0.1 18 * @Description: 商品实现类 19 */ 20 @Service 21 public class ItemServiceImpl implements ItemService 22 23 @Autowired 24 private TbItemMapper tbItemMapper; 25 26 @Override 27 public TbItem getItemById(long itemId) 28 TbItem tbItem = new TbItem(); 29 if (!StringUtils.isEmpty(itemId)) 30 tbItem = tbItemMapper.selectByPrimaryKey(itemId); 31 32 // 返回信息以后就可以发布服务 33 return tbItem; 34 35 36
配置提供dubbo的服务。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:p="http://www.springframework.org/schema/p" 5 xmlns:aop="http://www.springframework.org/schema/aop" 6 xmlns:tx="http://www.springframework.org/schema/tx" 7 xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 8 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 9 xsi:schemaLocation="http://www.springframework.org/schema/beans 10 http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 11 http://www.springframework.org/schema/context 12 http://www.springframework.org/schema/context/spring-context-4.2.xsd 13 http://www.springframework.org/schema/aop 14 http://www.springframework.org/schema/aop/spring-aop-4.2.xsd 15 http://www.springframework.org/schema/tx 16 http://www.springframework.org/schema/tx/spring-tx-4.2.xsd 17 http://code.alibabatech.com/schema/dubbo 18 http://code.alibabatech.com/schema/dubbo/dubbo.xsd 19 http://www.springframework.org/schema/util 20 http://www.springframework.org/schema/util/spring-util-4.2.xsd"> 21 22 <!-- 1、配置包扫描器,扫描所有带@Service注解的类,將創建的對象放到Spring容器中 --> 23 <!-- 也可以将子包扫描进去 --> 24 <!-- 将扫描com.taotao.service、com.taotao.service.impl --> 25 <context:component-scan 26 base-package="com.taotao.service"></context:component-scan> 27 28 <!-- 配置spring的事务,单独提取出来 --> 29 30 <!-- 发布dubbo服务 --> 31 <!-- 提供方应用信息,用于计算依赖关系 --> 32 <dubbo:application name="taotao-manager" /> 33 <!-- 注册中心的地址 --> 34 <dubbo:registry protocol="zookeeper" address="192.168.110.140:2181" /> 35 <!-- 用dubbo协议在20880端口暴露服务 --> 36 <dubbo:protocol name="dubbo" port="20880" /> 37 <!-- 声明需要暴露的服务接口 --> 38 <!-- ref="itemServiceImpl"就是扫描service的时候,注入到容器的bean --> 39 <dubbo:service interface="com.taotao.service.ItemService" ref="itemServiceImpl" timeout="300000" /> 40 <!-- <dubbo:service interface="com.taotao.service.ItemCatService" ref="itemCatServiceImpl" timeout="300000" /> --> 41 42 43 44 45 46 47 </beans>
如图所示:
8、在表现层引用dubbo的服务。提供方和引用方都需要引入dubbo的jar包哦。
1 <!-- dubbo相关 --> 2 <dependency> 3 <groupId>com.alibaba</groupId> 4 <artifactId>dubbo</artifactId> 5 <!-- 排除spring的2.5.6版本,netty3.2.5版本,避免冲突 --> 6 <exclusions> 7 <exclusion> 8 <groupId>org.springframework</groupId> 9 <artifactId>spring</artifactId> 10 </exclusion> 11 <exclusion> 12 <groupId>org.jboss.netty</groupId> 13 <artifactId>netty</artifactId> 14 </exclusion> 15 </exclusions> 16 </dependency> 17 <dependency> 18 <groupId>org.apache.zookeeper</groupId> 19 <artifactId>zookeeper</artifactId> 20 </dependency> 21 <dependency> 22 <groupId>com.github.sgroschupf</groupId> 23 <artifactId>zkclient</artifactId> 24 </dependency>
配置一下引用方的配置。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:p="http://www.springframework.org/schema/p" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 7 xmlns:mvc="http://www.springframework.org/schema/mvc" 8 xsi:schemaLocation="http://www.springframework.org/schema/beans 9 http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 10 http://www.springframework.org/schema/mvc 11 http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd 12 http://code.alibabatech.com/schema/dubbo 13 http://code.alibabatech.com/schema/dubbo/dubbo.xsd 14 http://www.springframework.org/schema/context 15 http://www.springframework.org/schema/context/spring-context-4.2.xsd"> 16 17 <!-- 1、加载属性文件 --> 18 <!-- <context:property-placeholder location="classpath:resource/resource.properties"/> --> 19 20 <!-- 2、配置注解驱动 --> 21 <mvc:annotation-driven /> 22 23 <!-- 3、视图解析器 --> 24 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 25 <property name="prefix" value="/WEB-INF/jsp/" /> 26 <property name="suffix" value=".jsp" /> 27 </bean> 28 29 <!-- 4、配置包扫描器,扫描@Controller注解的类 --> 30 <context:component-scan base-package="com.taotao.controller"/> 31 32 <!-- 5、配置资源映射 --> 33 <mvc:resources location="/css/" mapping="/css/**"/> 34 <mvc:resources location="/js/" mapping="/js/**"/> 35 36 <!-- 6、多媒体解析器 --> 37 <!-- 配置文件上传解析器 --> 38 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 39 <!-- 设定默认编码 --> 40 <property name="defaultEncoding" value="UTF-8"></property> 41 <!-- 设定文件上传的最大值5MB,5*1024*1024 --> 42 <property name="maxUploadSize" value="5242880"></property> 43 </bean> 44 45 46 <!-- 引用服务,也要在spring容器中,直接在这里引用即可 --> 47 <!-- 引用dubbo服务 --> 48 <!-- 名称不一样的哦 --> 49 <dubbo:application name="taotao-manager-web"/> 50 <dubbo:registry protocol="zookeeper" address="192.168.110.140:2181"/> 51 <dubbo:reference interface="com.taotao.service.ItemService" id="itemService" /> 52 <!-- <dubbo:reference interface="com.taotao.service.ItemCatService" id="itemCatService" /> 53 <dubbo:reference interface="com.taotao.content.service.ContentCategoryService" id="contentCategoryService" /> 54 <dubbo:reference interface="com.taotao.content.service.ContentService" id="contentService" /> 55 <dubbo:reference interface="com.taotao.search.service.SearchItemService" id="searchItemService" /> --> 56 57 58 59 60 </beans>
1 package com.taotao.controller; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.stereotype.Controller; 5 import org.springframework.web.bind.annotation.PathVariable; 6 import org.springframework.web.bind.annotation.RequestMapping; 7 import org.springframework.web.bind.annotation.ResponseBody; 8 9 import com.taotao.pojo.TbItem; 10 import com.taotao.service.ItemService; 11 12 /** 13 * 14 * @ClassName: ItemController.java 15 * @author: biehl 16 * @since: 2019年8月2日 下午5:10:31 17 * @Copyright: ©2019 biehl 版权所有 18 * @version: 0.0.1 19 * @Description:商品信息的控制层逻辑 20 */ 21 @Controller 22 public class ItemController 23 24 // itemService就是dubbo配置的id="itemService" 25 @Autowired 26 private ItemService itemService; 27 28 @RequestMapping(value = "/item/itemId") 29 @ResponseBody 30 public TbItem getItemById(@PathVariable(value = "itemId") Long itemId) 31 TbItem tbItem = new TbItem(); 32 tbItem = itemService.getItemById(itemId); 33 return tbItem; 34 35 36
9、dubbo服务调用测试。记得关闭dubbo服务器的防火墙,不然急死你。
待续......
以上是关于dubbo入门学习的主要内容,如果未能解决你的问题,请参考以下文章