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流量哨兵(监控整个微服务,从流量控制,熔断降级,系统负载等多个维度保护服务)
idea 搭建springcloud+springcloud alibaba项目(maven)_第1张图片
1.新建无骨架的maven项目作为父项目
idea 搭建springcloud+springcloud alibaba项目(maven)_第2张图片
删掉src文件目录并引入依赖:

 
    
        org.springframework.boot
        spring-boot-starter-parent
        2.2.5.RELEASE
    

    
        1.8
        2.2.1.RELEASE
        Hoxton.SR6
    
    
    
        
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                ${spring.cloud.alibaba.version}
                pom
                import
            
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring.cloud.version}
                pom
                import
            
        
    

idea 搭建springcloud+springcloud alibaba项目(maven)_第3张图片
然后新建一个Module:commons,以后主要是放置公共实体类以及公共工具类以及公共依赖,所以不需要启动类,以及test
idea 搭建springcloud+springcloud alibaba项目(maven)_第4张图片
idea 搭建springcloud+springcloud alibaba项目(maven)_第5张图片
然后根据上面的方式在随意建两个module,这里一个user,一个product
然后公共类引入Nacos注册发现依赖 以及 springboot的web依赖,两个新建的module引入commons


            org.springframework.boot
            spring-boot-starter-web
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        

idea 搭建springcloud+springcloud alibaba项目(maven)_第6张图片
idea 搭建springcloud+springcloud alibaba项目(maven)_第7张图片
然后以用户服务为例(三部曲:引依赖,写配置文件,写启动类):
依赖就是上面引的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=*

idea 搭建springcloud+springcloud alibaba项目(maven)_第8张图片
写启动类并运行,product服务同上(如果报错,clean/install一下父工程):
idea 搭建springcloud+springcloud alibaba项目(maven)_第9张图片

idea 搭建springcloud+springcloud alibaba项目(maven)_第10张图片
成功注册到Nacos服务中心
三:引入openfeign实现服务调用(服务可以互相调用,所以依赖可以加在公共服务里)
以user服务为例


        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        

idea 搭建springcloud+springcloud alibaba项目(maven)_第11张图片
入口类加入@EnableFeignClients注解
idea 搭建springcloud+springcloud alibaba项目(maven)_第12张图片
product服务写个接口:
idea 搭建springcloud+springcloud alibaba项目(maven)_第13张图片
user服务添加新建个clients包,用来存放服务调用接口
idea 搭建springcloud+springcloud alibaba项目(maven)_第14张图片
然后写user服务接口调用product服务的接口:
idea 搭建springcloud+springcloud alibaba项目(maven)_第15张图片
运行:Error:(3,43) java: 程序包org.springframework.cloud.openfeign不存在(报错的话clean/install一下commons服务)
然后复制一个product服务测试负载均衡(这个方法上篇讲过https://blog.csdn.net/Helloworld_pang/article/details/108281893)
idea 搭建springcloud+springcloud alibaba项目(maven)_第16张图片
访问:
idea 搭建springcloud+springcloud alibaba项目(maven)_第17张图片
刷新:
idea 搭建springcloud+springcloud alibaba项目(maven)_第18张图片实现负载均衡

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


        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-sentinel
        

然后配置user,product服务的配置文件
idea 搭建springcloud+springcloud alibaba项目(maven)_第19张图片

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

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


        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        

然后nacos新建一个生产命名空间:
idea 搭建springcloud+springcloud alibaba项目(maven)_第22张图片
然后去生产环境中配置:
idea 搭建springcloud+springcloud alibaba项目(maven)_第23张图片
idea 搭建springcloud+springcloud alibaba项目(maven)_第24张图片
idea 搭建springcloud+springcloud alibaba项目(maven)_第25张图片
然后修改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

idea 搭建springcloud+springcloud alibaba项目(maven)_第26张图片

运行
idea 搭建springcloud+springcloud alibaba项目(maven)_第27张图片
成功
接下来是gateway:
新建一个module(cloud-server)并引入依赖(mvc的web依赖跟gateway依赖冲突,所以gateway依赖自己单独引入):

        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
        
            org.springframework.cloud
            spring-cloud-starter-gateway
        
        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        

        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-sentinel
        

        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        

idea 搭建springcloud+springcloud alibaba项目(maven)_第28张图片
然后新建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

idea 搭建springcloud+springcloud alibaba项目(maven)_第29张图片

然后新建启动类:
idea 搭建springcloud+springcloud alibaba项目(maven)_第30张图片
启动
idea 搭建springcloud+springcloud alibaba项目(maven)_第31张图片
访问:
在这里插入图片描述
处理格式异常:https://blog.csdn.net/Helloworld_pang/article/details/108400636
通过gateway访问商品服务:
idea 搭建springcloud+springcloud alibaba项目(maven)_第32张图片
刷新:
idea 搭建springcloud+springcloud alibaba项目(maven)_第33张图片
负载均衡
通过gateway访问user服务,user服务调用的product服务
idea 搭建springcloud+springcloud alibaba项目(maven)_第34张图片
刷新:
idea 搭建springcloud+springcloud alibaba项目(maven)_第35张图片
成功
最后,查看路由规则:
这里配置了路由暴露规则端点:
idea 搭建springcloud+springcloud alibaba项目(maven)_第36张图片
引入依赖:
idea 搭建springcloud+springcloud alibaba项目(maven)_第37张图片
重启:访问:http://localhost:7666/actuator/gateway/routes
idea 搭建springcloud+springcloud alibaba项目(maven)_第38张图片
结束

你可能感兴趣的