idea 搭建springcloud+springcloud alibaba项目(maven)

idea 搭建springcloud+springcloud alibaba项目

版本:
jdk:1.8
springcloud alibaba:2.2.1
springboot:2.2.5
springcloud:Hoxton.SR6
个人总结:
(1)首先是服务注册中心以及配置中心(Nacos)
(2)服务注册
(3)openfeign组件实现服务调用(集成了Ribbon,故负载均衡)
(4)gateway网关(实现了统一调用):路由转发,过滤
(5)sentinel流量哨兵(监控整个微服务,从流量控制,熔断降级,系统负载等多个维度保护服务)
在这里插入图片描述
1.新建无骨架的maven项目作为父项目
在这里插入图片描述
删掉src文件目录并引入依赖:

 <!--集成springboot父项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
        <spring.cloud.version>Hoxton.SR6</spring.cloud.version>
    </properties>
    <!--全局引入下载依赖地址,并不会引入依赖-->
    <dependencyManagement>
        <dependencies>
            <!--阿里巴巴下载仓库-->
            <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>
            <!--springcloud下载仓库-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

在这里插入图片描述
然后新建一个Module:commons,以后主要是放置公共实体类以及公共工具类以及公共依赖,所以不需要启动类,以及test
在这里插入图片描述
在这里插入图片描述
然后根据上面的方式在随意建两个module,这里一个user,一个product
然后公共类引入Nacos注册发现依赖 以及 springboot的web依赖,两个新建的module引入commons

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos client-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

在这里插入图片描述
在这里插入图片描述
然后以用户服务为例(三部曲:引依赖,写配置文件,写启动类):
依赖就是上面引的commons。

创建resource文件夹以及application.properties文件并写入配置

server.port=6666
spring.application.name=clouduser

spring.cloud.nacos.server-addr=localhost:8848
spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr}
management.endpoints.web.exposure.include=*

在这里插入图片描述
写启动类并运行,product服务同上(如果报错,clean/install一下父工程):
在这里插入图片描述

在这里插入图片描述
成功注册到Nacos服务中心
三:引入openfeign实现服务调用(服务可以互相调用,所以依赖可以加在公共服务里)
以user服务为例

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

在这里插入图片描述
入口类加入@EnableFeignClients注解
在这里插入图片描述
product服务写个接口:
在这里插入图片描述
user服务添加新建个clients包,用来存放服务调用接口
在这里插入图片描述
然后写user服务接口调用product服务的接口:
在这里插入图片描述
运行:Error:(3,43) java: 程序包org.springframework.cloud.openfeign不存在(报错的话clean/install一下commons服务)
然后复制一个product服务测试负载均衡(这个方法上篇讲过https://blog.csdn.net/Helloworld_pang/article/details/108281893)
在这里插入图片描述
访问:
在这里插入图片描述
刷新:
在这里插入图片描述实现负载均衡

接下来先实现流量卫兵的监控
公共依赖引入依赖:

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

然后配置user,product服务的配置文件
在这里插入图片描述

spring.cloud.sentinel.enabled=true
spring.cloud.sentinel.transport.dashboard=localhost:xxxx  //这个xxxx是自己的端口号
spring.cloud.sentinel.transport.port=8719

先看下sentinel,暂时没有对应的服务
在这里插入图片描述
然后运行一下各自的接口,在看sentinel就有了(这里application配置文件没有配置spring.cloud.sentinel.eager=true
(这个就是代表立即加在到sentinel就不需要访问一下对应的接口才能检测到))
在这里插入图片描述
哨兵监控完成
然后就是管理配置文件(统一配置管理中心):
commons引入依赖

<!--(nacos统一配置中心管理依赖)-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

然后nacos新建一个生产命名空间:
在这里插入图片描述
然后去生产环境中配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后修改user服务的properties文件为bootstrap

spring.cloud.nacos.server-addr=localhost:8848
spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr}
#这是上面环境下的唯一标识
spring.cloud.nacos.config.namespace=732f14fe-5d92-4d02-a276-340d9398b3d8
#这是分组
spring.cloud.nacos.config.group=CLOUDALI
#这三个合起来就是data id
spring.application.name=clouduser
spring.profiles.active=prod
spring.cloud.nacos.config.file-extension=properties

在这里插入图片描述

运行
在这里插入图片描述
成功
接下来是gateway:
新建一个module(cloud-server)并引入依赖(mvc的web依赖跟gateway依赖冲突,所以gateway依赖自己单独引入):

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

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

        <!--(nacos统一配置中心管理依赖)-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

在这里插入图片描述
然后新建resoure文件夹,配置文件需要写成yml格式:

server:
  port: 7666
spring:
  application:
    name: gateway
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
      discovery:
        service-name: ${spring.application.name}
    gateway:
      routes:
        - id: user-route  #指定唯一标识
          #          uri: http://localhost:6666/ #指定路由服务的地址
          uri: lb://clouduser   #服务名,实现负载均衡
          predicates:
            - Path=/user/** #指定路由规则

        - id: product-route  #指定唯一标识
          #          uri: http://localhost:6667/ #指定路由服务的地址
          uri: lb://cloudproduct   # lb:服务名,实现负载均衡
          predicates:
            - Path=/product/** #指定路由规则
      discovery:
        locator:
          enabled: true  #开启动态服务名动态获取路由地址

management:
  endpoints:
    web:
      exposure:
        include: "*"   #暴露路由的规则端点  /actuator/gateway/routes

在这里插入图片描述

然后新建启动类:
在这里插入图片描述
启动
在这里插入图片描述
访问:
在这里插入图片描述
处理格式异常:https://blog.csdn.net/Helloworld_pang/article/details/108400636
通过gateway访问商品服务:
在这里插入图片描述
刷新:
在这里插入图片描述
负载均衡
通过gateway访问user服务,user服务调用的product服务
在这里插入图片描述
刷新:
在这里插入图片描述
成功
最后,查看路由规则:
这里配置了路由暴露规则端点:
在这里插入图片描述
引入依赖:
在这里插入图片描述
重启:访问:http://localhost:7666/actuator/gateway/routes
在这里插入图片描述
结束

  • 33
    点赞
  • 155
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值