1,課程回顧
2,本章重點
父子工程的使用,子工程互相調用
springboot+mybatis+dubbo+zookeeper+mysql
部署一個dubbo_admin治理項目(可以對提供者和消費者進行管理)
dubbo負載均衡功能
3,具體内容
3.1 springboot,mybatis整合dubbo
3.1.1建立父項目(springboot+mybatis方式建立),pom.xml引入jar:
<!--引入springboot 和dependencies并列-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.7</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--springboot web包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--簡化執行個體類包-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- Spring Boot Dubbo 依賴 -->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- zookeeper依賴 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
3.1.2 建立子項目common
建立公共的實體類和服務層接口
3.1.3建立子項目consumer
<dependency>
<groupId>com.aaa</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
建立啟動類并加入dubbo支援:
package com.aaa.pc;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @ fileName:PowerConsumerApplication
* @ description:
* @ author:zhz
* @ createTime:2022/1/5 9:51
* @ version:1.0.0
*/
@SpringBootApplication
@EnableDubboConfiguration //開啟dubbo配置
public class PowerConsumerApplication {
public static void main(String[] args) {
//run方法
SpringApplication.run(PowerConsumerApplication.class,args);
}
}
編寫controller,引入Service:
@Reference(check=false)
Dubbo 預設會在啟動時檢查依賴的服務是否可用,不可用時會抛出異常,阻止 Spring 初始化完成,以便上線時,能及早發現問題,預設 check=“true”.
可以通過 check=“false” 關閉檢查,比如,測試時,有些服務不關心,或者出現了循環依賴,必須有一方先啟動。
package com.aaa.pc.controller;
import com.aaa.common.controller.BaseController;
import com.aaa.common.entity.Menu;
import com.aaa.common.service.MenuService;
import com.aaa.common.util.Result;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;
/**
* 菜單權限表(Menu)表控制層
*
* @author makejava
* @since 2022-01-05 09:45:33
*/
@RestController
@RequestMapping("menu")
public class MenuController extends BaseController {
/**
* 服務對象
*/
@Reference(check = false) //沒有配置檔案,直接使用引用注解
private MenuService menuService;
/**
* 通過主鍵查詢單條資料
*
* @param id 主鍵
* @return 單條資料
*/
@GetMapping("selectOne")
public Result selectOne(Integer id) {
return this.success(this.menuService.queryById(id));
}
/**
* 添加
*
* @param menu
* @return
*/
@PutMapping("add")
public Result add(@RequestBody Menu menu) {
return this.success(this.menuService.insert(menu));
}
/**
* 更新
*
* @param menu
* @return
*/
@PutMapping("update")
public Result update(@RequestBody Menu menu) {
return this.success(this.menuService.update(menu));
}
/**
* 根據編号删除
*
* @param id
* @return
*/
@DeleteMapping("deleteById")
public Result deleteById(Integer id) {
return this.success(this.menuService.deleteById(id));
}
}
application.properties:
#通路端口号
server.port=18090
#dubbo - customer名稱
spring.dubbo.application.name=power_customer
zookeeper 注冊中心
spring.dubbo.registry.address=zookeeper://192.168.170.41:2181
#dubbo 通信端口
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20881
3.1.4建立子項目provider
pom.xml
<dependency>
<groupId>com.aaa</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.10</version>
</dependency>
<!--druid包-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
啟動類加入:
package com.aaa.pp;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* @ fileName:PowerProviderApplication
* @ description:
* @ author:zhz
* @ createTime:2022/1/5 10:32
* @ version:1.0.0
*/
@SpringBootApplication
@EnableDubboConfiguration
//@EnableTransactionManagement
public class PowerProviderApplication {
public static void main(String[] args) {
SpringApplication.run(PowerProviderApplication.class,args);
}
}
編寫服務實作類加入 @server
@com.alibaba.dubbo.config.annotation.Service
@Service 為dubbo 注解,注解暴露服務
application.properties:
spring.datasource.druid.url=jdbc:mysql://localhost:3306/db_qy141
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=10
spring.datasource.druid.max-wait=10
#端口号
server.port=19090
#dubbo 服務名稱
spring.dubbo.application.name=power_provider
zookeeper 注冊中心
spring.dubbo.registry.address=zookeeper://192.168.170.41:2181
#zookeeper 通信端口
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20881
3.2 服務治理
3.2.1 多台zk叢集
前面配置過,直接啟動
3.2.2 配置治理項目,并且測試
配置tomcat
tar -xzvf /root/software/apache-tomcat-9.0.52.tar.gz -C /usr/
vim /etc/profile
修改為:
export PATH=$PATH:$JAVA_HOME/bin:$ZK_HOME/bin:/usr/apache-tomcat-9.0.52/bin
生效:
source /etc/profile
startup.sh
檢視是否啟動成功
jps 或者 ps -ef |grep tomcat |grep -v grep
jps 可以看到Bootstrap程序
複制準備好dubbo-admin項目到tomcat下
使用xft 把dubbo-admin.war上傳到/usr/apache-tomcat-9.0.52/webapps/
修改配置
vim /usr/apache-tomcat-9.0.52/webapps/dubbo-admin/WEB-INF/dubbo.properties
修改第一行:
127.0.0.1 修改為 192.168.xxx.41 (zk所在的機子IP)
啟動zk叢集:
/root/shelldir/zk-start-stop.sh
測試
http://192.168.170.41:8080/dubbo-admin/ 3.2.3 啟動提供者和消費者,檢視admin項目變化
3.3 負載均衡,叢集容錯, 服務降級(半權) 路由規則,動态配置,通路控制,權重調節
打包生成多個服務:
cd soft/
使用xftp 把provider_jar上傳
cd provider_jar/
java -jar
java -jar provider.jar
運作出錯:slf4j-log4j12-1.7.26.jar
修改META-INF/MANIFEST.MF檔案,删除slf4j-log4j12-1.7.26.jar包,再次打包運作
再次rebuild 時,要再次修改META-INF/MANIFEST.MF 檔案中多餘的jar