从零开始搭建博客04----分模块以及搭建微服务框架(Finchley版本)

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 前面几篇我们完成了博客的大部分功能。接下来我们将对博客模块进行拆分,以此巩固所学的微服务知识。

简介

前面几篇我们完成了博客的大部分功能。接下来我们将对博客模块进行拆分,以此巩固所学的微服务知识。


分模块

按照功能模块拆分,我们可以将本博客项目拆分成如下几个模块

1.博客前台(fb_blog)

2.博客后台(fb_admin)

3.通讯模块(fb_im)

4.搜索模块(fb_search)

5.注册中心(fb_server)

6.公共模块(fb_common)

拆分前后对比

拆分前:

6d87fd5f765fb20c9a759f3474ea4fa5_20190215231228288.png

拆分后:

bceb0edea0f2ec00d983fa82097dd36b_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png

拆分步骤

以fb_blog为例,选中原项目,新建module

994f4237655a9e30e05264bc5f0fb724_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png

将模块命名为fb_blog

1604d0f76cb72e29e2088085f9324674_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png

建好fb_blog 模块之后,我们首先修改原项目的pom文件,将公共的依赖放在 fly_blog的pom文件中,将fb_blog 特有的依赖(如:mybatis-plus 等)放在 fb_blog的pom文件中。并且,在 fb_blog 的pom中引入其父模块fly_blog。在fly_blog的pom中添加其子模块

795e482fb19e327d0b63e6a872586337_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png

PS: 需要特别注意的是:需要将fly_blog的打包配置由spring-boot-maven-plugin 改成maven-compiler-plugin,否则会打包失败。

fly_blog 项目pom文件中的打包配置。

<build>
  <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <configuration>
      <source>${java.version}</source>
      <target>${java.version}</target>
      <encoding>UTF-8</encoding>
    </configuration>
    </plugin>
    <!--关闭单元测试-->
    <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
      <skipTests>true</skipTests>
      <useSystemClassLoader>false</useSystemClassLoader>
    </configuration>
    </plugin>
  </plugins>
  </build>

pom 文件处理好之后,由于fb_blog 囊括了博客的主要业务代码,所以我们就将fly_blog项目中的src 文件夹拷贝到fb_blog 项目下。将 FlyBlogApplication类重新命名为FbBlogApplication。然后启动FbBlogApplication。启动成功之后可以访问博客首页

69128e2f5913f68a1dc35610cdaced1d_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png

其他模块类似建立。

搭建微服务框架

注册中心

搭建微服务首先需要新建一个注册中心。创建一个SpringBoot项目,命名为fb_server。创建完成之后在fly_blog 的pom文件中,引入spring-cloud 依赖

以统一spring cloud的版本。同时添加子项目<module>fb_server</module>

<properties>
  <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
  </properties>
  <dependencyManagement>
  <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>${spring-cloud.version}</version>
    <type>pom</type>
    <scope>import</scope>
    </dependency>
  </dependencies>
  </dependencyManagement>

然后在fb_server 的pom 文件中引入eureka的依赖和安全依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <!--给server界面指定账号密码-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

接着在fb_server的application.yml中添加如下配置:

server:
   port: 8761
eureka:
  client:
    register-with-eureka: false
    fetchRegistry: false
    service-url:
       defaultZone: http://admin:admin@localhost:${server.port}/eureka/
spring:
  application:
    name: eureka-server-8761
#    添加管理页面用户名和密码
  security:
    user:
      name: admin
      password: admin

最后,我们在FbServerApplication类中添加@EnableEurekaServer注解,以激活EurekaServer。

@SpringBootApplication
@EnableEurekaServer
public class FbServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(FbServerApplication.class, args);
    }
}

这样注册中心就配置完成,启动FbServerApplication 后,访问

http://localhost:8761/ 输入用户名密码就可以访问到注册中心控制台。

759bb721ef899da76345b44b221ac2c3_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png


网关

添加完注册中心之后,我们还需要添加一个网关服务。这里我们使用Zuul作为网关。同样我们首先新建一个SpringBoot 项目作为fly_blog的子项目,命名为 fb_gateway。


项目新建好之后,我们首先在pom 中添加Zuul的依赖以及Eureka的客户端。

<!--zuul 网关服务-->
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  </dependency>

在application.yml 中指定其端口 8888,以及服务名 fb-gateway,添加路由配置

server:
  port: 8888
spring:
  application:
    name: fb-gateway
eureka:
  client:
    service-url:
      defaultZone: http://admin:admin@localhost:8761/eureka/
#路由规则配置
zuul:
  routes:
     fb-blog:
        path: /**
        serviceId: fb-blog

最后在FbGatewayApplication 类中添加@EnableZuulProxy 以激活Zuul服务,添加@EnableEurekaClient 使其服务可以注册到注册中心。

@SpringBootApplication
@EnableZuulProxy
@EnableEurekaClient
public class FbGatewayApplication {
  public static void main(String[] args) {
  SpringApplication.run(FbGatewayApplication.class, args);
  }
}

启动服务之后,我们可以看到,服务被注册到注册中心

ce12a28e0936977fe31dfea5530063b5_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png

最后,我们在fb_blog子项目上添加EurekaClient。

在pom 文件中添加spring-cloud-starter-netflix-eureka-client依赖

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

在application.yml中指定注册中心地址

eureka:
  client:
    service-url:
       defaultZone: http://admin:admin@localhost:8761/eureka/

在FbBlogApplication中添加@EnableEurekaClient注解。

@Slf4j
@SpringBootApplication
@MapperScan(value = "com.fly.dao")
@EnableEurekaClient
public class FbBlogApplication {
  public static void main(String[] args) {
  SpringApplication.run(FbBlogApplication.class, args);
  log.info("------>系统启动成功");
  }
}

启动 fb-blog服务之后我们可以看到,服务被注册到注册中心。

ac08e5333da5f214790dbce8ebca9103_20190216110422713.png

其余子项目注册的操作与fb_blog 子项目类似。

参考代码

https://github.com/XWxiaowei/FlyBlog/tree/v6-mutilModel


相关文章
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
147 3
|
20天前
|
分布式计算 Java 持续交付
如何选择合适的微服务框架
如何选择合适的微服务框架
24 0
|
2月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
3月前
|
Dubbo Java 应用服务中间件
微服务框架Dubbo环境部署实战
微服务框架Dubbo环境部署的实战指南,涵盖了Dubbo的概述、服务部署、以及Dubbo web管理页面的部署,旨在指导读者如何搭建和使用Dubbo框架。
262 17
微服务框架Dubbo环境部署实战
|
3月前
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
91 5
|
3月前
|
存储 Java Maven
从零到微服务专家:用Micronaut框架轻松构建未来架构
【9月更文挑战第5天】在现代软件开发中,微服务架构因提升应用的可伸缩性和灵活性而广受欢迎。Micronaut 是一个轻量级的 Java 框架,适合构建微服务。本文介绍如何从零开始使用 Micronaut 搭建微服务架构,包括设置开发环境、创建 Maven 项目并添加 Micronaut 依赖,编写主类启动应用,以及添加控制器处理 HTTP 请求。通过示例代码展示如何实现简单的 “Hello, World!” 功能,并介绍如何通过添加更多依赖来扩展应用功能,如数据访问、验证和安全性等。Micronaut 的强大和灵活性使你能够快速构建复杂的微服务系统。
111 5
|
3月前
|
缓存 Java 应用服务中间件
随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架
【9月更文挑战第6天】随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架。Nginx作为高性能的HTTP反向代理服务器,常用于前端负载均衡,提升应用的可用性和响应速度。本文详细介绍如何通过合理配置实现Spring Boot与Nginx的高效协同工作,包括负载均衡策略、静态资源缓存、数据压缩传输及Spring Boot内部优化(如线程池配置、缓存策略等)。通过这些方法,开发者可以显著提升系统的整体性能,打造高性能、高可用的Web应用。
77 2
|
3月前
|
Cloud Native 安全 Java
Micronaut对决Spring Boot:谁是微服务领域的王者?揭秘两者优劣,选对框架至关重要!
【9月更文挑战第5天】近年来,微服务架构备受关注,Micronaut和Spring Boot成为热门选择。Micronaut由OCI开发,基于注解的依赖注入,内置多种特性,轻量级且启动迅速;Spring Boot则简化了Spring应用开发,拥有丰富的生态支持。选择框架需考虑项目需求、团队经验、性能要求及社区支持等因素。希望本文能帮助您选择合适的微服务框架,助力您的软件开发项目取得成功!
191 2
|
4月前
|
Cloud Native JavaScript API
一文读懂云原生 go-zero 微服务框架
一文读懂云原生 go-zero 微服务框架
|
4月前
|
开发框架 Dubbo 应用服务中间件
微服务开发框架-----Apache Dubbo
这篇文章介绍了Apache Dubbo微服务开发框架,它提供RPC通信和微服务治理能力,支持服务发现、负载均衡和流量治理等功能,并强调了Dubbo在微服务规模化实践和企业级治理方面的优势。
微服务开发框架-----Apache Dubbo