springcloud 学习记录-2020

参考文章:

https://www.coder4.com/homs_online/  从0到1实战微服务架构

https://www.iteye.com/blog/youyu4-2405976 分布式应用雪崩效应

springcloud

概念

微服务架构
优点:
    微服务低耦合、易维护、适合团队协作、测试起来成本更低,也更易于横向拓展。采用微服务架构后,可以显著的提升迭代速度。

缺点:
    开发能力要求更高、调试难度增大、运维难度增加

使用 http + json 的方式完成远程服务调用

负载均衡算法

  1. 轮询
  2. 最小连接(优先选择连接数最少的服务器)
  3. ip散列

CAP理论

  • 一致性(Consistency) (所有节点在同一时间具有相同的数据)
  • 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
  • 分区容错性(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

cap只能保证满足其中的两项,无法同时做到3项都满足

 

nacos

服务注册与发现、配置中心

<!--   服务注册/发现     -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<!--   配置中心     -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

application.yml

服务注册与发现的地址
cloud:
    nacos:
      discovery:
        server-addr: ip:8848 # MapperScan

启动类上注解:

@SpringBootApplication
@EnableFeignClients(basePackages="com.rj.gulimall.order.feign")// 调用远程服务的接口,接口调用放进行配置即可
@EnableDiscoveryClient//开启远程服务调用功能
@MapperScan("com.rj.gulimall.order.dao")
public class MainApplication_oms9001 {

远程服务调用接口

// 服务调用者
@FeignClient("gulimall-pms") //告诉spring cloud这个接口是一个远程服务接口,gulimall-pms是注册中心中的服务名
public interface ProviderFeignService {
    @RequestMapping("/pms/nacos/user")//服务提供方的接口访问路径
    public R test();//得到一个R对象
}



// 服务提供者
@Controller
@RequestMapping("/nacos")
@RefreshScope // 自动刷新配置中心的属性值
public class ProviderController {

    @Value("${oms.user.age}") // 注入配置中心配置的属性值
    private int age;

    @Value("${oms.user.name}") // 注入配置中心配置的属性值
    private String name;

    @RequestMapping("/user")
    @ResponseBody
    public R test(){
       return R.ok().put("name",name).put("age",age);
    }
}

使用nacos的配置中心功能,必须在项目中创建一个bootstrap.properties文件(加载优先级比application.yml高),否则获取不到配置中心的数据

spring.application.name=当前项目对外暴露的服务名

spring.cloud.nacos.config.server-addr=注册中心地址:8848

# 指定加载的命名空间id,默认加载public命名空间下的数据
spring.cloud.nacos.config.namespace=1eae866d-de85-43ac-938a-18230d1cc172

# 加载命名空间里的dev配置组
spring.cloud.nacos.config.ext-config[0].group=dev
# 加载命名空间里的dev配置组的哪个配置文件
spring.cloud.nacos.config.ext-config[0].data-id=application-oms.yml
# 是否自动刷新配置文件的内容,默认不开启
spring.cloud.nacos.config.ext-config[0].refresh=true

spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].data-id=gulimall-mybatis.yml
spring.cloud.nacos.config.ext-config[1].refresh=true


spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].data-id=gulimall-nacos.yml
spring.cloud.nacos.config.ext-config[2].refresh=true

gateway

网关,具有路由转发、权限校验、限流控制等功能,QPS 3万次

请求到达网关,根据断言判断是否符合路由规则,如果符合,经过一定的过滤器链到达服务器

获取服务器列表是通过config注册中心,所以在启动类上需要开启服务发现功能@EnableDiscoveryClient

        <!--     使用注解方式获取yml属性文件内容是,需要引入该包,否则会报下述错误:      -->
        <!-- Spring Boot configuration annotation processor not found in classpath -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <!--   服务注册/发现     -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--   配置中心     -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <!--   openfeign 服务调用,负载均衡     -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <!--   网关  springcloudgateway的内部是通过netty+webflux实现的,webflux 与 spring-boot-starter-web冲突   -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
请求路径:http://localhost:88?url=qq

server:
  port: 88

spring:
  cloud:
    gateway:
      routes:
      - id: baidu_route // 路由规则ID
        uri: https://www.baidu.com // 路由跳转路径
        predicates: // 断言
        - Query=url,baidu // 断言验证url=baidu的请求会进行跳转

      - id: qq_route
        uri: https://www.qq.com
        predicates:
        - Query=url,qq

Elsticsearch

开源的全文搜索引擎,可以快速的存储、搜索、分析海量数据

关键词:index(索引,类似于mysql的数据库)、类型(类似于mysql的table)、文档(类似于mysql的数据记录,JSON格式存储)、属性(类似于mysql的字段)

下载安装

docker pull elasticsearch:7.6.2 存储和检索数据

docker pull kibana:7.6.2 可视化检索数据

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值