Dubbo是Alibaba開源的分佈式服務框架,它最大的特色是按照分層的方
式來架構,使用這種方式可使各個層之間解耦合(或者最大限度地鬆耦
合)。從服務模型的角度來看,Dubbo採用的是一種很是簡單的模型,要
麼是提供方提供服務,要麼是消費方消費服務,因此基於這一點能夠抽象
出服務提供方(Provider)和服務消費方(Consumer)兩個角色。java
Dubbo就是資源調度和治理中心的管理工具。mysql
節點角色說明:web
Provider: 暴露服務的服務提供方。算法
Consumer: 調用遠程服務的服務消費方。spring
Registry: 服務註冊與發現的註冊中心。sql
Monitor: 統計服務的調用次調和調用時間的監控中心。springboot
Container: 服務運行容器。mybatis
調用關係說明:架構
0. 服務容器負責啓動,加載,運行服務提供者。app
1. 服務提供者在啓動時,向註冊中心註冊本身提供的服務。
2. 服務消費者在啓動時,向註冊中心訂閱本身所需的服務。
3. 註冊中心返回服務提供者地址列表給消費者,若是有變動,註冊中心將基於長鏈接推送變動數據給消費者。
4. 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,若是調用失敗,再選另外一臺調用。
5. 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。
官方推薦使用zookeeper註冊中心。
註冊中心負責服務地址的註冊與查找,至關於目錄服務,服務提供者和消費者只在啓動時與註冊中心交互,註冊中心不轉發請求,壓力較小。使用dubbo-2.3.3以上版本,建議使用zookeeper註冊中心。
Zookeeper是Apacahe Hadoop的子項目,是一個樹型的目錄服務,支持變動推送,適合做爲Dubbo服務的註冊中心,工業強度較高,可用於生產環境,並推薦使用
Zookeeper:
一、能夠做爲集羣的管理工具使用。
二、能夠集中管理配置文件。
引入依賴
<!-- Spring Boot 啓動父依賴 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--dubbo依賴--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <dependency> <groupId>com.alibaba.spring.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <!--zkclient依賴--> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--mybatis起步依賴--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!--mysql依賴--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> </dependencies>
application.properties
#應用名稱 dubbo.application.name=provider #註冊中心地址 dubbo.registry.address=zookeeper://localhost:2181 #服務類包目錄 dubbo.scan.base-packages=com.yehui.service ##協議名稱 #dubbo.protocol.name=dubbo ##協議端口 #dubbo.protocol.port=20880 server.port=8087 spring.datasource.password=root spring.datasource.username=root spring.datasource.url=jdbc:mysql://localhost:3306/study spring.datasource.driver-class-name=com.mysql.jdbc.Driver mybatis.mapper-locations=classpath:mapper/*.xml #spring.dubbo.application.name 應用名稱 #spring.dubbo.registry.address 註冊中心地址 #spring.dubbo.protocol.name 協議名稱 #spring.dubbo.protocol.port 協議端口 #spring.dubbo.scan dubbo 服務類包目錄 #spring.dubbo.scan 掃描包
建立接口
public interface DubboService { public List<TbUser> selectList(); }
實現類
@Component @Service public class DubboServiceImpl implements DubboService { @Autowired private DubboMapper dubboMapper; @Override public List<TbUser> selectList() { return dubboMapper.selectList(); } }
mapper接口
@Mapper public interface DubboMapper { public List<TbUser> selectList(); }
實體類
public class TbUser implements Serializable { private Integer id; private String username; private String age;
mapper.xml
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.yehui.mapper.DubboMapper"> <select id="selectList" resultType="com.yehui.entity.TbUser"> select * from tb_user </select> </mapper>
啓動類
@SpringBootApplication @EnableDubboConfiguration//註解必須有不然不然會報錯 public class DubboApplication { public static void main(String[] args) { SpringApplication.run(DubboApplication.class,args); } }
啓動zookeeper以後在啓動主啓動類
引入依賴
<!-- Spring Boot 啓動父依賴 這個依賴也很多 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> </parent> <dependencies> <dependency> <groupId>com.yehui</groupId> <artifactId>springboot-dubbo-server</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
application.properties文件
## Dubbo 服務提供者配置 dubbo.application.name=cutomer dubbo.registry.address=zookeeper://192.168.1.8:2181 server.port=8088 spring.datasource.password=root spring.datasource.username=root spring.datasource.url=jdbc:mysql://localhost:3306/study spring.datasource.driver-class-name=com.mysql.jdbc.Driver mybatis.mapper-locations=classpath:mapper/*.xml
controller類
@RestController public class DubboController { @Reference private DubboService dubboService; @RequestMapping("/findAll") public List<TbUser> findAll(){ return dubboService.selectList(); } }
主啓動類
@SpringBootApplication @EnableDubboConfiguration //這個註解不能少 public class StartAppClient { public static void main(String[] args) { SpringApplication.run(StartAppClient.class); } }
啓動主啓動類測試