spring cloud alibaba 入门学习

Nacos搭建

作用:服务注册、服务发现、配置中心
环境:window 10

下载、安装、配置

1.git下载地址

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

2.根目录下打包安装(请在cmd下运行,Powershell各种问题)

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

在这里插入图片描述
成功了在这里插入图片描述

3.进入 distribution/bin 启动

进入到此目录 /distribution/target/nacos-server-2.0.2/nacos/bin

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

4.启动完成,登录

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

- List item

5. Naco动态配置(此部分建议跳过,配置中心我是在Sentinel调试后改动了配置文件及pom)

注意1:jar 引入

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

注意2:配置中新选择常用的Data ID 配置格式,有yaml 和properties。 特别注意java项目优先运行的文件是bootstrap.yml 或 bootstrap.yml, 用application.yml 我是怎么也获取不到动态配置的,于是直接将application.yml更名为bootstrap.yml完美解决

注意3:Data ID 命名要求严格,项目名-环境.后缀名 (环境没有区分可以省略,配置不对是个坑)
官方说明 https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

下图为sentinel完成调试后的图,已标记重点
在这里插入图片描述

在这里插入图片描述

Nacos 搭建完成,接下来需要服务提供者

服务提供者

1.创建父工程

  1. 新建文件夹spring-cloud-alibaba
  2. IDEA打开文件夹,文件夹下创建pom.xml,注意加入maven项目管理

一定要主要版本搭配,不然会报错。具体参考此链接,也有配置,依赖相关的文档:
https://github.com/alibaba/spring-cloud-alibaba#version-control-guidelines

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

在这里插入图片描述
在这里插入图片描述

2.创建服务提供者(即子module,这里我创建两个Provider1: 8700、Provider2: 8800,下main示例1)

1,在spring-cloud-alibaba文件下新建—>Module—>Maven—>创建项目alibaba-provider1
2,pom.xml中无需导入依赖。
在这里插入图片描述
3, 在java目录下新建项目包com.lhc.alibaba,在包目录下新建项目的启动类。

在这里插入图片描述

4, 在resources目录下新建application.yml配置文件
5,如配置文件不是小绿叶图标,File–>Project Structure–>Module–>,,,输入application搜索添加即可

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

8.Nacos 查看服务注册

在这里插入图片描述

9.写测试方法用于消费者调试

在这里插入图片描述

创建消费者

1.父工程添加消费者 openfeign 依赖(创建父工程时应该已添加了)

在这里插入图片描述

2.在spring-cloud-alibaba文件下新建—>Module—>Maven—>创建项目alibaba-consumer1
3,java目录下创建Consumer1Application启动类,添加@EnableFeignClients注解

在这里插入图片描述

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

在这里插入图片描述

5,创建service接口

在这里插入图片描述

6.,创建controller接口

在这里插入图片描述

7.访问http://localhost:8701/hello接口(访问正常,消费者常见完毕,此处可理解:生产者为消费者接口调用时的实现)

在这里插入图片描述

OpenFeign注意问题

1.所需依赖注入不进去的手动处理办法

异常如下

Caused by: feign.codec.DecodeException: No qualifying bean of type 'org.springframework.boot.autoconfigure.http.HttpMessageConverters' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
	at feign.AsyncResponseHandler.decode(AsyncResponseHandler.java:119)
	at feign.AsyncResponseHandler.handleResponse(AsyncResponseHandler.java:87)
	at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:138)
	at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:89)
	at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:109)
	at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302)
	at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298)
	at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)
	... 26 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.boot.autoconfigure.http.HttpMessageConverters' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1717)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1273)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.getObject(DefaultListableBeanFactory.java:1906)
	at org.springframework.cloud.openfeign.support.SpringDecoder.decode(SpringDecoder.java:57)
	at org.springframework.cloud.openfeign.support.ResponseEntityDecoder.decode(ResponseEntityDecoder.java:62)
	at feign.optionals.OptionalDecoder.decode(OptionalDecoder.java:36)
	at feign.AsyncResponseHandler.decode(AsyncResponseHandler.java:115)
	... 33 more

处理方法:手动注入方式,可在启动类或配置中

    @Bean
    @ConditionalOnMissingBean
    public HttpMessageConverters messageConverters(ObjectProvider<HttpMessageConverter<?>> converters) {
        return new HttpMessageConverters(converters.orderedStream().collect(Collectors.toList()));
    }

2.调用超时问题处理

参考对应版本官方文档,如
https://docs.spring.io/spring-cloud-openfeign/docs/2.2.9.RELEASE/reference/html/#timeout-handling

在这里插入图片描述

Sentinel的简单使用

1.下载地址 https://github.com/alibaba/Sentinel ,这里我使用用IDEA Git拉取的

2.启动,通过IDEA 将maven 编译打包,到 Sentinel\sentinel-dashboard\target 下打开cmd

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.登录 地址 默认http://localhost:8080/ 账号密码均为 sentinel

在这里插入图片描述

4.父工程添加依赖

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

5.消费者配置
在这里插入图片描述
限流自处理

在这里插入图片描述

服务降级自处理

在这里插入图片描述

需要限流、降级的服务接口
在这里插入图片描述
项目启动后在Sentinel中配置限流、熔断等规则
在这里插入图片描述
在这里插入图片描述

频繁刷新的效果

在这里插入图片描述

在这里插入图片描述
感谢参考文章:https://blog.csdn.net/EnlightenedNet/article/details/114634269

Spring Cloud GateWay

1.父工程依赖jar,注意GateWay中含有start-web 会与外层引入的冲突

在这里插入图片描述

2. 新建网关项目Module(略)

在这里插入图片描述

3.配置

server:
  port: 8888 #项目端口

spring:
  application:
    name: cloud-gateway #项目名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #注册中心Nacos路径端口
      config:
        server-addr: localhost:8848
        file-extension: yaml #指定yaml格式的配置,此处注意只有yaml和properties两种格式,需要注意
    gateway:
      routes: # 路由数组  指当请求满足什么样的条件的时候,转发到哪个微服务上
        - id: nacosxfz_route #当前路由标识,要求唯一 (默认值uuid,一般不用,需要自定义)
          uri: lb://alibaba-consumer1 #请求最终要被转发的地址
          order: 1 #路由优先级,数字越小,优先级越高
          predicates: #断言 判断条件,返回值是boolean 转发请求要返回的条件 (可以写多个)、
            - Path=/consumer/** #当请求路径满足path指定的规则时,此路由信息才会正常转发
          filters: #过滤器(在请求传递过程中,对请求做一些手脚)
            - StripPrefix=1 # 在请求转发之前去掉一层路径
management:
  endpoints:
    web:
      exposure:
        include: "*"  #健康状态监测


4.展示:即通过网关规则直接访问到其他微服务

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~飘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值