赞
踩
版本:springcloud分为springcloud netflix(停更)和springcloud alibaba两个版本
关系:springBoot可以单独使用,springCloud需要和springBoot搭配使用
解压后打开bin下的starterup.cmd修改配置文件为单机模式 --set MODE="standalone"
双击starterup.cmd启动即可,启动后浏览器访问localhost:8848进入页面,账号密码默认为nacos
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent> <!--springBoot版本为2.3.12.RELEASE-->
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.3.12.RELEASE</version>
- <relativePath/>
- </parent>
- <groupId>com.bzeh</groupId>
- <artifactId>demo</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>pom</packaging> <!--父工程打包方式都为pom-->
- <name>demo</name>
- <description>demo</description>
- <modules>
- <module>vo</module>
- <module>productVo</module>
- <module>order</module>
- </modules>
- <properties> <!--定义版本号-->
- <java.version>1.8</java.version>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
- <spring-cloud.version>Hoxton.SR12</spring-cloud.version> <!--springCloud版本-->
- <spring-cloud-alibaba.version>2.2.8.RELEASE</spring-cloud-alibaba.version> <!--阿里巴巴版本-->
- </properties>
- <dependencyManagement> <!--只负责jar包管理不负责jar下载-->
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>${spring-cloud.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-alibaba-dependencies</artifactId>
- <version>${spring-cloud-alibaba.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.8.1</version>
- <configuration>
- <source>1.8</source>
- <target>1.8</target>
- <encoding>UTF-8</encoding>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <version>${spring-boot.version}</version>
- <configuration>
- <mainClass>com.bzeh.demo.DemoApplication</mainClass>
- <skip>true</skip>
- </configuration>
- <executions>
- <execution>
- <id>repackage</id>
- <goals>
- <goal>repackage</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </project>

在父工程下创建一个普通的maven工程并引入依赖
<dependencies> <dependency> <!--lombok依赖--> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <!-- 引入MyBatis Plus的Spring Boot启动器,用于简化MyBatis的使用 --> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.7</version> </dependency> <dependency> <!-- 引入Spring Boot的Web启动器,用于简化Spring Web应用的配置 --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>创建实体类
@Data //lombok快速注解 @NoArgsConstructor @AllArgsConstructor @TableName("tbl_product") //定义数据库表名 public class Product { @TableId(type= IdType.AUTO) //定义主键且递增 private Integer pid; private String pname; private BigDecimal price; private Integer stock; }配置类
@Configuration public class RestConfig { //http协议调用,适用于spring工程 @Bean //把方法的返回对象交于spring容器管理 @LoadBalanced //启用RestTemplate的远程调用使用ribbon作为负载均衡组件 public RestTemplate restTemplate(){ return new RestTemplate(); } }
引入依赖
<dependencies> <dependency> <!--引入父工程依赖--> <groupId>com.bzeh</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <!-- 引入MyBatis Plus的Spring Boot启动器,用于简化MyBatis的使用 --> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.7</version> </dependency> <dependency> <!-- 引入Nacos服务发现的Spring Boot启动器,用于服务注册和发现 --> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <!-- 引入MySQL数据库连接器,用于与MySQL数据库交互 --> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <!-- 引入Spring Boot的Web启动器,用于简化Spring Web应用的配置 --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <!--引入openfeign--> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies>application.properties配置文件
#服务器配置# #指定服务器端口 server.port=8080 #设置服务器名称 spring.application.name=project #数据库配置# #数据库用户名 spring.datasource.username=root #数据库密码 spring.datasource.password=root #设置数据库连接url spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC #设置数据库驱动 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #mybatisPlus配置# #mybatis日志 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl #指定mybatis的mapper文件位置 mybatis-plus.mapper-locations=classpath*:mapper/*.xml #nacos配置# #设置nacos服务器地址,将该微服务地址交给nacos管理 spring.cloud.nacos.discovery.server-addr=localhost:8848主启动类
@SpringBootApplication //定义springBoot应用 @MapperScan("com.job.mapper") //扫描mapper映射文件接口 @EnableFignClients //开启openfeign的注解驱动 public class ProductApp { public static void main(String[] args){ SpringApplication.run(ProductApp.class,args); //启动springBoot应用 } }mapper映射文件接口
public interface ProductMapper extends BaseMapper<Product> { }service和serviceImp业务层
public interface ProductService { Product selectById(Integer pid); //一个简单的查找功能 } @Service //service接口的实现类 public class productServiceImp implements ProductService { @Autowired //自动注入mapper private ProductMapper productMapper; @Override public Product selectById(Integer pid) { //实现接口的查询方法 return productMapper.selectById(pid); } }如果使用openfeign进行远程调用的话需要创建一个openfieng接口
@FeignClient(value = "nacos服务器中的服务名") public interface ProductFeign { @GetMapping("/product/getById/{pid}") //这里的请求方式以及参数类型必须和目标方法本身一致。 public Product getById(@PathVariable Integer pid); }ribon提供的负载均衡策略(ribbon内置多种负载均衡策略,内部负载均衡的顶级接口为com.netflix.loadbalancer.IRule)
ribbo使用
选择最小并发请求server:BestAvailableRule
随机选择server:RandomRule
轮询方式轮询选择:RoundRobinRule
过滤失效的server和高并发的server:AvailabilityFilteringRule
根据时间分配weight:时间越长weight越小,选中的概率越低
对选定的负载均衡策略机上重试机制:RetryRule
符合判断server所在区域性能和server可用性:ZoneAvoidanceRule
第一种:局部使用(修改Application.properties配置--nacos服务器添加的服务器名.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule)
第二种:全局使用(RestConfig配置类中添加配置)
@Bean public IRule myRule(){ ruturn new RandomRule(); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。