【Spring Cloud】新闻头条微服务项目:环境搭建及框架准备

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
简介: 主要介绍基于Spring Cloud的文章类微服务项目的功能描述及开发前需要的环境、框架搭建过程。

一:项目介绍

1.项目功能描述

       该项目是一个文章体裁类的项目,面对三种不同群体(用户、自媒体创作人、管理员)有三种不同的客户端(App移动端、自媒体创作端、管理端),而这三者之间可以通过Feign实现相互调用。

       在App移动端,用户可以查看文章并且能够对文章进行点赞、收藏、关注作者等操作,除此之外,在App端最后还利用xxl-job实现定时计算文章热度,用Kafka Stream实时计算文章热度。在自媒体创作端,创作者可以上传图片素材,对自己创作的稿件进行管理,还能创作并发布文章。在管理端,管理员登录之后可以实现对创作者申请的审核,对文章的管理,对敏感词的管理等。

2.所用技术栈介绍

       这是一个基于Springboot和SpringCloud的微服务项目,负载均衡层面主要采用Nginx来实现反向代理,采用阿里的Nacos作为注册中心,中间件涉及到图像识别OCR技术以及简单的自然语言处理,微服务层面主要是Springboot+Spring Cloud+Docker,数据层包括Mysql、MongoDB、Kafka、Redis,持久层采用的是Mybatis-Plus,用到的开发工具有git、maven、junit、xxl-job、Kafka Stream。

二:项目搭建

1.Nacos环境搭建

(1)容器运行环境选择

       刚开始做项目时候我采用的是自己电脑的虚拟机作为Docker容器的运行环境,但是我发现这样做相当占内存,运行容器两三个我的电脑内存使用量就达到90%+了,这样到后面肯定是不定的。所以我就想到了云服务器,由于我是新用户,我选用的服务器时腾讯云的轻量级服务器,可以直接选择集成了Cents+Docker的服务器,一步到位,而且对容器管理起来很方便。

image.gif编辑

       当然要是你的电脑性能够好选择虚拟机作为Docker容器运行环境也是可以的,执行的命令都是一样的。

(2)Nacos安装

首先你要确保你的服务器是安装有Docker的,如果没有安装的可以自行安装一下,至于Docker的了解以及Docker的常用命令可以查看我这篇文章:认识Docker&Docker常用命令解析

在安装好Docker之后,执行如下命令拉取Nacos镜像:

docker pull nacos/nacos-server:1.2.0

image.gif

创建容器:

docker run --env MODE=standalone --name nacos --restart=always  -d -p 8848:8848 nacos/nacos-server:1.2.0

image.gif

这里对相关参数做简要说明:

    • MODE=standalone 单机版
    • --restart=always 开机启动
    • -p 8848:8848 映射端口
    • -d 创建一个守护式容器在后台运行

    完成上述操作之后打开浏览器输入http://你自己服务器ip:8848/nacos,假如出现如下页面说明Nacos安装成功:

    image.gif编辑需要注意一点,假如你用的是云服务器,你需要确保你的服务器防火墙8848端口是对外开放的,这样你才能访问到云服务器中的容器,后续凡是要创建容器映射端口的均需要自己去开放相应端口。

    2.导入初始工程

    (1)项目依赖环境

      • JDK1.8
      • Intellij Idea
      • maven
      • Git

      (2)初始工程结构

      image.gif编辑

        • tbug-headlines:父工程,同一管理项目依赖,继承Springboot
        • tbug-headlines-common:一些通用配置
        • tbug-headlines-feign-api:feign对外的接口
        • tbug-headlines-model:pojo、dto
        • tbug-headlines-utils:通用的工具
        • tbug-headlines-gateway:管理网关工程
        • tbug-headlines-service:管理微服务
        • tbug-headlines-test:一些测试案例

        三:接口工具及前端集成

        1.接口工具

               接口测试工具我选用的是Apifox,当然你也可以选择Postman,萝卜青菜各有所爱,都是傻瓜式安装,这里就不赘述了。当然我感觉一个Knife4j就足够了,什么是Knife4j呢?knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍! 该UI增强包主要包括两大核心功能:文档说明在线调试。

        快速集成

        1.在tbug-headlines-common模块中的pom.xml文件中引入knife4j的依赖,如下:

        <dependency>
             <groupId>com.github.xiaoymin</groupId>
             <artifactId>knife4j-spring-boot-starter</artifactId>
        </dependency>

        image.gif

        2.创建Swagger配置文件  

        package com.my.common.swagger;
        import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
        import org.springframework.context.annotation.Bean;
        import org.springframework.context.annotation.Configuration;
        import org.springframework.context.annotation.Import;
        import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
        import springfox.documentation.builders.ApiInfoBuilder;
        import springfox.documentation.builders.PathSelectors;
        import springfox.documentation.builders.RequestHandlerSelectors;
        import springfox.documentation.service.ApiInfo;
        import springfox.documentation.spi.DocumentationType;
        import springfox.documentation.spring.web.plugins.Docket;
        import springfox.documentation.swagger2.annotations.EnableSwagger2;
        @Configuration
        @EnableSwagger2
        @EnableKnife4j
        @Import(BeanValidatorPluginsConfiguration.class)
        public class Swagger2Configuration {
            @Bean(value = "defaultApi2")
            public Docket defaultApi2() {
                Docket docket=new Docket(DocumentationType.SWAGGER_2)
                        .apiInfo(apiInfo())
                        //分组名称
                        .groupName("1.0")
                        .select()
                        //这里指定Controller扫描包路径
                        .apis(RequestHandlerSelectors.basePackage("com.my"))
                        .paths(PathSelectors.any())
                        .build();
                return docket;
            }
            private ApiInfo apiInfo() {
                return new ApiInfoBuilder()
                        .title("土豆头条API文档")
                        .description("土豆头条API文档")
                        .version("1.0")
                        .build();
            }
        }

        image.gif

        3.添加配置

        在Spring.factories中新增配置

        image.gif编辑

        org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
          com.my.common.swagger.Swagger2Configuration,\

        image.gif

        4.访问

        浏览器输入http://host:port/doc.html

        2.前端集成

        (1)前端项目部署思路

        image.gif编辑

        通过nginx来进行配置,功能如下

          • 通过nginx的反向代理功能访问后台的网关资源,主要流程是当用户的访问路径匹配到app的路径时候nginx就会将该访问进行代理转发,这时候你实际访问的是http://localhost:51601。
          • 通过nginx的静态服务器功能访问前端静态页面,见下面配置,tbug-headlines-app.conf文件中监听的是8801端口,当我们访问8801端口,nginx就会读取root里面的静态资源供我们访问,首先加载的是index.html。

          (2)配置nginx

          ①先安装好nginx,然后将app-web文件放在一个文件夹下待用。

          ②配置nginx.conf文件

          在nginx安装的conf目录下新建一个文件夹headlines.conf,在当前文件夹中新建tug-headlines-app.conf文件,配置文件内容如下:

          upstream  tbug-app-gateway{
              server localhost:51601;
          }
          server {
            listen 8801;
            location / {
              root D:/headlinesPro/headlinesApp-web/;
              index index.html;
            }
            location ~/app/(.*) {
              proxy_pass http://tbug-app-gateway/$1;
              proxy_set_header HOST $host;  # 不改变源请求头的值
              proxy_pass_request_body on;  #开启获取请求体
              proxy_pass_request_headers on;  #开启获取请求头
              proxy_set_header X-Real-IP $remote_addr;   # 记录真实发出请求的客户端IP
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  #记录代理信息
            }
          }

          image.gif

          注意:路径自己设置成自己的。

          ③修改nginx.conf

          把里面注释的内容和静态资源配置相关删除,改成如下配置

          #user  nobody;
          worker_processes  1;
          events {
              worker_connections  1024;
          }
          http {
              include       mime.types;
              default_type  application/octet-stream;
              sendfile        on;
              keepalive_timeout  65;
              include headlines.conf/*.conf;
              server {
                  listen       8888;
                  server_name  localhost;
                  location / {
                      root   html;
                      index  index.html index.htm;
                  }
                  error_page   500 502 503 504  /50x.html;
                  location = /50x.html {
                      root   html;
                  }
              }
          }

          image.gif

          ④启动nginx

            • 重新加载配置文件:nginx -s reload
            • 在nginx安装包中打开cmd,输入nginx或者start nginx启动nginx
            • nginx停止:stop -s nginx

            ⑤测试

            浏览器打开http://localhost:8801若能访问成功说明配置生效。  

            下篇预告:App移动端实现登录功能

            目录
            打赏
            0
            0
            0
            0
            22
            分享
            相关文章
            |
            3月前
            |
            利用Spring Cloud Gateway Predicate优化微服务路由策略
            Spring Cloud Gateway 的路由配置中,`predicates`​(断言)用于定义哪些请求应该匹配特定的路由规则。 断言是Gateway在进行路由时,根据具体的请求信息如请求路径、请求方法、请求参数等进行匹配的规则。当一个请求的信息符合断言设置的条件时,Gateway就会将该请求路由到对应的服务上。
            202 69
            利用Spring Cloud Gateway Predicate优化微服务路由策略
            微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
            本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
            113 17
            智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
            慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
            建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
            智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
            101 7
            微服务SpringCloud分布式事务之Seata
            SpringCloud+SpringCloudAlibaba的Seata实现分布式事务,步骤超详细,附带视频教程
            96 1
            详细介绍SpringBoot启动流程及配置类解析原理
            通过对 Spring Boot 启动流程及配置类解析原理的深入分析,我们可以看到 Spring Boot 在启动时的灵活性和可扩展性。理解这些机制不仅有助于开发者更好地使用 Spring Boot 进行应用开发,还能够在面对问题时,迅速定位和解决问题。希望本文能为您在 Spring Boot 开发过程中提供有效的指导和帮助。
            46 12
            SpringBoot项目打包成war包
            通过上述步骤,我们成功地将一个Spring Boot应用打包成WAR文件,并部署到外部的Tomcat服务器中。这种方式适用于需要与传统Servlet容器集成的场景。
            30 8
            Spring Boot 两种部署到服务器的方式
            本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
            300 17
            Spring Boot 两种部署到服务器的方式
            springboot自动配置原理
            Spring Boot 自动配置原理:通过 `@EnableAutoConfiguration` 开启自动配置,扫描 `META-INF/spring.factories` 下的配置类,省去手动编写配置文件。使用 `@ConditionalXXX` 注解判断配置类是否生效,导入对应的 starter 后自动配置生效。通过 `@EnableConfigurationProperties` 加载配置属性,默认值与配置文件中的值结合使用。总结来说,Spring Boot 通过这些机制简化了开发配置流程,提升了开发效率。
            77 17
            springboot自动配置原理
            SpringBoot集成Shiro权限+Jwt认证
            本文主要描述如何快速基于SpringBoot 2.5.X版本集成Shiro+JWT框架,让大家快速实现无状态登陆和接口权限认证主体框架,具体业务细节未实现,大家按照实际项目补充。
            99 11
            AI助理

            你好,我是AI助理

            可以解答问题、推荐解决方案等