目录
一.理论基础
二.nacos
2.1 简介
2.2 安装
三.父项目
三.生产者
3.1 配置依赖
3.2 配置文件
3.3 启动类
3.4 控制类
四.消费者
4.1 配置依赖
4.2 配置文件
4.3 启动类
4.4 feign的接口
五.效果
六.负载均衡--权重算法
6.1重启nacos
6.2 设置权重
6.3 设置配置
6.4 效果
SpringCloudAlibaba-登录
1.登录页面
父依赖
2.消费者
2.1 依赖
2.2配置文件
2.3 控制层
2.4 servie层
3.生产者
3.1 依赖
3.2 配置文件
3.3 控制层
3.4 访问层
3.5 实体类
3.6 实现类
3.7 mapper
4.效果
文章来源地址https://www.toymoban.com/news/detail-859220.html
一.理论基础
Spring Cloud Alibaba 为分布式应用开发提供一站式解决方案。它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用 Spring Cloud 微服务框架开发应用程序。
有了Spring Cloud Alibaba,您只需要添加一些注释和少量配置,就可以将Spring Cloud的应用程序连接到阿里巴巴的分布式解决方案上,并利用阿里巴巴的中间件构建分布式应用系统。
主要功能:
服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。
阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
Spring Cloud Alibaba和Spring Cloud和Spring Boot之间的版本对应:
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和各组件间的版本对应:
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 简介
一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。能够替代Eureka做服务注册中心,替代Config做服务配置中心。
2.2 安装
安装地址
解压后可直接使用。
在环境变量中配置JDK,需要先配置JAVA_。
打开nacos下的bin文件,用记事本打开startup.cmd,将set MODE="cluster"改为set 。MODE="standalone"后保存。
再次双击打开startup.cmd。
使用localhost:8848/nacos,访问注册中心,用户名和密码为nacos。
三.父项目
配置依赖管理,alibaba-dependencies需要在dependencies的基础上运行,所以需要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>
三.生产者
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服务中心。
@SpringBootApplication
@EnableDiscoveryClient
public class nacosClient3Application {
public static void main(String[] args) {
SpringApplication.run(nacosClient3Application.class,args);
}
}
3.4 控制类
进行feign和负载均衡使用。
@RestController
public class MyController {
@RequestMapping("/test")
public String gotoTest(){
return "nacosClient3";
}
}
四.消费者
4.1 配置依赖
需要加入web依赖、nacos依赖、feign依赖和负载均衡依赖
<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服务中心。
@EnableFeignClients注解,开启feign
@EnableFeignClients//启动feign
@SpringBootApplication
@EnableDiscoveryClient开启nacos服务中心
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();
}
五.效果
六.负载均衡--权重算法
负载均衡中默认方法为轮询算法,但在实际应用中,是需要给每个生产者有不同的任务,根据服务区的内存等原因,分配不同的任务量。
权重:后端服务器处理请求的优先级,设置权重较高的服务器会更频繁地被选中处理请求。
6.1重启nacos
直接更改权重会出现错误。
首先停止nacos,将nacos文件下的data包删除。删除后重启nacos。
6.2 设置权重
在生产者中点击详情,编辑生产者权重。
注意:生产者的权重之和为1,每个生产者的权重设置为0.n。
6.3 设置配置
在消费者中开启nacos的负载均衡策略。
cloud:
loadbalancer:
nacos:
enabled: true
6.4 效果
将会给生产者1的分配次数变多。
SpringCloudAlibaba-登录
页面输入用户名和密码,提交到后端消费者,消费者传到生产者后端在进行判断,返回登录成功或登录失败到消费者,消费者再放到页面上进行显示。
restTemplate.getForObject 向远程取数据 两个参数url和数据类型
restTemplate.postForObject 向远程服务传参数 三个参数url、参数、返回值类型
@RequestBody 跨域(端口不同)得到对象数据,必须是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.消费者
需要将页面的值传递给生产者,并接受生产者的返回值。
2.1 依赖
<dependencies>
使用公共实体类
<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>
负载均衡依赖
<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:
#设置页面路径的前缀
prefix: classpath:/templates/
#设置页面路径的后缀
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层
通过生产者的名字和路径找到对应生产者的方法并传值。
@Service
@FeignClient(name = "provider")
public interface ServiceCostomer {
@RequestMapping("/login")
public String loginProvider(@RequestBody User user);
}
3.生产者
因为使用负载均衡,所以不知道第一次回去那个生产者,所以每个生产者都需要写loginProvider。这里以其中一个为例。
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 配置文件
三个生产者每个生产者各使用一个数据库,所以这里以生产者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 实体类
@Data
public class userEntity {
public int id;
public String username;
public String password;
}
3.6 实现类
@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.效果
给每个生产者设置不同的权重。
进入login页面
登录失败
登录成功
文章来源:https://www.toymoban.com/news/detail-859220.html
到了这里,关于SpringCloud Alibaba--nacos简介和注册中心和登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!