第七章 SpringBoot集成Dubbo
- 官方下載地址
- 視頻觀看地址
https://www.bilibili.com/video/BV1XQ4y1m7ex
7.1 看 SpringBoot繼承Dubbo的文檔
https://github.com/apache/dubbo-spring-boot-project/blob/master/README_CN.md
7.2 公共項目
獨立的maven項目: 定義了接口和數(shù)據(jù)類
public class Student implements Serializable {
private static final long serialVersionUID = 1901229007746699151L;
private Integer id;
private String name;
private Integer age;
}
public interface StudentService {
Student queryStudent(Integer id);
}
7.3 提供者
- 創(chuàng)建SpringBoot項目
1) pom.xml
<dependencies>
<!--加入公共項目的gav-->
<dependency>
<groupId>com.bjpowernode</groupId>
<artifactId>022-interface-api</artifactId>
<version>1.0.0</version>
</dependency>
<!--dubbo依賴-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<!--zookeeper依賴-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.8</version>
<type>pom</type>
<exclusions>
<!-- 排除log4j依賴 -->
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
2)實現(xiàn)接口
/**
* 使用dubbo中的注解暴露服務(wù)
* @Component 可以不用加
*/
@DubboService(interfaceClass = StudentService.class,version = "1.0",timeout = 5000)
public class StudentServiceImpl implements StudentService {
@Override
public Student queryStudent(Integer id) {
Student student = new Student();
if( 1001 == id){
student.setId(1001);
student.setName("------1001-張三");
student.setAge(20);
} else if(1002 == id){
student.setId(1002);
student.setName("#######1002-李四");
student.setAge(22);
}
return student;
}
}
3)application.properties
#配置服務(wù)名稱 dubbo:application name="名稱"
spring.application.name=studentservice-provider
#配置掃描的包, 掃描的@DubboService
dubbo.scan.base-packages=com.bjpowernode.service
#配置dubbo協(xié)議
#dubbo.protocol.name=dubbo
#dubbo.protocol.port=20881
#注冊中心
dubbo.registry.address=zookeeper://localhost:2181
4)在啟動類的上面
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
7.4消費者
- 創(chuàng)建SpringBoot項目
1) pom.xml
<dependencies>
<!--加入公共項目的gav-->
<dependency>
<groupId>com.bjpowernode</groupId>
<artifactId>022-interface-api</artifactId>
<version>1.0.0</version>
</dependency>
<!--dubbo依賴-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<!--zookeeper依賴-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.8</version>
<type>pom</type>
<exclusions>
<!-- 排除log4j依賴 -->
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
2)創(chuàng)建了Controller 或者 Service都可以
@RestController
public class DubboController {
/**
* 引用遠(yuǎn)程服務(wù)山橄, 把創(chuàng)建好的代理對象垮媒,注入給studentService
*/
//@DubboReference(interfaceClass = StudentService.class,version = "1.0")
/**
* 沒有使用interfaceClass,默認(rèn)的就是 引用類型的 數(shù)據(jù)類型
*/
@DubboReference(version = "1.0")
private StudentService studentService;
@GetMapping("/query")
public String queryStudent(Integer id){
Student student = studentService.queryStudent(id);
return "調(diào)用遠(yuǎn)程接口驾胆,獲取對象:"+student;
}
}
3)application.properties
#指定服務(wù)名稱
spring.application.name=consumer-application
#指定注冊中心
dubbo.registry.address=zookeeper://localhost:2181
7.5 練習(xí)
使用的技術(shù): SpringBoot ,Dubbo, Redis, MyBatis
- Student表:
CREATE TABLE student (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) COLLATE utf8_bin DEFAULT NULL,
phone varchar(11) COLLATE utf8_bin DEFAULT NULL,
age int(11) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
1)注冊學(xué)生
phone必須唯一涣澡, 如果已經(jīng)存在了手機號, 注冊失敗的丧诺。
int addStudent(Student student);
返回值:int
1: 注冊成功
2 : 手機號已經(jīng)存在
name至少兩個字符入桂,
age 必須 大于 0
2) 查詢學(xué)生,根據(jù)id查詢驳阎,此學(xué)生抗愁。
先到redis查詢學(xué)生, 如果redis沒有此學(xué)生呵晚,從數(shù)據(jù)庫查詢蜘腌, 把查詢到的學(xué)生放入到redis。
后面再次查詢這個學(xué)生應(yīng)該從redis就能獲取到饵隙。
Student queryStudent(Integer id);
3)使用Dubbo框架撮珠, addStudent, queryStudent 是有服務(wù)提供者實現(xiàn)的。
消費者可以是一個Controller 金矛, 調(diào)用提供者的兩個方法芯急。 實現(xiàn)注冊和查詢。
4)頁面使用html和ajax驶俊,jquery娶耍。
在html頁面中提供 form 注冊學(xué)生, 提供文本框輸入id饼酿,進行查詢榕酒。
注冊和查詢都使用ajax技術(shù)。
html故俐,jquery.js都放到resources/static目錄中