之七 2流高手速成記:基于Dubbo&Nacos的微服務簡要實現

本節內容會用到之前給大家講過的這兩篇:
2流高手速成記(之六):從SpringBoot到SpringCloudAlibaba
2流高手速成記(之三):SpringBoot整合mybatis/mybatis-plus實現數據持久化
鏈接掛出來,方便咱們中途對比著看
老規矩,先放出本節的項目結構:

之七 2流高手速成記:基于Dubbo&Nacos的微服務簡要實現

文章插圖
我們參考上一節中講到的創建SpringCloudAlibaba工程模板的步驟,在工程下在創建三個子模塊,創建過程中勾選相同的依賴項
之七 2流高手速成記:基于Dubbo&Nacos的微服務簡要實現

文章插圖
這三個子模塊也是三個獨立的可執行的工程,他們的用途分別為:
dubbo-nacos-provider:服務(Service)提供方
dubbo-nacos-consumer:消費方 , 服務的調用者
dubbo-nacos-api:接口及模型類定義,同時作為前邊二者的依賴方
接下來,我們共同見證神奇的一幕:
大家都知道,我們在第三節中實現的工程是一個結構相對完備(包含Service、Controller,View由Postman替代)且可以直接執行的獨立進程
本節我們依靠上一節講到的微服務技術,以幾乎不改變原有代碼為前提,將其一分為三:
provider和consumer分別獨立執行
consumer借助微服務技術完成對provider的調用
api模塊是二者的依賴項,并非可執行的進程
1. Service接口、Model聲明遷移到dubbo-nacos-api
之七 2流高手速成記:基于Dubbo&Nacos的微服務簡要實現

文章插圖
package com.example.dubbonacosapi.model;import java.io.Serializable;public class Person implements Serializable {private Integer id = 0;private String name = "";public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}package com.example.dubbonacosapi.service;import com.example.dubbonacosapi.model.Person;import java.util.List;public interface PersonService {Integer insert(Person person);Integer update(Person person);Integer delete(int id);List<Person> select();}因為api的作用僅是構成provider、consumer的二者依賴,所以其僅是持有相關聲明即可
Person類及PersonService在原有代碼基礎上保持不變!
2. Service接口實現類、Mapper聲明(mybatis-plus)遷移到dubbo-nacos-provider
之七 2流高手速成記:基于Dubbo&amp;Nacos的微服務簡要實現

文章插圖
既然provider保有mybatis-plus訪問mysql的能力,所以相關的依賴必定不可或缺
<!-- 引入mybatis、mybatis-plus、mysql等依賴 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.example</groupId><artifactId>dubbo-nacos-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency>引入的方式和第三節講到的方式一樣
此外還包含了對于剛才我們創建的dubbo-nacos-api的依賴,引入非常的方便
package com.example.dubbonacosprovider.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.example.dubbonacosapi.model.Person;import org.apache.ibatis.annotations.Mapper;import org.springframework.stereotype.Repository;@Mapper@Repositorypublic interface PersonMapper extends BaseMapper<Person> {}package com.example.dubbonacosprovider.service.impl;import com.example.dubbonacosapi.model.Person;import com.example.dubbonacosapi.service.PersonService;import com.example.dubbonacosprovider.mapper.PersonMapper;import org.apache.dubbo.config.annotation.DubboService;import org.springframework.beans.factory.annotation.Autowired;import java.util.List;@DubboServicepublic class PersonServiceImpl implements PersonService {@AutowiredPersonMapper mapper;public Integer insert(Person person) {return mapper.insert(person);}public Integer update(Person person) {return mapper.updateById(person);}public Integer delete(int id) {return mapper.deleteById(id);}public List<Person> select() {return mapper.selectList(null);}}Mapper的聲明沒有任何變化 , 而PersonServiceImpl依然保有對接口PersonService的實現,區別在于后者來自api模塊
唯一的區別在于PesonServiceImpl類的注解,由原有的@Service變更為@DubboService —— 這是唯一的區別!
3. Controller遷移到dubbo-nacos-consumer

推薦閱讀