当前位置:   article > 正文

微服务架构--springcloud

微服务架构--springcloud

版本:springcloud分为springcloud netflix(停更)和springcloud alibaba两个版本

关系:springBoot可以单独使用,springCloud需要和springBoot搭配使用

搭建微服务架构

注册中心(常用的有zookeeper、eureka、consul、nacos四种,这里使用nacos)

  1.  下载nacos软件,版本需要与父工程中的版本号适用

  2. 解压后打开bin下的starterup.cmd修改配置文件为单机模式 --set MODE="standalone"

  3. 双击starterup.cmd启动即可,启动后浏览器访问localhost:8848进入页面,账号密码默认为nacos

父工程(创建一个springBoot工程修改pom文件并把src文件删除,带有注释的版本号进官网查看)

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <parent> <!--springBoot版本为2.3.12.RELEASE-->
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-starter-parent</artifactId>
  7. <version>2.3.12.RELEASE</version>
  8. <relativePath/>
  9. </parent>
  10. <groupId>com.bzeh</groupId>
  11. <artifactId>demo</artifactId>
  12. <version>0.0.1-SNAPSHOT</version>
  13. <packaging>pom</packaging> <!--父工程打包方式都为pom-->
  14. <name>demo</name>
  15. <description>demo</description>
  16. <modules>
  17. <module>vo</module>
  18. <module>productVo</module>
  19. <module>order</module>
  20. </modules>
  21. <properties> <!--定义版本号-->
  22. <java.version>1.8</java.version>
  23. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  24. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  25. <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
  26. <spring-cloud.version>Hoxton.SR12</spring-cloud.version> <!--springCloud版本-->
  27. <spring-cloud-alibaba.version>2.2.8.RELEASE</spring-cloud-alibaba.version> <!--阿里巴巴版本-->
  28. </properties>
  29. <dependencyManagement> <!--只负责jar包管理不负责jar下载-->
  30. <dependencies>
  31. <dependency>
  32. <groupId>org.springframework.cloud</groupId>
  33. <artifactId>spring-cloud-dependencies</artifactId>
  34. <version>${spring-cloud.version}</version>
  35. <type>pom</type>
  36. <scope>import</scope>
  37. </dependency>
  38. <dependency>
  39. <groupId>com.alibaba.cloud</groupId>
  40. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  41. <version>${spring-cloud-alibaba.version}</version>
  42. <type>pom</type>
  43. <scope>import</scope>
  44. </dependency>
  45. </dependencies>
  46. </dependencyManagement>
  47. <build>
  48. <plugins>
  49. <plugin>
  50. <groupId>org.apache.maven.plugins</groupId>
  51. <artifactId>maven-compiler-plugin</artifactId>
  52. <version>3.8.1</version>
  53. <configuration>
  54. <source>1.8</source>
  55. <target>1.8</target>
  56. <encoding>UTF-8</encoding>
  57. </configuration>
  58. </plugin>
  59. <plugin>
  60. <groupId>org.springframework.boot</groupId>
  61. <artifactId>spring-boot-maven-plugin</artifactId>
  62. <version>${spring-boot.version}</version>
  63. <configuration>
  64. <mainClass>com.bzeh.demo.DemoApplication</mainClass>
  65. <skip>true</skip>
  66. </configuration>
  67. <executions>
  68. <execution>
  69. <id>repackage</id>
  70. <goals>
  71. <goal>repackage</goal>
  72. </goals>
  73. </execution>
  74. </executions>
  75. </plugin>
  76. </plugins>
  77. </build>
  78. </project>

公共模块(实体类,vo,工具类等都可以放入该模块中)

  1. 在父工程下创建一个普通的maven工程并引入依赖
     

    1. <dependencies>
    2. <dependency> <!--lombok依赖-->
    3. <groupId>org.projectlombok</groupId>
    4. <artifactId>lombok</artifactId>
    5. </dependency>
    6. <dependency> <!-- 引入MyBatis Plus的Spring Boot启动器,用于简化MyBatis的使用 -->
    7. <groupId>com.baomidou</groupId>
    8. <artifactId>mybatis-plus-boot-starter</artifactId>
    9. <version>3.5.7</version>
    10. </dependency>
    11. <dependency> <!-- 引入Spring Boot的Web启动器,用于简化Spring Web应用的配置 -->
    12. <groupId>org.springframework.boot</groupId>
    13. <artifactId>spring-boot-starter-web</artifactId>
    14. </dependency>
    15. </dependencies>
  2. 创建实体类
     

    1. @Data //lombok快速注解
    2. @NoArgsConstructor
    3. @AllArgsConstructor
    4. @TableName("tbl_product") //定义数据库表名
    5. public class Product {
    6. @TableId(type= IdType.AUTO) //定义主键且递增
    7. private Integer pid;
    8. private String pname;
    9. private BigDecimal price;
    10. private Integer stock;
    11. }
  3. 配置类
     

    1. @Configuration
    2. public class RestConfig { //http协议调用,适用于spring工程
    3. @Bean //把方法的返回对象交于spring容器管理
    4. @LoadBalanced //启用RestTemplate的远程调用使用ribbon作为负载均衡组件
    5. public RestTemplate restTemplate(){
    6. return new RestTemplate();
    7. }
    8. }

创建微服务模块(微服务可以创建多个)  

  1. 引入依赖

    1.  <dependencies>
    2.        <dependency> <!--引入父工程依赖-->
    3.            <groupId>com.bzeh</groupId>
    4.            <artifactId>demo</artifactId>
    5.            <version>0.0.1-SNAPSHOT</version>
    6.        </dependency>
    7.        <dependency> <!-- 引入MyBatis Plus的Spring Boot启动器,用于简化MyBatis的使用 -->
    8.            <groupId>com.baomidou</groupId>
    9.            <artifactId>mybatis-plus-boot-starter</artifactId>
    10.            <version>3.5.7</version>
    11.        </dependency>
    12.        <dependency> <!-- 引入Nacos服务发现的Spring Boot启动器,用于服务注册和发现 -->
    13.            <groupId>com.alibaba.cloud</groupId>
    14.            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    15.        </dependency>
    16.        <dependency> <!-- 引入MySQL数据库连接器,用于与MySQL数据库交互 -->
    17.            <groupId>mysql</groupId>
    18.            <artifactId>mysql-connector-java</artifactId>
    19.        </dependency>
    20.        <dependency> <!-- 引入Spring Boot的Web启动器,用于简化Spring Web应用的配置 -->
    21.            <groupId>org.springframework.boot</groupId>
    22.            <artifactId>spring-boot-starter-web</artifactId>
    23.        </dependency>
    24.        <dependency> <!--引入openfeign-->
    25.            <groupId>org.springframework.cloud</groupId>
    26.            <artifactId>spring-cloud-starter-openfeign</artifactId>
    27.        </dependency>
    28.    </dependencies>
  2. application.properties配置文件
     

    1. #服务器配置#
    2. #指定服务器端口
    3. server.port=8080
    4. #设置服务器名称
    5. spring.application.name=project
    6. #数据库配置#
    7. #数据库用户名
    8. spring.datasource.username=root
    9. #数据库密码
    10. spring.datasource.password=root
    11. #设置数据库连接url
    12. spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    13. #设置数据库驱动
    14. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    15. #mybatisPlus配置#
    16. #mybatis日志
    17. mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
    18. #指定mybatis的mapper文件位置
    19. mybatis-plus.mapper-locations=classpath*:mapper/*.xml
    20. #nacos配置#
    21. #设置nacos服务器地址,将该微服务地址交给nacos管理
    22. spring.cloud.nacos.discovery.server-addr=localhost:8848
  3. 主启动类
     

    1. @SpringBootApplication //定义springBoot应用
    2. @MapperScan("com.job.mapper") //扫描mapper映射文件接口
    3. @EnableFignClients //开启openfeign的注解驱动
    4. public class ProductApp {
    5.    public static void main(String[] args){
    6.        SpringApplication.run(ProductApp.class,args); //启动springBoot应用
    7.   }
    8. }
  4. mapper映射文件接口
     

    1. public interface ProductMapper extends BaseMapper<Product> {
    2. }
  5. service和serviceImp业务层
     

    1. public interface ProductService {
    2.    Product selectById(Integer pid); //一个简单的查找功能
    3. }
    4. @Service //service接口的实现类
    5. public class productServiceImp implements ProductService {
    6.    @Autowired //自动注入mapper
    7.    private ProductMapper productMapper;
    8.    @Override
    9.    public Product selectById(Integer pid) { //实现接口的查询方法
    10.        return productMapper.selectById(pid);
    11.   }
    12. }
  6. 如果使用openfeign进行远程调用的话需要创建一个openfieng接口
     

    1. @FeignClient(value = "nacos服务器中的服务名")
    2. public interface ProductFeign {
    3.    @GetMapping("/product/getById/{pid}") //这里的请求方式以及参数类型必须和目标方法本身一致。
    4.    public Product getById(@PathVariable Integer pid);
    5. }

 ribon提供的负载均衡策略(ribbon内置多种负载均衡策略,内部负载均衡的顶级接口为com.netflix.loadbalancer.IRule)

  1. 选择最小并发请求server:BestAvailableRule

  2. 随机选择server:RandomRule

  3. 轮询方式轮询选择:RoundRobinRule

  4. 过滤失效的server和高并发的server:AvailabilityFilteringRule

  5. 根据时间分配weight:时间越长weight越小,选中的概率越低

  6. 对选定的负载均衡策略机上重试机制:RetryRule

  7. 符合判断server所在区域性能和server可用性:ZoneAvoidanceRule

ribbo使用 
第一种:局部使用(修改Application.properties配置--nacos服务器添加的服务器名.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule)
第二种:全局使用(RestConfig配置类中添加配置)
  1. @Bean
  2. public IRule myRule(){
  3. ruturn new RandomRule();
  4. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/950355
推荐阅读
相关标签
  

闽ICP备14008679号