IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 简要接触微服务架构——个人记账 -> 正文阅读

[大数据]简要接触微服务架构——个人记账

为了了解微服务,简单使用微服务架构方式完成一个小小的记账项目模拟。

实现前后端分离,前端进链接,后端传JSON数据,达到这样的效果,使服务与服务之间分离。

项目构建

1.创建SpringCloud父工程

配置好pom文件

 <groupId>com.wly</groupId>
    <artifactId>manage-springcloud</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>manage-service</module>
        <module>manage-eureka</module>
        <module>manage-config</module>
        <module>manage-gateway</module>
        <module>manage-view</module>
    </modules>
    <packaging>pom</packaging>

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.1.5.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
        <mapper.starter.version>2.1.5</mapper.starter.version>
        <mysql.version>8.0.25</mysql.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- springCloud -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- 通用Mapper启动器 -->
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper-spring-boot-starter</artifactId>
                <version>${mapper.starter.version}</version>
            </dependency>
            <!-- mysql驱动 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

注意在packging中要声明pom,表示这是父工程

2.搭建eureka注册中心

我们在父工程中创建新的module名为manage-eureka

并引入eureka注册中心服务的依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

然后生成启动类和配置文件

启动类上要添加启动eureka服务的注解? @EnableEurekaServer

配置文件如下:

配置文件中声明了注册中心本身服务的端口号,自身的服务名(id),服务地址以及相关的其他配置。

server:
  port: 10085

#该注解表示本应用的名称
spring:
  application:
    name: eureka-server

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10085/eureka
    #不注册自己
    register-with-eureka: false
    #不拉取服务
    fetch-registry: false
  server:
    #每10000毫秒(10秒)去检查是否有超时的服务并剔除,默认60     eviction——驱逐
    eviction-interval-timer-in-ms: 10000
    #该配置表示eureka自我保护模式是否开启
    enable-self-preservation: false

3.创建网关服务——Gateway

Spring Cloud Gateway 组件的核心是一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对
应的微服务。 Spring Cloud Gateway 是加在整个微服务最前沿的防火墙和代理器,隐藏微服务结点 IP 端口信息,
从而加强安全保护。 Spring Cloud Gateway 本身也是一个微服务,需要注册到 Eureka 服务注册中心。
网关的核心功能是:过滤和路由
下面看配置:
引入依赖
<!--eureka注册依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--gateway网关依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

启动类要注解声明被服务发现——

@EnableDiscoveryClient

配置文件中声明端口号、服务id、线路断言和目标路径、跨域、负载均衡、熔断等。

这里网关的端口号为8086,固定的能够路由到记账服务的路径要求为 /api/bill/**。

server:
  port: 8086
spring:
  application:
    name: manage-gateway
  cloud:
    gateway:
      routes:
        - id: manage-service-route
          uri: lb://manage-service
          predicates:
            - Path=/api/bill/**
          filters:
            #去除一个路径后调取服务
            - StripPrefix=1
        - id: manage-view-route
          uri: lb://manage-view
          predicates:
            - Path=/index
      #跨域访问
      globalcors:
        cors-configurations:
          '[/**]':
            #        *表示全部
            allowedOrigins:
              - "*"
            allowedMethods:
              - GET

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10085/eureka
  instance:
    prefer-ip-address: true


#熔断
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 6000 #服务降级超时时间,默认1S

#负载均衡
ribbon:
  ConnectTimeout: 1000 # 连接超时时长
  ReadTimeout: 2000 # 数据通信超时时长
  MaxAutoRetries: 0 # 当前服务器的重试次数
  MaxAutoRetriesNextServer: 0 # 重试多少次服务

4.创建配置中心

需要的依赖:

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--配置中心-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>  <!--配置中心本身用config-server,其他服务用starter-config-->
        </dependency>
        <!--bus-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-bus</artifactId>
        </dependency>
        <!--rabbit-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
        </dependency>
    </dependencies>

启动类上添加 @EnableConfigServer表示开启配置中心服务

配置文件:

server:
  port: 10086
spring:
  application:
    name: manage-config
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/My1310835162/manage-config.git
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10085/eureka
#暴露出触发消息总栈的地址,此地址在仓库配置发生变动之后,可手动发送post形式的请求到:http://127.0.0.1:{本服务端口号}/actuator/{暴露的地址}
                                                               #此处为:http://127.0.0.1:10086/actuator/bus-refresh
management:
  endpoints:
    web:
      exposure:
        include: bus-refresh

uri的值为存放配置文件的git仓库地址

我的是这样:

?

5.记账后台服务

这里要注意,服务类要使用配置中心的话引入的依赖为????????spring-cloud-starter-config

config配置中心服务本身使用的是????????spring-cloud-config-server

不要添加错了。

配置文件使用bootstrap.yml

bootstrap.yml 文件也是 Spring Boot 的默认配置文件,而且其加载的时间相比于 application.yml 更早。
application.yml bootstrap.yml 虽然都是 Spring Boot 的默认配置文件,但是定位却不相同。
bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。application.yml 可以用来定义应用级别 的参数,如果搭配 spring cloud confifig 使用, application.yml 里面定义的文件可以实现动态替换。
总结就是, bootstrap.yml 文件相当于项目启动时的引导文件,内容相对固定。 application.yml 文件是微服务 的一些常规配置参数,变化比较频繁。

spring:
  cloud:
    config:
      name: bill
      profile: dev
      discovery:
        service-id: manage-config
        #启用配置中心
        enabled: true
      label: master

  #rabbit默认配置
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

#注册到微服务注册中心
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10085/eureka

?

spring.cloud.config中配置好要引用的配置文件的名、域、分支以及要使用的配置中心服务的注册id。

rabbit是消息队列设置,实现不重启微服务的情况下可以做到更新配置文件。

当然,前提是在配置中心中配置了相关参数,以及需要在服务controller中注明?????@RefreshScope

表示监控和刷新。

由于本博客重点是记录微服务的运行逻辑,具体的服务逻辑这里不做展示。

此时,我们依次启动注册中心 > 网关服务 > 配置中心 > 记账服务后台 进行测试。

这里使用便捷的api接口测试应用——Postman进行测试,数据成功返回,代表注册中心、网关、配置中心、服务本身都正常运行。

?

之后,前端利用ajax可以到指定的网关路径,然后网关路由到服务接口进行执行,将执行结束的json数据返回到网关再返回给前端页面进行使用。

如下:

?

这里是进入页面后利用ajax发送了获得分页list的请求,到达网关后路由到后端记账服务,然后成功获取到返回的json格式的数据,这里弹出数据以表示获取成功。

?微服务架构使各个环节的开发耦合性更低,提高开发效率,这里作为初学者简单熟悉了一下微服务的基础架构,将来还会深入了解,并在此基础上重构项目。

以此记录。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-16 17:44:46  更:2021-12-16 17:47:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:24:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码