Spring Cloud alibaba 组件小结

一、组件介绍

        组件 作用
nacos注册中心(服务注册与发现)、配置中心(动态配置管理)
Loadbalancer 负载均衡
Feign声明式Http客户端(调用远程服务)
Sentinel服务容错(限流、降级、熔断)
GatewayAPI网关(webflux编程模式)
Sleuth调用链监控
Seata分布式事务解决方案


二、在公共模块引入依赖


1、每个微服务项目都会有个公共的模块,用于引一些公用的依赖、配置
2、引入这个依赖,spring-cloud-alibaba 其他的依赖就不用写版本号
3、注意版本号要与springboot版本对应

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


三、 Nacos
 

Nacos:注册中心,致力于帮助您发现、配置和管理微服务;

历史版本:https://github.com/alibaba/nacos/releases 

安装:

  • 从历史版本中下载 Zip 包,解压到本地即可使用;

运行:   

  • Windows
    • 在安装好的nacos下的bin目录下,打开cmd
    • startup.cmd -m standalone ---- 开启服务,默认为集群方式启动,启动报错,需改为单机版方式 standalone;
    • shutdown.cmd ---- 关闭服务;
  • Linux
    • cd /usr/nacos/bin
    • sh startup.sh -m standalone ---- 开启服务,standalone 单机运行模式;
    • bash startup.sh -m standalone ---- Ubuntu 开启服务;
    • sh shutdown.sh ---- 关闭服务

  • 访问主页:http://127.0.0.1:8848/nacos/
  • 用户名/密码:nacos/nacos;

四、Feign


Feign远程调用工具

  • Pom 依赖
<!-- openfeign -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

<!-- loadbalancer, spring cloud 高版本中, OpenFeign 使用的负载均衡器,需单独引入 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
  • 配置
    • 启动类添加 @EnableFeignClients 注解;
  • 应用

        在需要调用的地方创建一个service接口

        加上@FeignClient注解,并将name属性配置为在nacos中心注册的要调用的其他微服务对应的名字

        将要调用的微服务的controller层的代码拷贝过来,去掉实现与public,给上完整的路径地址


五、Loadbalancer 负载均衡

我理解的是在注册中心中有多个相同名字的微服务(端口不一样),在默认调用时,采用轮循的方式调用每一个同名的微服务

例如下方alibaba-service-test有三个,端口分别为8001,8002,8003;当调用alibaba-service-test接口时会采用轮询的方式调用三个接口

我们可以修改这种调用方式,修改为随机调用三个端口

  • Service Module Account
    • Pom 依赖
      • 上一步已引入;
<!-- loadbalancer, spring cloud 高版本中, OpenFeign 使用的负载均衡器,需单独引入 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
  • 配置
    • CustomLoadBalancerConfig
package com.sfac.alibabaServiceAccount.config;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;


/**
 * Description: Custom LoadBalancer Config
 * - 该类不添加 @configuration 注解,因为该类为 @LoadBalancerClient 的属性准备
 * @author HymanHu
 * @date 2022-03-05 15:55:55
 */
public class CustomLoadBalancerConfig {
    @Bean
    ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(
            Environment environment, 
            LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        // 在此也可返回自定义负载均衡器
        return new RandomLoadBalancer(
                loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
    }
}
  • 启动类添加 @LoadBalancerClient 注解;
@LoadBalancerClient(name = "alibaba-service-test", configuration = CustomLoadBalancerConfig.class)

当再一次调用alibaba-service-test时可以发现是随机调用三个接口。


五、Gateway网关

Gateway

  • Pom 依赖
            <!--gateway-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-gateway</artifactId>
            </dependency>
    
            <!-- nacos-discovery -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    
            <!-- openfeign -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
    
            <!-- loadbalancer -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-loadbalancer</artifactId>
            </dependency>

  • application.properties
# for server
server.port=8888

# for nacos application
spring.application.name=spring-cloud-alibaba-gateway

# for not web start
spring.main.web-application-type=reactive

#for nacos discovery
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

# for gateway route
spring.cloud.gateway.routes[0].id=testServer
spring.cloud.gateway.routes[0].uri=lb://spring-cloud-alibaba-test
spring.cloud.gateway.routes[0].predicates[0]=Path=/api/test/**
spring.cloud.gateway.routes[1].id=accountServer
spring.cloud.gateway.routes[1].uri=lb://spring-cloud-alibaba-account
spring.cloud.gateway.routes[1].predicates[0]=Path=/api/account/**
  • 启动类
package com.sfac.springCloudAlibabaGateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class SpringCloudAlibabaGatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudAlibabaGatewayApplication.class, args);
    }

}

测试:

        可以通过网关的端口来访问对应的接口


六、Sentinel服务容错


Sentinel

七、seata分布式事务


Seata
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值