第七章 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專案: 定義了介面和資料類
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 提供者
- 創建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)實作介面
/** * 使用dubbo中的注解暴露服務 * @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
#配置服務名稱 dubbo:application name="名稱"
spring.application.name=studentservice-provider
#配置掃描的包, 掃描的@DubboService
dubbo.scan.base-packages=com.bjpowernode.service
#配置dubbo協議
#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消費者
- 創建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)創建了Controller 或者 Service都可以
@RestController public class DubboController { /** * 參考遠程服務, 把創建好的代理物件,注入給studentService */ //@DubboReference(interfaceClass = StudentService.class,version = "1.0") /** * 沒有使用interfaceClass,默認的就是 參考型別的 資料型別 */ @DubboReference(version = "1.0") private StudentService studentService; @GetMapping("/query") public String queryStudent(Integer id){ Student student = studentService.queryStudent(id); return "呼叫遠程介面,獲取物件:"+student; } }
3)application.properties
#指定服務名稱
spring.application.name=consumer-application
#指定注冊中心
dubbo.registry.address=zookeeper://localhost:2181
7.5 練習
使用的技術: 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)注冊學生
? phone必須唯一, 如果已經存在了手機號, 注冊失敗的,
? int addStudent(Student student);
? 回傳值:int
? 1: 注冊成功
? 2 : 手機號已經存在
? name至少兩個字符,
? age 必須 大于 0
2) 查詢學生,根據id查詢,此學生,
? 先到redis查詢學生, 如果redis沒有此學生,從資料庫查詢, 把查詢到的學生放入到redis,
? 后面再次查詢這個學生應該從redis就能獲取到,
? Student queryStudent(Integer id);
3)使用Dubbo框架, addStudent, queryStudent 是有服務提供者實作的,
? 消費者可以是一個Controller , 呼叫提供者的兩個方法, 實作注冊和查詢,
4)頁面使用html和ajax,jquery,
? 在html頁面中提供 form 注冊學生, 提供文本框輸入id,進行查詢,
? 注冊和查詢都使用ajax技術,
? html,jquery.js都放到resources/static目錄中
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/424878.html
標籤:Java
