微服务架构--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文件删除,带有注释的版本号进官网查看)

<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>

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

  1. 在父工程下创建一个普通的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>
  2. 创建实体类
     

    @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;
    }
  3. 配置类
     

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

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

  1. 引入依赖

     <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>
  2. 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
  3. 主启动类
     

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

    public interface ProductMapper extends BaseMapper<Product> {
    }
  5. 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);
        }
    }
  6. 如果使用openfeign进行远程调用的话需要创建一个openfieng接口
     

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

 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配置类中添加配置)
@Bean
public IRule myRule(){
    ruturn new RandomRule();
}
  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值