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

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

简介

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


分模块

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

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


相关文章
|
1月前
|
Kubernetes Java 测试技术
无忧微服务:如何实现大流量下新版本的发布自由
本文讨论了微服务上云过程中的稳定性挑战,特别是变更引起的生产故障。阿里云MSE(微服务引擎)提供了一种全链路无损发布方案,旨在消除变更风险,实现白天流量高峰时的安全发布。
|
1月前
|
Java 应用服务中间件 nginx
微服务框架(二十九)Logstash Nginx 日志上报
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Logstash Nginx 日志上报 本系列文章中所使用的框架版本为Spring Boot 2.0.3...
|
1月前
|
JSON Java 数据格式
微服务框架(二十八)Logstash 使用文档
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Logstash 使用文档
|
1月前
|
数据可视化 Dubbo Java
微服务框架(二十五)Kibana 可视化图表及 Timelion 插件
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Kibana 可视化图表及 Timelion 插件使用 本系列文章中所使用的框架版本为Spring Bo...
|
1月前
|
Dubbo Java 应用服务中间件
微服务框架(三十)Logstash Kong 日志上报
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Logstash Kong 日志上报 本系列文章中所使用的框架版本为Spring Boot 2.0.3-...
|
2天前
|
存储 消息中间件 API
“论微服务架构及其应用”写作框架,软考高级,系统架构设计师
论微服务架构及其应用近年来,随着互联网行业的迅猛发展,公司或组织业务的不断扩张,需求的快速变化以及用户量的不断增加,传统的单块(Monolithic)软件架构面临着越来越多的挑战,已逐渐无法适应互联网时代对软件的要求。在这一背景下,微服务架构模式(MicroserviceArchitecturePattern)逐渐流行,它强调将单一业务功能开发成微服务的形式,每个微服务运行在一个进程中;采用HTTP等通用协议和轻量级API实现微服务之间的协作与通信。这些微服务可以使用不同的开发语言以及不同数据存储技术,能够通过自动化部署工具独立发布,并保持最低限制的集中式管理。
|
12天前
|
Cloud Native Java API
Java一分钟之-Micronaut:轻量级微服务框架
【6月更文挑战第16天】Micronaut是面向JVM的微服务框架,以其快速启动、低内存占用著称。文章探讨了配置管理、注解理解和AOT编译的挑战,提供了解决方案,并通过一个简单的HTTP服务示例展示了如何创建控制器和应用启动类。通过克服这些问题,开发者能更好地利用Micronaut构建高效微服务。
38 8
|
7天前
|
开发框架 移动开发 JavaScript
SpringCloud微服务实战——搭建企业级开发框架(四十七):【移动开发】整合uni-app搭建移动端快速开发框架-添加Axios并实现登录功能
在uni-app中,使用axios实现网络请求和登录功能涉及以下几个关键步骤: 1. **安装axios和axios-auth-refresh**: 在项目的`package.json`中添加axios和axios-auth-refresh依赖,可以通过HBuilderX的终端窗口运行`yarn add axios axios-auth-refresh`命令来安装。 2. **配置自定义常量**: 创建`project.config.js`文件,配置全局常量,如API基础URL、TenantId、APP_CLIENT_ID和APP_CLIENT_SECRET等。
|
1月前
|
存储 Java Nacos
谈谈Nacos Stream 作为微服务异步消息框架相关特性
【5月更文挑战第21天】在本篇技术文章中,我们将深入探讨 Nacos Stream 作为微服务异步消息框架的关键特性,包括服务发现与健康监测、动态配置服务的概念、原理以及如何在实际应用中利用这些功能。
42 6
|
1月前
|
监控 Java Nacos
Java微服务框架面试总结(全面,实时更新)
Java微服务框架面试总结(全面,实时更新)

热门文章

最新文章