Spring Cloud Alibaba 入门级完整的项目搭建与服务调用

一,Nacos注册中心下载与安装

1.下载安装

https://gitee.com/mirrors/Nacos?_from=gitee_search //码云上下载的更快一点

打开下载文件的根目录输入cmd打开命令窗输入打包命令。

mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U

2.启动

全部打包完成后可以开始启动项目

进入到此目录:E:\ZouWorkSpace\MyTest\Nacos\distribution\target\nacos-server-1.4.1\nacos\bin
或者 cd distribution/target/nacos-server-$version/nacos/bin

在此目录下cmd打开命令窗口
windows系统下执行: cmd startup.cmd -m standalone(注意有坑,1.如果此命令无效,直接输入startup.cmd -m standalone,2,此命令为单机模式启动,如果直接双击文件启动可能会报错)
Lunix系统下执行: sh startup.sh -m standalone

启动完毕后:http://locahost:8848/nacos 可直接进去Nacos登录界面(账号密码皆为:nacos)

3.Nacos的配置

如果我们在项目中使用yml格式的配置文件时,我们需要在此配置格式。

添加如下配置

以上Nacos注册服务中心就初步完成了,下面我们来写服务提供者。

二,创建服务提供者

1,新建父类管理依赖。

1,新建文件夹 spring-cloud-alibaba

2, 在idea中打开该文件夹,在此目录下新建pom.xml文件,导入相关依赖,如下:

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zpa.alibaba</groupId>
    <artifactId>spring-cloud-alibaba</artifactId>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>alibaba-provider2</module>
        <module>alibaba-provider1</module>
    </modules>

    <packaging>pom</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR8</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <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>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
            <version>0.9.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
            <optional>true</optional>
        </dependency>
    </dependencies>

</project>

一定要主要版本搭配,不然会报错。具体参考此链接,也有配置,依赖相关的文档:

https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

2,新建服务提供者

1,在spring-cloud-alibaba文件下新建—>Module—>Maven—>创建项目alibaba-provider1

2,pom.xml中无需导入依赖。

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-alibaba</artifactId>
        <groupId>com.zpa.alibaba</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>alibaba-provider2</artifactId>

</project>

3, 在java目录下新建项目包com.zpa.alibaba,在包目录下新建项目的启动类。

package com.zpa.alibaba;

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

/**
 * @Author user
 */
@SpringBootApplication
@EnableDiscoveryClient
public class Provider1Application {
    public static void main(String[] args) {
        SpringApplication.run(Provider1Application.class,args);
    }
}

4, 在resources目录下新建application.yml配置文件

5,如配置文件不是小绿叶图标,File–>Project Structure–>Module–>,,,输入application搜索添加即可

6,在配置中导入配置文件内容

server:
  port: 8700 #项目端口

spring:
  application:
    name: alibaba-provider1 #项目名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #注册中心Nacos路径端口
management:
  endpoints:
    web:
      exposure:
        include: "*"  #健康状态监测

项目结构目录如下(具体实现方法自己去写)

7,启动项目,然后在Nacos注册中心下服务列表下可查看是否已注册。

8,简单创建一个controller,方便待会消费者测试。

package com.zpa.alibaba.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author user
 */
@RestController
public class HelloProvider1 {

    @GetMapping(value = "/hello/{message}")
    public String HelloProvider1(@PathVariable String message) {
        return "Hello" + message;
    }
}

9,服务提供者创建完毕。

三,创建服务消费者

1,往父类添加消费者openfeign依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2,在spring-cloud-alibaba文件下新建—>Module—>Maven—>创建项目alibaba-consumer1

3,java目录下创建Consumer1Application启动类,添加@EnableFeignClients注解

package com.zpa.alibaba;

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

/**
 * @Author user
 */
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class Consumer1Application {
    public static void main(String[] args) {
        SpringApplication.run(Consumer1Application.class,args);
    }
}

4,在resources目录下新建application.yml配置文件

server:
  port: 8701

spring:
  application:
    name: alibaba-consumer1
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
management:
  endpoints:
    web:
      exposure:
        include: "*"

5,创建service接口

package com.zpa.alibaba.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @Author user
 */
@FeignClient(value = "alibaba-provider1")
public interface Provider1Service {
    @GetMapping(value = "/hello/{message}")
    String hello(@PathVariable(value = "message") String message);

}

6,创建controller接口

package com.zpa.alibaba.controller;

import com.zpa.alibaba.service.Provider1Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author user
 */
@RestController
public class Consumer1Controller {
    @Autowired
    private Provider1Service provider1Service;

    @GetMapping(value = "/hello")
    public String HelloProvider1() {
        return provider1Service.hello("hahahahahahah ");
    }
}

7,访问http://localhost:8701/hello接口

8,消费者创建完毕!

四,Sentinel的简单使用

依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

启动方式
下载Sentinel后在E:\ZouWorkSpace\MyTest\Sentinel\sentinel-dashboard\target>文件下cmd窗口输入

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

消费者yml配置类

server:
  port: 8701

spring:
  application:
    name: alibaba-consumer1
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    sentinel:
      transport:
        port: 8719
        dashboard: localhost:8080
feign:
  hystrix:
    enabled: true
    
management:
  endpoints:
    web:
      exposure:
        include: "*"

消费者接口类

package com.zpa.alibaba.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.zpa.alibaba.fallback.CustomerFallback;
import com.zpa.alibaba.blockHandler.CustomerBlockHandler;
import com.zpa.alibaba.service.Hello1Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author user
 * 消费者使用
 */
@RestController
public class Consumer1Controller {
    @Autowired
    private Hello1Service hello1Service;

    @GetMapping(value = "/hello")
    @SentinelResource(value = "/helloConsumer",blockHandlerClass = CustomerBlockHandler.class,blockHandler="testblockHandler",
            fallbackClass = CustomerFallback.class,fallback = "testFallback")
    public String helloConsumer() {
        return hello1Service.hello("我是一个服务消费者!!! ");
    }
}

限流自处理类

package com.zpa.alibaba.blockHandler;
import com.alibaba.csp.sentinel.slots.block.BlockException;

/**
 * @Author user
 * 流控规则。访问太快了
 * 限流自定义处理优化出里
 */
public class CustomerBlockHandler {
    //降级逻辑(备选逻辑),BlockException参数必须写
    //方法定义为静态方法
    public static String testblockHandler(BlockException exception){

        return "有流控规则限流了,访问过快了,慢点点。。。";
    }
}

服务降级自处理类

package com.zpa.alibaba.fallback;

/**
 * <p>title: com.wfx.fallback</p>
 * <p>Company: wendao</p>
 * author zhuximing
 * date 2020/10/29
 * description:服务熔断降级异常自定义处理
 */
public class CustomerFallback {

    //降级逻辑(备选逻辑),BlockException参数必须写
    //方法定义为静态方法
    public static String testFallback(Throwable throwable) throws Exception{

        return "服务提供有问题,已经降级了,耐性等待一会。。。 ";
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。 主要功能服务限流降级:默认支持 WebServlet、 WebFlux, OpenFeign、 RestTemplate、 Spring CloudGateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有Worker(schedulerx-client)上执行。阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道
Spring Cloud Alibaba 是阿里巴巴提供的基于 Spring Cloud 的开源框架,用于构建微服务架构的应用程序。它提供了一套完整的分布式系统解决方案,包括服务注册与发现、配置管理、负载均衡、熔断器、限流器等核心组件,为开发者提供了高可用、高可靠、高性能的微服务开发环境。 要学习 Spring Cloud Alibaba 并应用于项目实战,可以按照以下步骤进行: 1. 学习基础知识:先了解 Spring CloudAlibaba 的相关概念和技术栈,包括 Spring Cloud Netflix、Spring Cloud Gateway、Nacos、Sentinel 等。 2. 搭建环境:根据项目需求,选择合适的开发工具和环境,如 IntelliJ IDEA、Eclipse、Maven、JDK 等,并配置好相关依赖。 3. 创建微服务应用:通过 Spring Initializr 创建一个基础的 Spring Boot 项目,并添加 Spring Cloud Alibaba 的相关依赖。 4. 配置服务注册与发现:使用 Nacos 注册中心,将微服务的信息注册到 Nacos 中,并实现服务之间的调用和发现。 5. 配置负载均衡:通过使用 Spring Cloud LoadBalancer 和 Nacos 客户端实现负载均衡,在多个实例之间分配请求负载。 6. 实现断路器和限流:使用 Sentinel 来实现服务的熔断和限流,保护系统免受高并发的冲击。 7. 使用分布式配置:通过 Nacos 实现配置中心,将应用程序的配置文件统一管理,并自动刷新配置。 8. 实现服务网关:使用 Spring Cloud Gateway 构建统一的入口,对外提供简化的 API,并进行请求过滤、路由转发等功能。 9. 监控和追踪:使用 SkyWalking 对微服务的性能和健康状态进行监控,并进行错误追踪和分析。 10. 测试和部署:编写测试用例,对微服务进行单元测试和集成测试,并使用 Docker、Kubernetes 等容器技术进行部署和管理。 通过以上步骤的学习和实践,逐步掌握 Spring Cloud Alibaba 的核心组件和功能,就可以从入门到项目实战了。但需要注意的是,只有持续学习和实践,并结合实际项目需求,才能不断提升自己在 Spring Cloud Alibaba 上的能力和经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值