首页 > 其他分享 >SpringCloud 微服务框架搭建

SpringCloud 微服务框架搭建

时间:2022-10-12 14:33:40浏览次数:78  
标签:框架 spring nacos gateway SpringCloud org yml cloud 搭建

框架及技术

环境:IDEA、JDK1.8、MYSQL5.0、NacosServer 2.1.1
技术:SpringBoot+Nacos+SpringCloud Gatway+SpringCloud OpenFegin+Spring Sleuth+Maven

目标

用Maven搭建一个SpringCould微服务项目,用Nacos作为服务注册中心,集成SpringCloud GateWay,SpringCloud OpenFegin、SpringCloud Sleuth等组件使用,
创建三个SpringBoot项目,将三个项目全部注册到Nacos上,实现SpringCloud Gateway访问服务的转发,并且实现使用Springcloud Openfegin进行服务间的调用,使用SpringCloud Sleuth进行服务调用的链路追踪。

1.新建母项目mrserver
使用Maven空项目新建母项目mrserver,删除src目录等无用目录,如下图:
image

2.新建子模块项目auth/gateway/user
使用Maven空项目在mrserver下建立子服务auth,gateway,user三个springboot项目
image

3.修改pom文件
修改pom文件,将每个项目所需的依赖进行配置,详细如下:
注意:mrserver作为父项目,直接声明了springcloud,springboot的依赖包,子项目可直接引用,并在父项目pom中声明了一些依赖,但是不会生效。
(1)mrserver的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>
    <modules>
        <module>auth</module>
        <module>user</module>
        <module>gateway</module>
    </modules>

    <!--新增Springboot父依赖-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.13.RELEASE</version>
    </parent>


    <groupId>org.example</groupId>
    <artifactId>mrserver</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--打包方式为pom-->
    <packaging>pom</packaging>

    <!--声明所有用到的组件版本 springboot,springcloud,alibaba三者版本要对应-->
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <cloud.alibaba.version>2.2.1.RELEASE</cloud.alibaba.version>
        <cloud.version>Hoxton.SR12</cloud.version>
        <mysql.version>8.0.23</mysql.version>
    </properties>

    <dependencies>
        <!--父模块默认加上nacos,openfeign,子模块可直接依赖-->

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
            <version>2.2.8.RELEASE</version>
        </dependency>

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

    </dependencies>


<!--    dependencyManagement隐式声明引用-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${cloud.version}</version>
                <type>pom</type>

                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


<!--    使用maven插件进行项目构建-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

引入pom.xml依赖是所遇到的问题:spring-cloud-starter-alibaba-nacos-discovery 无法引入 关于IDEA中spring-cloud-starter-alibaba-nacos-discover
image

解决方案:

1.修改IDEA中的maven配置,把下面这个属性修改为Fail Fast(原来默认为default)
image
2.给配置加上版本号
image
问题解决!

(2) auth模块的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>mrserver</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>auth</artifactId>

<!--    打包方式为jar-->
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
    </dependencies>

</project>

(3)gateway的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>mrserver</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>gateway</artifactId>

<!--    打包方式为jar-->
    <packaging>jar</packaging>


    <!--springclouc gateway 默认集成了webflux-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>
    </dependencies>
</project>

(4)user的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>mrserver</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>user</artifactId>

<!--    打包方式为jar-->
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
    </dependencies>

</project>

4.给每个模块加上启动类XXXApplication
给auth,gateway,user服务分别建立启动类:
image

5.修改yml配置文件
建立并修改yml配置文件:
1)配置nacos注册信息,将服务注册到nacos进行管理
2)配置服务端口
3)gateway需要配置服务的网关路由信息
详细的配置信息如下:
(1)配置auth的yml文件

spring:
  application:
    name: authserver
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 81

(2)配置user的yml

spring:
  application:
    name: userserver
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 82

(3)配置gateway网关的yml信息
此处配置两个,一个是application.yml,另外一个是bootstrap.yml
application.yml

server:
  port: 80

spring:
  cloud:
    gateway:
      routes:
      #设置auth服务的皮pen路由
        - id: authserver
          uri: lb://authserver
          predicates:
          - Path=/authserver/**
          filters:
          - StripPrefix=1
      #设置user服务的匹配路由
        - id: userserver
          uri: lb://userserver
          predicates:
          - Path=/userserver/**
          filters:
          #StripPrefix=1 去掉一个前缀,比如 a/b/c.html -> b/c.html
          - StripPrefix=1

bootstrap.yml

spring:
  application:
    name: gatewayserver
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

原理扩展之application.yml/yaml/properties,bootstrap.yml/yaml/properties解读:

Spring Boot 默认支持 properties(.properties) 和 YAML(.yml .yaml ) 两种格式的配置文件,yml 和 properties 文件都属于配置文件,功能一样。

Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap,另外一种是 application。

加载顺序:若application.yml 和bootstrap.yml 在同一目录下:bootstrap.yml 先加载 application.yml后加载
配置区别:
bootstrap.yml 和 application.yml 都可以用来配置参数。

bootstrap.yml 用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootStrap.yml 被加载,则内容不会被覆盖。

application.yml 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。


6.添加Controller测试类
在auth,gateway,user上添加controller测试类,注意测试类的路径要和gateway路由中的路径相同:
image

接下里,在每个服务下添加Controller测试类
image

image

至此,代码框架的环境已经准备完成!接下来启动Nacos服务,将三个服务分别注册到Nacos Server进行管理

安装Nacos服务

前提:mysql数据库已经安装配置成功

Nacos下载地址:https://github.com/alibaba/nacos/releases

(一)Nacos文件下载
image

(二)解压到自己想要安装的位置
image

(三)在mysql上建立Nacos数据库
image

(四)进入nacos安装地址下的conf文件中,找到nacos-mysql.sql,在Mysql中nacos数据库中执行语句。
image
(五)将cluster.conf.example文件的扩展名.example去除
image
(六)修改application.properties文件内容,是Mysql配置信息生效
application.properties文件中本身含有mysql的配置信息,将注释放开并修改用户名,密码即可。(我的mysql密码为空,所以没写)
image
(七)启动Nacos
在nacos的bin文件中找到startup.cmd执行启动nacos
image
出现如下界面,即表示nacos启动成功。
image
(八)通过浏览器访问Nacos
地址:http://localhost:8848/nacos
用户名密码均为:nacos
image


**7.分别启动服务
image

服务已成功注册
image

8.正常访问业务
访问user业务中的方法,如:http://localhost/userserver/userserver/user
image
在输入地址的时候,不用在localhost后输入端口号,因为默认会访问80(即gateway服务),gateway服务作为项目网关会跳转到对应的服务方法中。
image

gateway服务网关配置
image

9.通过OpenFeign访问服务
服务A通过Spring OpenFeign方法调用服务B
image

访问:http://localhost/authserver/demo/feign
image

问题描述:在使用GatWay转发OpenFeign服务时报错:

No qualifying bean of type 'org.springframework.boot.autoconfigure.http.HttpMessageConverters'

解决方法:在@SpringBootConfiguration 类中添加如下代码

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

image

问题解决!

标签:框架,spring,nacos,gateway,SpringCloud,org,yml,cloud,搭建
From: https://www.cnblogs.com/weiyahui/p/16783916.html

相关文章

  • python APScheduler调度框架任务
    pythonAPScheduler调度框架任务详解https://blog.csdn.net/Dxy1239310216/article/details/121996740flask定时任务flask-apschedulerhttps://blog.csdn.net/weixin_......
  • 在Linux上搭建jupyter服务
    一.安装jupyte所有操作在root权限下进行。安装jupyter之前,确保服务器中已安装好了python3。本服务器的python3的安装路径为usr/lib/python3.7/。安装jupyter模块:pipin......
  • 基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v6.0版已发布
    关于MobileIMSDKMobileIMSDK是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持UDP 、TCP 、WebSocket 三种协议,支持iOS、Android、H5、......
  • 启科量子开源量子编程框架 QuTrunk
    近日,启科量子公布发布并开源了其首个量子编程框架QuTrunk,旨在让更多的开发者、专家学者能够通过它来进行量子电路等方面的模拟,让更多的人可以参与到量子技术的研发上来,更快......
  • Lnmp环境搭建
    Lnmp环境搭建目录Lnmp环境搭建lnmp介绍lnmp的优势lnmp搭建下载安装Nginx下载安装MySQL下载安装PHP配置网站页面lnmp介绍LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这......
  • 开箱即用~基于.NET Core的统一应用逻辑分层框架设计
    目前公司系统多个应用分层结构各不相同,给运维和未来的开发带来了巨大的成本,分层架构看似很简单,但保证整个研发中心都使用统一的分层架构就不容易了。那么如何保证整个研......
  • 若依框架代码生成(前后端分离版本)
    1、修改代码生成配置编辑resources目录下的application.yml最下面,代码生成这一块。author:#开发者姓名,生成到类注释上packageName:#默认生成包路径autoRemo......
  • 基于Nonebot2搭建QQ机器人(三):插件高级
    目录Nonebot2插件高级一、工作流程1、概念2、简介3、事件处理4、调用协议端接口二、定时任务1、安装插件2、快速使用3、配置插件三、匹配规则1、创建规则2、创......
  • 阿里云centos7.3搭建个人网盘
    php安装主文错误最后一个ERROR:unabletobindlisteningsocketforaddress’127.0.0.1:9000′解决办法:killallphp-fpm//以下王章做完后出错,但是可以借鉴//整篇做......
  • 【Django-rest-framework框架】 第09回 内置类,过滤类的其他使用,全局异常处理,接口文档
    目录1.内置认证类,权限类,频率类1.1内置的认证类:1.2内置权限类1.3内置的频率类2.django的配置文件每个配置项的作用3.过滤类的其它使用3.1django-filter3.1.1继承精......