栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

搭建SpringClouldAlibaba微服务项目

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

搭建SpringClouldAlibaba微服务项目

1、需求

当前的需求是有一个微服务架构的后端提供接口,模拟数据返回给前端,后端暂不需要实现业务逻辑。
由此需求为:可创建微服务,有配置中心,有服务注册,有统一网关,支持服务间调用,可生成API文档。
微服务我们选用当前较火的SpringClouldAlibaba。
注册与配置中心使用nacos。
负载均衡使用ribbon。
网关使用SpringClould gateway。
服务调用使用SpringClould openfegin。
接口文档使用smart-doc+torna。

往下看的前提是nacos已经安装完毕,如果没有,请看我的:安装配置nacos

2、创建父项目

1、创建一个普通的spring boot项目作为父项目。

2、填写项目基本信息,注意此处打包类型需要是pom。
3、选择依赖,什么都不选择。
4、完成项目创建
5、配置pom.xml




    
    4.0.0

    
        org.springframework.boot
        spring-boot-dependencies
        2.3.2.RELEASE
    

    
    com.bteam
    bt-erp-server
    0.0.1
    bt-erp-server
    this is erp project of bteam

    
    pom

    
    
        
        11
        11
        11
        
        2.2.6.RELEASE
        2.3.2.RELEASE
        Hoxton.SR9
        8.0.22
        3.3.2
        1.2.17
        1.1.22
    

    
        

        
        
            org.springframework.boot
            spring-boot-starter-web
        

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

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

        
            org.projectlombok
            lombok
        
    

    
    
        

            
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring.boot}
                pom
                import
            

            
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring.cloud}
                pom
                import
            

            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                ${alibaba.cloud}
                pom
                import
            

            
            
                mysql
                mysql-connector-java
                ${mysql.version}
            

            
            
                com.alibaba
                druid-spring-boot-starter
                ${druid.version}
            

            
            
                log4j
                log4j
                ${log4j.version}
            

            
            
                com.baomidou
                mybatis-plus-boot-starter
                ${mybatisPlus.version}
            
        
    

    
        

            
            
                com.github.shalousun
                smart-doc-maven-plugin
                2.2.8
                

                    
                    ./src/main/resources/smart-doc.json

                    
                    B-TEAM-ERP

                    
                        
                        com.alibaba:fastjson
                    
                
            
        
    



父项目就算是配置好了。

3、创建微服务项目

在这里我创建一个微服务名为:sale-service的微服务。
使用maven创建即可


创建完毕后在resource下创建application.yml 和bootstrap.yml文件方便后续配置。
在mian/java下创建包com.bteam。
在包下创建启动类:SaleServiceApplication


完毕后你的结构应该和上面的一致。接下来编写配置文件
在bootstrap.yml中配置应用名与nacos连接信息

spring:
  application:
    name: sale-service
  cloud:
    nacos:
      discovery:
        server-addr: 102.108.333.222:111
      config:
        server-addr: 102.108.333.222:111
        username: bteam
        password: bteam
        namespace: public

在application.yml中修改端口号

server:
  port: 8801

创建一个controller包,在其中创建一个OrderController测试这个微服务运行是否正常。

package com.bteam.controller;


@RestController
@RequestMapping("/sale/order")
public class OrderController {

    // 基本操作获取配置信息
    @Value("${server.port}")
    String port;

    @Value("${spring.application.name}")
    String serverName;

    
    @GetMapping("/test")
    public String getTestMsg(){
        return "恭喜您请求 http://"+serverName+":"+port+"/test 成功!";
    }

如此我们就完成第一个微服务的搭建。

4、服务间调用

为了演示服务间的调用,再创建一个common-api的微服务。
配置文件和上面的一致,只是需要修改服务名与端口号即可。
创建主启动类和一个CommonController

@RestController
public class CommonController {
    
    @GetMapping("/common")
    public Map getCommon(){
        Map common = new HashMap();
        common.put("msg","你好,我从common-api服务中过来的哦");
        common.put("time", new Date());
        return common;
    }
}

OK,再sale-service这个服务中的pom.xml文件中,引入openfegin的依赖


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




    org.springframework.cloud
    spring-cloud-starter-netflix-ribbon

然后在主启动类上加@EnableFeignClients注解开启fegin。

创建一个包fegin,在其中创建一个接口

package com.bteam.fegin;


@FeignClient(name = "commons-api")
public interface CommonsApiFegin {
    @GetMapping("/common")
    Map getCommon();
}

然后我们在OrderController中再编写一个接口测试

@Autowired
CommonsApiUserFegin commonsApiFegin;


@GetMapping("/from_common_api")
public String getCurrentUserInfo(){
    return commonsApiUserFegin.getCommon().toString();
}

实测请求成功,这里就不演示了。

5、添加网关

网关是一个单独的微服务,所有请求都将被这个网关拦截,并由这个网关决定路由到哪个服务。
那么,先创建一个微服务叫gateway-security,因为后面的安全权限认证啥的也是在这里做的。
依然按照上面编写配置文件,修改服务名和端口号,创建主启动类。

由于是使用spring cloud gateway我们需要引入对用的依赖


    org.springframework.cloud
    spring-cloud-starter-gateway




    org.springframework.boot
    spring-boot-starter-web
    test

然后在application.yml文件中编写gateway配置

server:
  port: 8802
spring:
  cloud:
    gateway:
      # 开启网关拦截所有请求
      enabled: true
      # 配置路由,注意有s,说明可以配置多个路由
      routes:
        - id: sale-service # 路由的名字,是不是服务名不重要,但要求全局唯一,建议配合服务名
          uri: lb://sale-service # 要路由到的服务 格式为: lb:// + 服务名
          predicates: # 断言,也就是判断路径,要路由到哪个服务
            - Path=/sale/order/** # 如果以/sale/order/开头的请求,就全部打到sale-service服务上

然后我们就可以通过这个统一端口:8802去访问sale-service中所有以/sale/order开头的接口了。

6、接口文档配置

这里选用了smart-doc+torna,具体的介绍这里不在介绍,使用的原因是,受够swagger了,我有代码洁癖。
torna官网:http://torna.cn/
smart-doc仓库:https://gitee.com/smart-doc-team/smart-doc
注意,在此之前你需要先安装torna在本地或远程,安装其实就是下载就能用,官网安装说明解释得很好。

在创建父项目的时候我已经把smart-doc的插件引入了,可以回头看看,是的,我是创建完项目才写的笔记。
然后再每个微服务的resources下面创建stmart-doc.json文件进行配置就可以了

{
  "isStrict": false,
  "allInOne": true,
  "outPath": "D://bt-api",
  "coverOld": true,
  "createDebugPage": true,
  "projectName": "BT-ERP-API-DOC",
  "sortByTitle":true,
  "showAuthor":true,
  "requestFieldToUnderline":true,
  "responseFieldToUnderline":true,
  "inlineEnum":true,
  "allInOneDocFileName":"index.html",
  "requestExample":"true",
  "responseExample":"true",
  "displayActualType":true,
  "appToken": "f7261cb475504xxxxxx5a05bd4ba96bc", // 这里对应一个接口文档的一个api的token
  "appKey": "2021102xxxxxxx444032", // 这里对应空间管理生成的key
  "secret": "q5NZR31y8xxxxxxxxxx0K5td1XM<", // 这里对应空间管理生成的密匙
  "openUrl": "http://xx.1xx.xx5.2xx:7700/api" // 你torna的访问地址
}

生成接口文档需要执行插件,在idea中打开maven,选择你要生成文档的对应的微服务,点击图中的插件执行就可以了。

注意,smart-doc要求我们注释要编写规范,关于注释该怎么写,请详细阅读帮助文档

顺便一提,torna真香,结束。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/354261.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号