目錄
一.理論基礎(chǔ)
二.nacos
2.1 簡介
2.2 安裝
三.父項(xiàng)目
三.生產(chǎn)者
3.1 配置依賴
3.2 配置文件
3.3 啟動類
3.4 控制類
四.消費(fèi)者
4.1 配置依賴
4.2 配置文件
4.3 啟動類
4.4 feign的接口
五.效果
六.負(fù)載均衡--權(quán)重算法
6.1重啟nacos
6.2 設(shè)置權(quán)重
6.3 設(shè)置配置
6.4 效果
SpringCloudAlibaba-登錄
1.登錄頁面
父依賴
2.消費(fèi)者
2.1 依賴
2.2配置文件
2.3 控制層
2.4 servie層
3.生產(chǎn)者
3.1 依賴
3.2 配置文件
3.3 控制層
3.4 訪問層
3.5 實(shí)體類
3.6 實(shí)現(xiàn)類
3.7 mapper
4.效果
?文章來源地址http://www.zghlxwxcb.cn/news/detail-859220.html
?
一.理論基礎(chǔ)
Spring Cloud Alibaba 為分布式應(yīng)用開發(fā)提供一站式解決方案。它包含開發(fā)分布式應(yīng)用程序所需的所有組件,使您可以輕松地使用 Spring Cloud 微服務(wù)框架開發(fā)應(yīng)用程序。
有了Spring Cloud Alibaba,您只需要添加一些注釋和少量配置,就可以將Spring Cloud的應(yīng)用程序連接到阿里巴巴的分布式解決方案上,并利用阿里巴巴的中間件構(gòu)建分布式應(yīng)用系統(tǒng)。
主要功能:
服務(wù)限流降級:默認(rèn)支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降級功能的接入,可以在運(yùn)行時(shí)通過控制臺實(shí)時(shí)修改限流降級規(guī)則,還支持查看限流降級 Metrics 監(jiān)控。
服務(wù)注冊與發(fā)現(xiàn):適配 Spring Cloud 服務(wù)注冊與發(fā)現(xiàn)標(biāo)準(zhǔn),默認(rèn)集成了 Ribbon 的支持。
分布式配置管理:支持分布式系統(tǒng)中的外部化配置,配置更改時(shí)自動刷新。
消息驅(qū)動能力:基于 Spring Cloud Stream 為微服務(wù)應(yīng)用構(gòu)建消息驅(qū)動能力。
分布式事務(wù):使用 @GlobalTransactional 注解, 高效并且對業(yè)務(wù)零侵入地解決分布式事務(wù)問題。
阿里云對象存儲:阿里云提供的海量、安全、低成本、高可靠的云存儲服務(wù)。支持在任何應(yīng)用、任何時(shí)間、任何地點(diǎn)存儲和訪問任意類型的數(shù)據(jù)。
分布式任務(wù)調(diào)度:提供秒級、精準(zhǔn)、高可靠、高可用的定時(shí)(基于 Cron 表達(dá)式)任務(wù)調(diào)度服務(wù)。同時(shí)提供分布式的任務(wù)執(zhí)行模型,如網(wǎng)格任務(wù)。網(wǎng)格任務(wù)支持海量子任務(wù)均勻分配到所有 Worker(schedulerx-client)上執(zhí)行。
阿里云短信服務(wù):覆蓋全球的短信服務(wù),友好、高效、智能的互聯(lián)化通訊能力,幫助企業(yè)迅速搭建客戶觸達(dá)通道。
Spring Cloud Alibaba和Spring Cloud和Spring Boot之間的版本對應(yīng):
Spring Cloud Alibaba Version |
Spring Cloud Version |
Spring Boot Version |
2021.0.4.0* |
Spring Cloud 2021.0.4 |
2.6.11 |
2021.0.1.0 |
Spring Cloud 2021.0.1 |
2.6.3 |
2021.1 |
Spring Cloud 2020.0.1 |
2.4.2 |
?
Spring Cloud Alibaba Version |
Spring Cloud Version |
Spring Boot Version |
2022.0.0.0-RC2 |
2022.0.0 |
3.0.2 |
2022.0.0.0-RC1 |
2022.0.0 |
3.0.0 |
Spring Cloud Alibaba和各組件間的版本對應(yīng):
Spring Cloud Alibaba Version |
Sentinel Version |
Nacos Version |
RocketMQ Version |
Dubbo Version |
Seata Version |
2.2.9.RELEASE |
1.8.5 |
2.1.0 |
4.9.4 |
~ |
1.5.2 |
2021.0.4.0 |
1.8.5 |
2.0.4 |
4.9.4 |
~ |
1.5.2 |
2.2.8.RELEASE |
1.8.4 |
2.1.0 |
4.9.3 |
~ |
1.5.1 |
2021.0.1.0 |
1.8.3 |
1.4.2 |
4.9.2 |
~ |
1.4.2 |
2.2.7.RELEASE |
1.8.1 |
2.0.3 |
4.6.1 |
2.7.13 |
1.3.0 |
2.2.6.RELEASE |
1.8.1 |
1.4.2 |
4.4.0 |
2.7.8 |
1.3.0 |
2021.1 or 2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE |
1.8.0 |
1.4.1 |
4.4.0 |
2.7.8 |
1.3.0 |
2.2.3.RELEASE or 2.1.3.RELEASE or 2.0.3.RELEASE |
1.8.0 |
1.3.3 |
4.4.0 |
2.7.8 |
1.3.0 |
2.2.1.RELEASE or 2.1.2.RELEASE or 2.0.2.RELEASE |
1.7.1 |
1.2.1 |
4.4.0 |
2.7.6 |
1.2.0 |
2.2.0.RELEASE |
1.7.1 |
1.1.4 |
4.4.0 |
2.7.4.1 |
1.0.0 |
2.1.1.RELEASE or 2.0.1.RELEASE or 1.5.1.RELEASE |
1.7.0 |
1.1.4 |
4.4.0 |
2.7.3 |
0.9.0 |
2.1.0.RELEASE or 2.0.0.RELEASE or 1.5.0.RELEASE |
1.6.3 |
1.1.1 |
4.4.0 |
2.7.3 |
0.7.1 |
二.nacos
2.1 簡介
一個(gè)更易于構(gòu)建云原生應(yīng)用的動態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺。能夠替代Eureka做服務(wù)注冊中心,替代Config做服務(wù)配置中心。
2.2 安裝
安裝地址
解壓后可直接使用。
在環(huán)境變量中配置JDK,需要先配置JAVA_。
打開nacos下的bin文件,用記事本打開startup.cmd,將set MODE="cluster"改為set 。MODE="standalone"后保存。
再次雙擊打開startup.cmd。
使用localhost:8848/nacos,訪問注冊中心,用戶名和密碼為nacos。
三.父項(xiàng)目
?配置依賴管理,alibaba-dependencies需要在dependencies的基礎(chǔ)上運(yùn)行,所以需要spring-cloud-dependencies的依賴。
<dependencyManagement>
??????? <dependencies>
??????????? <dependency>
??????????????? <groupId>org.springframework.cloud</groupId>
??????????????? <artifactId>spring-cloud-dependencies</artifactId>
??????????????? <version>2022.0.0</version>
??????????????? <type>pom</type>
??????????????? <scope>import</scope>
??????????? </dependency>
??????????? <dependency>
??????????????? <groupId>org.springframework.boot</groupId>
??????????????? <artifactId>spring-boot-dependencies</artifactId>
??????????????? <version>3.0.2</version>
??????????????? <type>pom</type>
??????????????? <scope>import</scope>
??????????? </dependency>
??????????? <dependency>
??????????????? <groupId>com.alibaba.cloud</groupId>
??????????????? <artifactId>spring-cloud-alibaba-dependencies</artifactId>
??????????????? <version>2022.0.0.0-RC2</version>
??????????????? <type>pom</type>
??????????????? <scope>import</scope>
??????????? </dependency>
??????? </dependencies>
??? </dependencyManagement>
三.生產(chǎn)者
3.1 配置依賴
需要加入web依賴和nacos依賴
<dependencies>
??????? <dependency>
??????????? <groupId>org.springframework.boot</groupId>
??????????? <artifactId>spring-boot-starter-web</artifactId>
??????? </dependency>
??????? <dependency>
??????????? <groupId>com.alibaba.cloud</groupId>
??????????? <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
??????? </dependency>
??? </dependencies>
3.2 配置文件
application
定義好nacos路徑和端口
server:
? port: 8003
spring:
? application:
??? name: provider
? cloud:
??? nacos:
????? discovery:
??????? server-addr: http://localhost:8848
3.3 啟動類
編寫啟動類并加注解。
@EnableDiscoveryClient注解,開啟nacos服務(wù)中心。
@SpringBootApplication
@EnableDiscoveryClient
public class nacosClient3Application {
??? public static void main(String[] args) {
??????? SpringApplication.run(nacosClient3Application.class,args);
??? }
}
3.4 控制類
進(jìn)行feign和負(fù)載均衡使用。
@RestController
public class MyController {
??? @RequestMapping("/test")
??? public String gotoTest(){
??????? return "nacosClient3";
??? }
}
四.消費(fèi)者
4.1 配置依賴
需要加入web依賴、nacos依賴、feign依賴和負(fù)載均衡依賴
?
<dependencies>
??????? <dependency>
??????????? <groupId>org.springframework.boot</groupId>
??????????? <artifactId>spring-boot-starter-web</artifactId>
??????? </dependency>
??????? <dependency>
??????????? <groupId>com.alibaba.cloud</groupId>
??????????? <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
??????? </dependency>
??????? <dependency>
??????????? <groupId>org.springframework.cloud</groupId>
??????????? <artifactId>spring-cloud-starter-openfeign</artifactId>
??????? </dependency>
??????? <dependency>
??????????? <groupId>org.springframework.cloud</groupId>
??????????? <artifactId>spring-cloud-starter-loadbalancer</artifactId>
??????? </dependency>
??? </dependencies>
4.2 配置文件
定義好nacos路徑、端口和名字
server:
? port: 9000
spring:
? application:
??? name: consumer
? cloud:
??? nacos:
????? discovery:
??????? server-addr: http://localhost:8848
4.3 啟動類
編寫啟動類并加注解。
@EnableDiscoveryClient注解,開啟nacos服務(wù)中心。
@EnableFeignClients注解,開啟feign
@EnableFeignClients//啟動feign
@SpringBootApplication
@EnableDiscoveryClient開啟nacos服務(wù)中心
public class nacosCostomerApplication {
??? public static void main(String[] args) {
??????? SpringApplication.run(nacosCostomerApplication.class,args);
??? }
}
4.4 feign的接口
@Service
@FeignClient(name = "provider")
public interface ServiceCostomer {
??? @RequestMapping("/test")
??? public String gotoTest();
}
五.效果
六.負(fù)載均衡--權(quán)重算法
負(fù)載均衡中默認(rèn)方法為輪詢算法,但在實(shí)際應(yīng)用中,是需要給每個(gè)生產(chǎn)者有不同的任務(wù),根據(jù)服務(wù)區(qū)的內(nèi)存等原因,分配不同的任務(wù)量。
權(quán)重:后端服務(wù)器處理請求的優(yōu)先級,設(shè)置權(quán)重較高的服務(wù)器會更頻繁地被選中處理請求。
6.1重啟nacos
直接更改權(quán)重會出現(xiàn)錯誤。
?
首先停止nacos,將nacos文件下的data包刪除。刪除后重啟nacos。
?
6.2 設(shè)置權(quán)重
在生產(chǎn)者中點(diǎn)擊詳情,編輯生產(chǎn)者權(quán)重。
注意:生產(chǎn)者的權(quán)重之和為1,每個(gè)生產(chǎn)者的權(quán)重設(shè)置為0.n。
?
6.3 設(shè)置配置
在消費(fèi)者中開啟nacos的負(fù)載均衡策略。
?
cloud:
??? loadbalancer:
????? nacos:
??????? enabled: true
6.4 效果
將會給生產(chǎn)者1的分配次數(shù)變多。
SpringCloudAlibaba-登錄
頁面輸入用戶名和密碼,提交到后端消費(fèi)者,消費(fèi)者傳到生產(chǎn)者后端在進(jìn)行判斷,返回登錄成功或登錄失敗到消費(fèi)者,消費(fèi)者再放到頁面上進(jìn)行顯示。
restTemplate.getForObject 向遠(yuǎn)程取數(shù)據(jù) 兩個(gè)參數(shù)url和數(shù)據(jù)類型
restTemplate.postForObject 向遠(yuǎn)程服務(wù)傳參數(shù) 三個(gè)參數(shù)url、參數(shù)、返回值類型
@RequestBody 跨域(端口不同)得到對象數(shù)據(jù),必須是post提交
1.登錄頁面
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
??? <meta charset="UTF-8">
??? <title>登錄頁面</title>
</head>
<body>
<form th:action="@{/loginEntity}" method="post">
??? <span th:text="${result}"></span>
??? <input type="username" th:placeholder="請輸入用戶名" name="username"/>
??? <input type="password" placeholder="請輸入密碼" name="password" />
??? <input type="submit" th:value="登錄"/>
</form>
</body>
</html>
父依賴
管理spring-cloud、spring-boot、spring-cloud-alibaba、mysql和mybatis的版本號,添加共用的lombok依賴
<dependencyManagement>
??????? <dependencies>
??????????? <dependency>
??????????????? <groupId>org.springframework.cloud</groupId>
??????????????? <artifactId>spring-cloud-dependencies</artifactId>
??????????????? <version>2022.0.0</version>
??????????????? <type>pom</type>
??????????????? <scope>import</scope>
??????????? </dependency>
??????????? <dependency>
??????????????? <groupId>org.springframework.boot</groupId>
??????????????? <artifactId>spring-boot-dependencies</artifactId>
??????????????? <version>3.0.2</version>
??????????????? <type>pom</type>
??????????????? <scope>import</scope>
??????????? </dependency>
??????????? <dependency>
??????????????? <groupId>com.alibaba.cloud</groupId>
??????????????? <artifactId>spring-cloud-alibaba-dependencies</artifactId>
??????????????? <version>2022.0.0.0-RC2</version>
??????????????? <type>pom</type>
??????????????? <scope>import</scope>
??????????? </dependency>
??????? ????<dependency>
??????????????? <groupId>com.mysql</groupId>
??????????????? <artifactId>mysql-connector-j</artifactId>
??????????????? <version>8.0.33</version>
??????????? </dependency>
??????????? <dependency>
??????????????? <groupId>org.mybatis.spring.boot</groupId>
??????????????? <artifactId>mybatis-spring-boot-starter</artifactId>
??????????????? <version>3.0.3</version>
??????????? </dependency>
??????? </dependencies>
??? </dependencyManagement>
??? <dependencies>
??????? <dependency>
??????????? <groupId>org.projectlombok</groupId>
??????????? <artifactId>lombok</artifactId>
??????? </dependency>
??????? <dependency>
??????? <groupId>org.springframework.boot</groupId>
??????????? <artifactId>spring-boot-starter-web</artifactId>
??????? </dependency>
??? </dependencies>
?
2.消費(fèi)者
需要將頁面的值傳遞給生產(chǎn)者,并接受生產(chǎn)者的返回值。
2.1 依賴
<dependencies>
??? 使用公共實(shí)體類
??????? <dependency>
??????????? <groupId>org.example.entity</groupId>
??????????? <artifactId>common</artifactId>
??????????? <version>1.0-SNAPSHOT</version>
??????????? <scope>compile</scope>
??????? </dependency>
??? nacos依賴
??????? <dependency>
??????????? <groupId>com.alibaba.cloud</groupId>
??????????? <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
??????? </dependency>
??? feign依賴
??????? <dependency>
??????????? <groupId>org.springframework.cloud</groupId>
??????????? <artifactId>spring-cloud-starter-openfeign</artifactId>
??????? </dependency>
??? 負(fù)載均衡依賴
??????? <dependency>
??????????? <groupId>org.springframework.cloud</groupId>
??????????? <artifactId>spring-cloud-starter-loadbalancer</artifactId>
??????? </dependency>
??? thymeleaf頁面依賴
??????? <dependency>
??????????? <groupId>org.springframework.boot</groupId>
??????????? <artifactId>spring-boot-starter-thymeleaf</artifactId>
??????? </dependency>
??? </dependencies>
2.2配置文件
server:
? port: 9000
spring:
? application:
??? name: customer
? thymeleaf:
??? #設(shè)置頁面路徑的前綴
??? prefix: classpath:/templates/
??? #設(shè)置頁面路徑的后綴
??? suffix: .html
? cloud:
??? nacos:
????? discovery:
??????? server-addr: http://localhost:8848
??? loadbalancer:
????? nacos:
??????? enabled: true
2.3 控制層
在該層寫好邏輯,使用feign。
@Controller
public class MyController {
??? @Autowired
??? ServiceCostomer serviceCostomer;
??? ModelAndView mav = new ModelAndView();
???
??? @RequestMapping("/login")
??? private String login(){
??????? return "login";
??? }
???
??? @RequestMapping("/loginEntity")
??? public ModelAndView loginEntity(User user) {
??????? String result = serviceCostomer.loginProvider(user);
??????? mav.addObject("result", result);
??????? mav.setViewName("login");
??????? return mav;
??? }
}
2.4 servie層
通過生產(chǎn)者的名字和路徑找到對應(yīng)生產(chǎn)者的方法并傳值。
@Service
@FeignClient(name = "provider")
public interface ServiceCostomer {
??? @RequestMapping("/login")
??? public String loginProvider(@RequestBody User user);
}
3.生產(chǎn)者
因?yàn)槭褂秘?fù)載均衡,所以不知道第一次回去那個(gè)生產(chǎn)者,所以每個(gè)生產(chǎn)者都需要寫loginProvider。這里以其中一個(gè)為例。
3.1 依賴
加入sql依賴、mybatis依賴、nacos依賴
<dependencies>
??????? <dependency>
??????????? <groupId>com.alibaba.cloud</groupId>
??????????? <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
??????? </dependency>
??????? <dependency>
??????????? <groupId>com.mysql</groupId>
??????????? <artifactId>mysql-connector-j</artifactId>
??????? </dependency>
??????? <dependency>
??????????? <groupId>org.mybatis.spring.boot</groupId>
??????????? <artifactId>mybatis-spring-boot-starter</artifactId>
??????? </dependency>
??? </dependencies>
3.2 配置文件
三個(gè)生產(chǎn)者每個(gè)生產(chǎn)者各使用一個(gè)數(shù)據(jù)庫,所以這里以生產(chǎn)者3為例
server:
? port: 8001
spring:
? cloud:
??? nacos:
????? discovery:
??????? server-addr: http://localhost:8848
? datasource:
??? driver-class-name: com.mysql.cj.jdbc.Driver
??? url: jdbc:mysql://localhost:3306/my_sql_1
??? username: root
??? password: root
? application:
??? name: provider
mybatis:
? mapper-locations: classpath:/mapper/*.xml
? configuration:
??? log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
? type-aliases-package: org.example.client.dao
?
3.3 控制層
@RestController
public class MyController {
??? @Autowired
??? MyUserService myUserService;
??? @RequestMapping("/login")
??? public String loginProvider(@RequestBody UserEntity user) {
??????? UserEntity user1 = myUserService.getUser(user);
??????? if (user1 != null) {
??????????? return "登錄成功,歡迎";
??????? } else {
??????????? return "登錄失敗,暫無該用戶,請注冊";
??????? }
??? }
}
3.4 訪問層
@Mapper
public interface MyUserDao {
? public userEntity getUser(userEntity user);
}
3.5 實(shí)體類
@Data
public class userEntity {
??? public int id;
??? public String username;
??? public String password;
}
3.6 實(shí)現(xiàn)類
@Service
public class MyUserServiceImpl implements MyUserService {
??? @Autowired
??? MyUserDao myUserDao;
??? @Override
??? public userEntity getUser(userEntity user) {
??????? return myUserDao.getUser(user);
??? }
}
3.7 mapper
<mapper namespace="org.example.client.dao.MyUserDao">
??? <select id="getUser">
??????? select *
??????? from my_user
??????? where username = #{username} and password=#{password}
??? </select>
</mapper>
4.效果
給每個(gè)生產(chǎn)者設(shè)置不同的權(quán)重。
進(jìn)入login頁面
登錄失敗
登錄成功
文章來源:http://www.zghlxwxcb.cn/news/detail-859220.html
?
到了這里,關(guān)于SpringCloud Alibaba--nacos簡介和注冊中心和登錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!