微服务圣经1:零基础搭建一套SpringCloud微服务脚手架(SpringCloud+Dubbo+Docker+Jenkins) 快讯

来源:博客园 2023-05-18 17:01:04

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版为您奉上珍贵的学习资源 :

免费赠送 :《尼恩Java面试宝典》持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备免费赠送 :《尼恩技术圣经+高并发系列PDF》,帮你 实现技术自由,完成职业升级, 薪酬猛涨!加尼恩免费领免费赠送 经典图书:《Java高并发核心编程(卷1)加强版》面试必备 + 大厂必备 +涨薪必备 加尼恩免费领免费赠送 经典图书:《Java高并发核心编程(卷2)加强版》面试必备 + 大厂必备 +涨薪必备 加尼恩免费领免费赠送 经典图书:《Java高并发核心编程(卷3)加强版》面试必备 + 大厂必备 +涨薪必备 加尼恩免费领

免费赠送 资源宝库: Java 必备 百度网盘资源大合集 价值>10000元 加尼恩领取


(资料图片仅供参考)

零基础 搭建一套SpringCloud微服务脚手架(SpringCloud+ Dubbo + Docker + Jenkins)

说在前面

在40岁老架构师尼恩的读者社群(50+)中,大量的小伙伴是架构师、高级开发,大家都有丰富的开发、架构经验。

在开发过程中,一般情况下,大家都是用现有的开发框架。

导致的一个严重问题是:很少有小伙伴能从0开始 搭建一套SpringCloud微服务脚手架(SpringCloud+ Dubbo + Docker + Jenkins)。然而,零基础 搭建一套SpringCloud微服务脚手架(SpringCloud+ Dubbo + Docker + Jenkins),这个实操对大家来说,至关重要

尼恩一直在找一个契机,给大家梳理一个《零基础 搭建一套SpringCloud微服务脚手架》 博客。提升大家的实操能力,动手能力。

直到今天、契机终于来了。

从2020年开始,尼恩一直在写一本 微服务架构和开发领域的 至尊宝典 《SpringCloud 学习圣经》,全量的博客加起来全网阅读量在100W+。在这么大访问量的激励下,尼恩一直在对这本 《SpringCloud 学习圣经》进行迭代。

而且由于尼恩一人有精力有限,在尼恩的《技术自由圈》 高并发研究社群中,不断吸取有志之士的加入。咱们社群中一位资深的、华中科技大学硕士、有着10年开发和架构经验、并且管理一个20人团队的架构师 Andy加入了咱们技术迭代、技术研究的队伍。

他来给大家提供了一个优秀的微服务 基础架构实操案例,《零基础 搭建一套SpringCloud微服务脚手架》。

这,就是本文。当然,本文也收入了咱们的 10W字 至尊宝典 《SpringCloud alibaba 学习圣经》最新升级版, 《SpringCloud alibaba 学习圣经》宝典从此升级到了V3版本。

最新的 PDF 文档,可以通过 公众号 技术自由圈领取。

本文目录

目录

1、本文学习内容和目标

微服务架构通过将复杂的单体应用拆分为一组小型、自治的服务,为构建灵活、可扩展的应用提供了一种新的方式。

微服务框架具有以下优势:

在构建微服务系统时,选择一个适合的框架可以加速开发过程并提高系统的稳定性和可维护性。

本文旨在通过手把手教程,引导读者从零开始搭建一套Java微服务框架。

我们将使用Spring Cloud作为基础框架,并结合Nacos作为服务注册中心,Spring Cloud Gateway作为API网关,以及Feign作为服务之间的通信方式。

此外,我们还将探讨如何使用Docker容器化和Jenkins进行持续集成和部署,以构建一个完整的微服务架构。

通过本文的学习,读者将掌握以下技能:

在开始构建自己的Java微服务框架之前,让我们先了解下设计微服务框架要遵守的一些基本原则。

2、设计微服务框架的基本原则

在设计微服务框架时,我们需要遵循一些基本原则,以确保系统的可扩展性、可维护性和可靠性。以下是设计微服务框架的基本原则:

1.解耦和独立性:

微服务架构的核心概念之一是服务的解耦和独立性。每个微服务应该具有清晰的边界,它们可以独立开发、部署和扩展。在设计框架时,要保证各个微服务之间的解耦,使其可以独立演化而不会对其他服务产生过多的影响。

2.可伸缩性和容错性:

微服务架构的另一个重要目标是实现可伸缩性和容错性。框架应该能够根据负载的增加或减少,自动扩展或缩减服务实例的数量。同时,要考虑到服务的容错能力,当某个服务出现故障时,框架应该能够自动将请求路由到其他可用的服务实例上。

3.简化开发和部署过程:

微服务框架应该能够简化开发和部署的过程。提供一套标准化的开发模式和工具链,使开发人员可以快速构建和部署微服务。自动化的构建、测试和部署流程能够提高开发效率,减少人为错误。

4.兼容性和可扩展性:

框架应该具备良好的兼容性和可扩展性,能够与其他技术和组件进行集成。例如,能够无缝地与现有的数据存储、消息队列、认证授权系统等进行整合。此外,框架本身也应该是可扩展的,可以根据需求灵活地添加新的功能模块。

设计微服务框架时,需要综合考虑这些原则,并根据实际情况进行权衡和取舍。合理的框架设计能够提高开发效率、降低系统复杂度,并为微服务架构的可持续发展打下坚实的基础。在后续的章节中,我们将深入探讨如何应用这些原则,结合Spring Cloud、Nacos、Spring Cloud Gateway、Feign等组件,构建一套高效可靠的Java微服务框架。

3、搭建基础设施

在搭建微服务框架之前,我们需要配置一些基础设施,包括Java开发环境、构建工具、版本控制和集成开发环境(IDE)。下面是一些常用的工具和配置:

1.安装Java开发环境

工具介绍:

首先,确保你的系统上已经安装了Java开发工具包,Java开发环境包括Java Development Kit(JDK),它是开发和运行Java应用程序所必需的工具包。

你可以从Oracle官方网站或OpenJDK项目中下载并安装最新版本的JDK。

安装完成后,设置JAVA_HOME环境变量,指向JDK的安装目录。

下载地址:

安装方式:

  1. 根据你的操作系统选择合适的Java发行版。
  2. 下载安装程序并运行。
  3. 按照安装向导的指引完成安装。
  4. 配置JAVA_HOME环境变量:
    • Windows:在系统变量中新建一个名为JAVA_HOME的变量,值为JDK的安装路径(例如:D:\program\Java\jdk1.8.0_202)。
    • macOS/Linux:在终端中编辑~/.bashrc或~/.bash_profile文件,并添加以下行:export JAVA_HOME=/path/to/jdk。然后运行source ~/.bashrcsource ~/.bash_profile命令使配置生效。

操作示例:

  1. 打开命令行终端。
  2. 执行以下命令验证Java安装是否成功:
java -version
  1. 如果成功安装,会显示Java版本信息。

2.安装和配置Maven

工具介绍:

Apache Maven是一款流行的构建工具,用于管理Java项目的依赖和构建过程。你可以从Apache Maven官方网站下载Maven,并按照官方文档的指引进行安装和配置。配置完成后,确保你可以在命令行中使用mvn命令。

下载地址:

Maven官方网站:https://maven.apache.org/download.cgi

安装方式:

  1. 下载适用于你的操作系统的Maven二进制发行版(ZIP或tar.gz格式)。
  2. 解压下载的文件到你选择的目录。
  3. 配置MAVEN_HOME环境变量:
    • Windows:在系统变量中新建一个名为MAVEN_HOME的变量,值为Maven的安装路径(例如:C:\apache-maven-3.8.3)。
    • macOS/Linux:在终端中编辑~/.bashrc或~/.bash_profile文件,并添加以下行:export MAVEN_HOME=/path/to/maven。然后运行source ~/.bashrcsource ~/.bash_profile命令使配置生效。
  4. 将Maven的bin目录添加到系统的PATH环境变量中。

操作示例:

  1. 打开命令行终端。
  2. 执行以下命令验证Maven安装是否成功:
mvn -v
  1. 如果成功安装,会显示Maven版本信息。

3.安装和配置Git

工具介绍:

Git是一款分布式版本控制系统,常用于协作开发和代码管理。你可以从Git官方网站下载并安装Git客户端。安装完成后,通过命令行验证Git是否正确安装,并设置你的用户名和邮箱。

下载地址:

Git官方网站:https://git-scm.com/downloads

安装方式:

  1. 下载适用于你的操作系统的Git安装程序。
  2. 运行安装程序并按照安装向导的指引进行安装。
  3. 在安装过程中选择合适的选项,例如选择安装位置和默认编辑器。

操作示例:

  1. 打开命令行终端。
  2. 配置用户名和邮箱:
git config --global user.name "Your Name"git config --global user.email "your.email@example.com"
  1. 执行以下命令验证Git安装是否成功:
git --version
  1. 如果成功安装,会显示Git版本信息。

4.安装集成开发环境(IDE)

工具介绍:

推荐使用IntelliJ IDEA作为开发微服务的集成开发环境,IntelliJ IDEA是一款强大的Java集成开发环境,提供了丰富的功能和工具来开发Java应用程序。你可以从JetBrains官方网站下载并安装IntelliJ IDEA的社区版或旗舰版,一般社区版能满足基本的开发需要。安装完成后,打开IntelliJ IDEA,并根据需要进行相应的配置,例如选择主题、安装必要的插件等。

下载地址:

IntelliJ IDEA官方网站:https://www.jetbrains.com/idea/download/

安装方式:

  1. 下载适用于你的操作系统的IntelliJ IDEA安装程序。
  2. 运行安装程序并按照安装向导的指引进行安装。
  3. 在安装过程中选择合适的选项,例如选择安装位置、启动器图标等。

操作示例:

  1. 打开安装后的IntelliJ IDEA。
  2. 配置IntelliJ IDEA的插件和主题等个性化设置。

5.创建项目和配置构建工具

  1. 打开IntelliJ IDEA。

  2. 在欢迎界面中选择"Create New Project"或点击菜单栏的"File" -> "New" -> "Project"。

  3. 使用 Spring Initializr 快速生成项目结构,

    输入名称,存储位置,jdk等信息,点击下一步

    选择spring boot版本,选择所需依赖,点击创建

    项目创建后,可以在pom.xml文件里继续配置依赖和构件项。

    pom.xml示例如下:

            org.springframework.boot        spring-boot-starter-data-jpa                org.springframework.boot        spring-boot-starter-web        2.7.11                com.h2database        h2        runtime                org.projectlombok        lombok        true                org.springframework.boot        spring-boot-starter-test        test                            org.springframework.cloud            spring-cloud-dependencies            ${spring-cloud.version}            pom            import                            com.alibaba.cloud            spring-cloud-alibaba-dependencies            2021.1            pom            import                ${project.artifactId}                        org.apache.maven.plugins            maven-resources-plugin            3.0.1                            UTF-8                                                            attach-sources                                                                org.apache.maven.plugins            maven-surefire-plugin            3.0.0-M5                            methods                10                -Dfile.encoding=UTF-8                true                                        org.apache.maven.plugins            maven-assembly-plugin            3.3.0                                                jar-with-dependencies                                                                            make-assembly                    package                                            single                                                                                    org.springframework.boot            spring-boot-maven-plugin                                                                        repackage                                                                            true                -Dfile.encoding=UTF-8                true                exec                        

以上是安装和配置Java、Maven、Git和IntelliJ IDEA的详细步骤。

请按照这些步骤进行操作,确保这些工具在你的开发环境中正确安装和配置。

接下来我们就可以继续进行下一步,开始搭建Java微服务框架。

4、定义微服务接口和协议

在设计微服务框架时,定义微服务接口和协议是非常重要的一步。

接下来以学生信息为例,结合JPA(Java Persistence API),提供相关的增删改查的代码示例。

JPA(Java Persistence API)是Java EE的一部分,是一种用于对象持久化的规范。

它提供了一种以面向对象的方式进行数据库操作的方式,通过简化数据库访问和数据对象之间的映射,提高了开发效率。

JPA使用注解来描述实体类和数据库表之间的映射关系,可以轻松地进行增删改查等常见数据库操作。它支持各种关系型数据库,并提供了事务管理、缓存等功能。

在我们的示例中,我们使用JPA来定义学生实体类,并通过注解来映射学生信息表的结构。这样,我们可以通过简单的代码操作来实现对学生信息的持久化和查询。

1.引入JPA依赖

在开始之前,我们需要在项目的pom.xml文件中添加JPA的依赖。JPA是Java Persistence API的缩写,它是Java EE中持久化操作的标准规范,用于简化数据库操作和实体对象的映射关系。

请在项目的pom.xml文件中添加以下依赖:

                javax.persistence        javax.persistence-api        2.2                    org.hibernate        hibernate-core        5.6.0.Final                    com.h2database        h2        1.4.200                        org.springframework.boot        spring-boot-starter-data-jpa        

这些依赖将启用JPA和Hibernate作为我们的持久化框架,并使用H2数据库作为示例数据库。你可以根据自己的需求替换为其他数据库。

2.示例表结构

在我们的示例中,我们将使用一个名为"student"的表来存储学生信息。该表包含三个列:id(主键),name和age。

请确保在你的数据库中创建了名为"student"的表,以及相应的列。以下是表的DDL示例:

CREATE TABLE student (  id INT PRIMARY KEY,  name VARCHAR(50),  age INT);

3.application.yml配置

在项目中,我们需要配置application.yml文件来连接数据库和配置JPA。

请在src/main/resources目录下创建一个名为application.yml的文件,并添加以下内容:

server:  port: 8180  servlet:    context-path: /spring:  application:    name: students-service  datasource:    url: jdbc:h2:mem:test    username: sa    password: password    driver-class-name: org.h2.Driver  jpa:    hibernate:      ddl-auto: create    show-sql: true

以上配置使用了H2内存数据库,并使用了默认的sa用户和password密码进行连接。同时,我们启用了Hibernate的DDL自动更新功能,并配置JPA显示SQL语句。

4.定义学生实体类

首先,定义一个学生实体类,用于表示学生的信息。可以包含学生的ID、姓名、年龄等属性。

import lombok.Data;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;@Entity@Datapublic class Student {    @Id    @GeneratedValue(strategy = GenerationType.AUTO)    private Long id;    private String name;    private int age;}

5.定义学生信息的持久化接口

使用JPA来管理学生信息的持久化操作。定义一个学生信息的持久化接口,提供增删改查等方法。

import org.springframework.data.jpa.repository.JpaRepository;public interface StudentRepository extends JpaRepository {    // 可以添加自定义的查询方法,如根据姓名查询学生信息等}

6.定义学生信息的控制器接口

在微服务框架中,通过HTTP协议暴露学生信息的API接口供外部调用。定义一个学生信息的控制器接口,提供增删改查等API方法。

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import java.util.List;@RestController@RequestMapping("/students")public class StudentController {    @Autowired    private StudentRepository studentRepository;    @GetMapping    public List getAllStudents() {        return studentRepository.findAll();    }    @PostMapping    public Student createStudent(@RequestBody Student student) {        return studentRepository.save(student);    }    @GetMapping("/{id}")    public Student getStudentById(@PathVariable("id") Long id) {        return studentRepository.findById(id).orElse(null);    }    @PutMapping("/{id}")    public Student updateStudent(@PathVariable("id") Long id, @RequestBody Student updatedStudent) {        Student existingStudent = studentRepository.findById(id).orElse(null);        if (existingStudent != null) {            existingStudent.setName(updatedStudent.getName());            existingStudent.setAge(updatedStudent.getAge());            return studentRepository.save(existingStudent);        }        return null;    }    @DeleteMapping("/{id}")    public void deleteStudent(@PathVariable("id") Long id) {        studentRepository.deleteById(id);    }}

通过以上代码示例,我们定义了一个学生信息的实体类、学生信息的持久化接口和学生信息的控制器接口。

这样就可以通过API来进行学生信息的增删改查操作。

在接下来的步骤中,我们将结合Spring Cloud、Nacos、Spring Cloud Gateway、Feign、Docker和Jenkins等组件,搭建一个完整的Java微服务框架。

5、实现服务注册与发现

服务注册与发现是微服务架构中非常重要的一部分,它允许我们动态地注册和发现微服务实例,从而实现微服务之间的通信。在这一节中,我们将详细介绍服务注册与发现的工作原理和实现方式。

  1. 服务注册

服务注册是指将微服务实例的信息(例如主机名、端口号、服务名称等)注册到服务注册中心,使得其他服务可以发现和调用它。下面是服务注册的步骤:

  1. 服务发现

服务发现是指在需要调用其他微服务时,通过服务注册中心来获取可用的微服务实例信息。下面是服务发现的步骤:

  1. 实现方式

服务注册与发现可以采用不同的实现方式,常见的有以下几种:

在实现服务注册与发现时,我们通常会使用专门的框架和工具来简化开发和管理。例如,结合Spring Cloud框架和Nacos注册中心,我们可以通过使用@EnableDiscoveryClient注解启用服务注册与发现功能,并通过配置中心来配置服务注册中心的地址。然后,我们可以通过注入DiscoveryClient来获取已注册的微服务实例列表,并根据需要进行调用。

通过服务注册与发现,我们可以实现微服务架构的弹性、可扩展和高可用性,使得微服务之间的通信更加灵活和可靠。

接下来,我们将使用Nacos作为服务注册与发现的中间件,并进行安装和配置。

Nacos(Naming and Configuration Service)是一个开源的服务注册与发现中间件,由阿里巴巴集团开发和维护。它提供了服务注册、发现、配置管理和动态配置更新的功能,可以帮助我们构建弹性可伸缩的微服务架构。

Nacos支持主流的服务注册和发现协议,如Eureka、Consul和Nacos自身的服务注册协议。它还提供了灵活的配置管理功能,支持动态配置刷新,可以帮助我们实现微服务的配置中心。

1.安装和配置Nacos

首先,我们需要安装Nacos Server。请按照以下步骤进行操作:

步骤 1:下载Nacos Server

你可以从Nacos的官方GitHub仓库下载最新版本的Nacos Server。

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

步骤 2:解压Nacos Server

将下载的Nacos压缩文件解压到你选择的目录中。

步骤 3:启动Nacos Server

进入解压后的Nacos目录,执行以下命令启动Nacos Server:

PS D:\program\nacos\bin> .\startup.cmd -m standalone"nacos is starting with standalone"         ,--.       ,--."|   ,--,:  : |                                           Nacos 2.2.2,`--."`|  " :                       ,---.               Running in stand alone mode, All function modules|   :  :  | |                      "   ,"\   .--.--.    Port: 8848:   |   \ | :  ,--.--.     ,---.  /   /   | /  /    "   Pid: 16948|   : "  "; | /       \   /     \.   ; ,. :|  :  /`./   Console: http://10.23.48.43:8848/nacos/index.html"   " ;.    ;.--.  .-. | /    / ""   | |: :|  :  ;_|   | | \   | \__\/: . ..    " / "   | .; : \  \    `.      https://nacos.io"   : |  ; ." ," .--.; |"   ; :__|   :    |  `----.   \|   | "`--"  /  /  ,.  |"   | "."|\   \  /  /  /`--"  /"   : |     ;  :   ."   \   :    : `----"  "--".     /;   |."     |  ,     .-./\   \  /            `--"---""---"        `--`---"     `----"2023-05-17 11:20:55,045 INFO Tomcat initialized with port(s): 8848 (http)

Nacos Server将在默认端口(8848)启动,并以单机模式运行。

步骤 4:访问Nacos控制台

在浏览器中访问以下地址,进入Nacos控制台:

http://10.23.48.43:8848/nacos

2.引入Nacos相关依赖

在开始之前,我们需要在项目的pom.xml文件中添加Nacos相关依赖。请添加以下依赖:

xmlCopy code                        com.alibaba.cloud            spring-cloud-starter-alibaba-nacos-discovery            2021.1                                    org.springframework.cloud            spring-cloud-starter-bootstrap                

以上依赖将引入Nacos服务注册与发现的功能。

3.系统配置变更

现在,我们需要进行一些系统配置变更,以便我们的微服务可以与Nacos进行交互。请在bootstrap.yml文件中添加以下配置:

spring:  cloud:    nacos:      discovery:        server-addr: 10.23.48.43:8848

以上配置指定了Nacos Server的地址和端口。

4.示例代码

接下来,我们将编写示例代码,实现服务注册与发现的功能。请添加以下代码到Spring Boot应用程序中的启动类上方:

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient@SpringBootApplicationpublic class StudentsServiceApplication {    public static void main(String[] args) {        SpringApplication.run(StudentsServiceApplication.class, args);    }}

在以上代码中,我们使用了@EnableDiscoveryClient注解来启用服务注册与发现功能。

现在,你的微服务将能够与Nacos进行通信,实现服务的注册和发现。

在接下来的步骤中,我们将继续编写代码来实现其他功能,如服务网关、服务间通信等。

6、实现服务调用和负载均衡

在微服务架构中,服务之间的调用是非常常见的场景。为了简化服务调用的过程并实现负载均衡,我们可以使用Feign与Nacos结合来实现。本节将详细介绍服务调用的概念以及如何使用Feign与Nacos来实现服务调用和负载均衡。

  1. 服务调用的概念

服务调用是指一个微服务向另一个微服务发起请求,获取所需的数据或执行特定的操作。在微服务架构中,服务调用可以跨越多个微服务实例,因此需要一种机制来管理和处理服务之间的通信。

  1. 使用Feign与Nacos实现服务调用和负载均衡

下面是使用Feign与Nacos结合实现服务调用和负载均衡的步骤:

在项目的pom.xml文件中添加Feign相关的依赖:

                org.springframework.cloud        spring-cloud-starter-openfeign                org.springframework.cloud        spring-cloud-starter-loadbalancer              

在启动类上添加@EnableFeignClients注解,启用Feign客户端:

import org.springframework.cloud.openfeign.EnableFeignClients;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableDiscoveryClient@EnableFeignClients@SpringBootApplicationpublic class StudentsServiceApplication {    public static void main(String[] args) {        SpringApplication.run(StudentsServiceApplication.class, args);    }}

创建一个Feign客户端接口,使用@FeignClient注解指定要调用的微服务名称和相关配置:

import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;@FeignClient(name = "students-service")public interface StudentFeignClient {    @GetMapping("/students/{id}")    Student getStudentById(@PathVariable("id") Long id);}

通过注入Feign客户端接口,并调用相应的方法来进行服务调用:

import com.crazymaker.students.entity.Student;import com.crazymaker.students.feign.StudentFeignClient;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class StudentService {    private StudentFeignClient feignClient;    @Autowired    public StudentService(StudentFeignClient feignClient) {        this.feignClient = feignClient;    }    public Student getStudentById(Long id) {        return feignClient.getStudentById(id);    }}

在上面的示例中,通过serviceClient.getStudentById()来调用目标微服务的接口。

通过以上步骤,我们可以使用Feign与Nacos结合来实现服务调用和负载均衡。Feign将负责处理底层的HTTP通信细节,而Nacos将负责维护微服务实例列表和选择合适的实例进行调用,从而实现了服务调用和负载均衡的功能。

7、实现服务监控和日志管理

服务监控是指对微服务架构中的各个服务进行实时监控和管理,以确保系统的稳定性和可靠性。通过监控服务的运行状态、性能指标和异常情况,可以及时发现问题并采取相应措施,以提高系统的可用性和响应能力。

日志管理是指对微服务架构中生成的日志进行收集、存储、分析和展示的过程。日志是系统运行的重要记录,通过对日志进行管理和分析,可以了解系统的运行状况、故障信息和异常情况,以便于问题排查和系统优化。

服务监控和日志管理对于微服务架构具有重要的必要性和优势:

下面我们通过分别搭建和配置Spring Boot Admin 和 ELK 服务来实现性能监控和日志管理:

1.Spring Boot Admin 服务监控

Spring Boot Admin是一个开源的服务监控和管理工具,它提供了一个Web界面,用于监控和管理基于Spring Boot的应用程序。通过Spring Boot Admin,可以实时监控和管理应用程序的运行状态、健康状况、性能指标等,并提供了强大的可视化和告警功能。

安装和配置Spring Boot Admin的步骤如下:

  1. 按上文步骤新建一个Spring Boot项目, 添加Spring Boot Admin的依赖

    • 在Spring Boot应用程序的pom.xml文件中添加Spring Boot Admin的依赖:
    de.codecentric    spring-boot-admin-starter-server    3.0.3
  1. 配置bootstrap.ymlapplication.yml文件
spring:  cloud:    nacos:      discovery:        server-addr: 10.23.48.43:8848
server:  port: 8181  servlet:    context-path: /spring:  application:    name: admin-service
  1. 启动Spring Boot Admin Server
@EnableDiscoveryClient@SpringBootApplication@EnableAdminServerpublic class AdminServiceApplication {    public static void main(String[] args) {        SpringApplication.run(AdminServiceApplication.class, args);    }}

启动应用程序, 点击 http://10.23.48.43:8181/applications 访问监控页面

  1. 微服务项目配置Spring Boot Admin

1)pom.xml 里添加admin依赖

    de.codecentric    spring-boot-admin-starter-server    3.0.3    org.springframework.boot    spring-boot-starter-actuator

2)在Spring Boot应用程序的配置文件(如application.yml)中,配置Spring Boot Admin Server的相关信息:

spring:  boot:    admin:      client:        url: http://10.23.48.43:8181 # Spring Boot Admin Server的地址   management:  endpoints:    web:      exposure:        include: "*"  endpoint:    health:      show-details: ALWAYS        
  1. 重新启动应用程序

重新启动应用程序, 它将自动注册到Spring Boot Admin Server。

通过以上配置,我们可以实现Spring Boot Admin与Nacos的结合,使得应用程序能够通过Spring Boot Admin进行监控和管理。

2.ELK 日志监控

ELK是一个流行的日志管理和分析解决方案,由Elasticsearch、Logstash和Kibana三个项目组成,常用于日志收集和分析。

日志主要包括系统日志、应用程序日志和安全日志。运维和开发人员可以通过日志了解服务器运行过程中发生的错误及错误产生的原因。定期分析日志可以了解服务器的运行情况、性能、安全性等。

每台服务器或应用程序都会产生日志,如果每次都登录这些服务器查看日志并分析会耗费大量时间,而且效率低下,这时我们就需要思考如何将日志汇总起来统一查看。日志集中管理之后又会产生新的问题,日志量太大,日志统计和检索又成为新的问题,如何能实现高性能的检索统计呢?ELK能完美解决我们的问题。

关于ELK的原理和实操,强烈推荐:

ELK日志平台(elasticsearch +logstash+kibana)原理和实操(史上最全):

https://www.cnblogs.com/crazymakercircle/p/16732034.html

ELK安装

本文这里为了方便演示,仅演示利用docker容器在本机部署ELK,在实际生产环境下,推荐使用多台linux服务器,安装ELK集群。

首先新建elk目录,在目录下新建相关文件夹:

docker-compose.yml内容如下:

version: "3.2"services:    elasticsearch:        image: elasticsearch:7.17.4        volumes:            - ./es/plugins:/usr/share/elasticsearch/plugins #插件文件挂载            - ./es/data:/usr/share/elasticsearch/data #数据文件挂载            - ./es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml #配置        ports:            - "9200:9200"            - "9300:9300"        container_name: elasticsearch        environment:            - "cluster.name=elasticsearch" #设置集群名称为elasticsearch            - "discovery.type=single-node" #以单一节点模式启动            - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" #设置使用jvm内存大小        networks:            - elk    logstash:        image: logstash:7.17.4        container_name: logstash        volumes:            - "./logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf"        ports:            - "5044:5044"            - "50000:50000/tcp"            - "50000:5000/udp"            - "9600:9600"        environment:            LS_JAVA_OPTS: -Xms1024m -Xmx1024m            TZ: Asia/Shanghai            MONITORING_ENABLED: false        links:            - elasticsearch:es #可以用es这个域名访问elasticsearch服务        networks:            - elk        depends_on:            - elasticsearch    kibana:        image: kibana:7.17.4        container_name: kibana        volumes:            - ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml        ports:            - "5601:5601"        links:            - elasticsearch:es #可以用es这个域名访问elasticsearch服务        environment:            - ELASTICSEARCH_URL=http://elasticsearch:9200 #设置访问elasticsearch的地址            - "elasticsearch.hosts=http://es:9200" #设置访问elasticsearch的地址            - I18N_LOCALE=zh-CN        networks:            - elk        depends_on:            - elasticsearchnetworks:    elk:        name: elk        driver:            bridge           

在es目录下新建 data、plugins 文件夹, 以及elasticsearch.yml文件,内容如下:

cluster.name: elasticsearch # 集群名称node.name: node-1 # 节点名称network.host: 0.0.0.0 # 监听地址http.port: 9200 # 监听端口http.cors.enabled: truehttp.cors.allow-origin: "*"

在logstash目录下新建logstash.conf文件, 内容如下:

input {  tcp {    port => 5000    codec => json  }}filter {  # 进行过滤和转换规则的配置}output {  elasticsearch {    hosts => ["es:9200"] # Elasticsearch的地址    index => "my-application-%{+YYYY.MM.dd}" # 索引名称,可按日期划分  }}

在kibana目录下,创建config文件夹,并新建kibana.yml文件,内容如下:

# Default Kibana configuration for docker targetserver.host: "0.0.0.0"server.shutdownTimeout: "5s"elasticsearch.hosts: ["http://elasticsearch:9200"]monitoring.ui.container.elasticsearch.enabled: trueserver.port: 5601 # 监听端口

启动:

docker-compose -f docker-compose.yml up -d

微服务应用接入

            10.23.48.43:5000                            
    net.logstash.logback    logstash-logback-encoder    7.2

通过以上步骤,我们可以搭建起ELK Stack,并将应用系统接入到ELK Stack中进行日志的收集、存储、分析和可视化展示。这样,我们可以方便地对日志进行搜索、过滤、聚合和可视化,帮助我们快速定位问题、监控系统的运行状况,并提供数据支持进行性能优化和故障排查。

通过结合这些开源中间件,我们可以实现对微服务的全面监控和日志管理,帮助我们及时发现问题、优化性能,并提供可视化的展示和分析工具,从而提升微服务架构的可靠性和稳定性。

8、保护服务安全

在微服务架构中,服务安全保护是至关重要的,它们可以保护微服务免受未经授权的访问,并确保只有经过身份验证和授权的用户才能访问受保护的资源。

Spring Cloud Gateway是一个基于Spring Framework 5、Project Reactor和Spring Boot 2构建的轻量级网关服务,用于构建和管理微服务架构中的API网关。

API网关在微服务架构中安全方面扮演着重要的角色,它作为系统的入口,它可以提供以下安全功能:

  1. 访问控制:API网关可以对传入的请求进行访问控制,确保只有经过身份验证和授权的用户能够访问受保护的资源。它可以验证请求中的身份验证令牌或证书,并根据配置的权限规则进行访问控制。

  2. 安全认证和授权:API网关可以与认证和授权中间件(如OAuth2)集成,实现对微服务的安全认证和授权。它可以验证请求中的访问令牌,并将认证和授权信息传递给后端的微服务,以确保只有具有足够权限的用户能够访问特定的资源。

  3. 保护后端服务:API网关可以隐藏后端的微服务架构,只暴露必要的接口给外部客户端,从而降低了被恶意攻击的风险。它可以阻止未经授权的请求直接访问后端服务,并提供请求的限流和缓冲功能,以保护后端服务免受过载或恶意攻击。

  4. 安全审计和日志记录:API网关可以记录请求和响应的详细信息,包括访问时间、来源IP、请求内容等,以便进行安全审计和故障排查。它可以将日志记录到集中的日志管理系统中,方便监控和分析。

  5. 攻击防护:API网关可以实施一些安全防护措施,如防止跨站脚本攻击(XSS)、跨站请求伪造(CSRF)和注入攻击等。它可以对传入的请求进行验证和过滤,以识别和阻止潜在的恶意行为。

综上所述,API网关在安全方面具有重要的作用。它可以提供访问控制、安全认证和授权、保护后端服务、安全审计和日志记录以及攻击防护等功能,帮助确保微服务架构的安全性和可靠性。

通过合理配置和使用适当的安全机制,API网关可以成为微服务架构中的首道防线,保护系统免受潜在的安全威胁。

下面是搭建和配置Spring Cloud Gateway的步骤示例:

首先创建一个Spring Boot应用, 在项目的pom.xml文件中添加相应的依赖配置。

                org.springframework.cloud        spring-cloud-starter-gateway                    org.springframework.cloud        spring-cloud-starter-alibaba-nacos-discovery    

接下来,在application.yml文件中配置Spring Cloud Gateway和Nacos的相关信息。

# Spring Cloud Gateway配置server:  port: 8182spring:  cloud:    gateway:      discovery:        locator:          enabled: true          lower-case-service-id: true# Nacos配置spring:  cloud:    nacos:      discovery:        server-addr: ${nacos.server-addr} # Nacos Server地址# 网关路由配置spring:  cloud:    gateway:      routes:        - id: sample-service # 路由ID          uri: lb://student-service # 后端服务名          predicates:            - Path=/student/** # 匹配的路径          filters:            - StripPrefix=1 # 去除前缀

以上配置中,需要将nacos.server-addr替换为实际的Nacos Server地址。

然后,创建一个启动类并添加@EnableDiscoveryClient注解,启用服务发现功能。

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication@EnableDiscoveryClientpublic class GatewayApplication {    public static void main(String[] args) {        SpringApplication.run(GatewayApplication.class, args);    }}

最后,通过配置路由规则,将请求转发到后端的微服务。可以使用@Bean注解在配置类中定义路由规则,或者使用配置文件中的spring.cloud.gateway.routes属性进行配置。

import org.springframework.cloud.gateway.route.RouteLocator;import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class GatewayConfig {    @Bean    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {        return builder.routes()                .route("student-service", r -> r.path("/student/**")                        .uri("lb://student-service"))                .build();    }}

通过以上配置,Spring Cloud Gateway将根据路由规则将/sample/**路径的请求转发到名为sample-service的后端微服务。

请注意,示例中的sample-service是一个示意的后端微服务名称,需要根据实际情况替换为真实的微服务名称。

这样,结合Spring Cloud Gateway和Nacos的示例就完成了。启动应用后,它将根据配置的路由规则将请求转发到相应的后端微服务,并通过Nacos进行服务的注册和发现。

Spring Cloud Gateway作为微服务架构的入口,除了提供了路由转发,还提供了负载均衡、过滤器、安全认证、请求限流和监控等功能,

关于服务保护,本圣经后面有专栏介绍。当然,有兴趣的小伙伴可以阅读

SpringCloud gateway (史上最全) - 疯狂创客圈:https://www.cnblogs.com/crazymakercircle/p/11704077.html

进一步学习和掌握相关知识。

9、实现持续集成和部署

持续集成(Continuous Integration)是一种软件开发实践,旨在频繁地将代码集成到主干版本控制系统中。持续部署(Continuous Deployment)是持续集成的延伸,自动将通过持续集成构建的可部署软件包发布到生产环境。

以下是一种基本的实现方式:

  1. 版本控制:使用版本控制系统(如Git)管理代码,确保团队成员可以协同开发,并且每个更改都有明确的记录。

  2. 自动化构建:使用构建工具(如Maven)配置构建脚本,定义项目的编译、打包、测试等步骤。

  3. 持续集成服务器:使用持续集成服务器(如Jenkins)来触发构建,并执行自动化构建过程。

  4. 自动化测试:编写并执行自动化测试脚本,包括单元测试、集成测试和端到端测试等,以确保代码质量和功能稳定性。

  5. 自动化部署:使用容器化技术(如Docker)打包应用程序,并将其部署到预先定义的环境中,如开发环境、测试环境和生产环境。

接下来,我们将分别介绍Jenkins和Docker,然后提供详细的配置步骤来实现持续集成和部署。

1.Jenkins

Jenkins是一个开源的持续集成工具,它提供了一系列功能和插件,用于自动化构建、测试和部署软件。以下是Jenkins的基本概念和特点:

2.Docker

Docker是一个开源的容器化平台,它可以将应用程序及其依赖项打包到容器中,提供了一致、可重复和可移植的部署环境。以下是Docker的基本概念和特点:

隔离的,拥有自己的文件系统、进程空间和网络接口。

3.配置步骤

  1. 微服务应用新增Dockerfile文件
FROM openjdk:8-jreRUN mkdir /appCOPY students-service-exec.jar /app/app.jarENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar"]EXPOSE 8180
  1. 安装和配置Jenkins:
  1. 配置Jenkins构建任务:
  1. 安装和配置Docker:

构建成功后,我们可以在docker桌面端看到students-service服务已启动,

通过以上步骤,您可以使用Jenkins和Docker实现持续集成和部署。

Jenkins将根据配置的触发器自动执行构建任务,通过Docker构建和发布镜像,实现持续集成和部署的流程。

您可以根据具体的项目需求和环境配置Jenkins任务和Docker构建脚本,以实现自动化的软件交付流程。

10、小结

在本文中,我们首先讨论了微服务框架的基本原则,然后通过安装和配置Java、Maven、Git和IDEA等工具,为搭建基础设施做好准备。接着,我们定义了微服务接口和协议,并使用JPA提供了增删改查的代码示例。通过集成Nacos,我们实现了服务注册与发现,以及使用Feign实现服务调用和负载均衡。

我们还介绍了Spring Boot Admin和Elasticsearch,用于实现服务监控和日志管理。最后,我们使用Spring Cloud Gateway实现了服务安全保护,并通过Jenkins和Docker实现了持续集成和部署。

通过这个搭建过程,我们达到了构建一个完整的Java微服务框架的目标。

我们建立了基础设施,定义了接口和协议,实现了服务注册与发现、服务调用和负载均衡、服务监控和日志管理、服务安全和认证授权,并实现了持续集成和部署。

搭建过程存在的不足和改进的方向如下:

  1. 性能监控和报警:在服务监控和日志管理部分,我们可以进一步改进,引入Prometheus和Grafana来实现更全面的性能监控和报警功能。Prometheus是一个开源的监控系统,可以收集和存储各种指标数据,并提供强大的查询和报警功能。Grafana是一个数据可视化工具,可以将Prometheus收集的数据以图表的形式展示出来,帮助我们更直观地了解系统的性能状况。通过使用Prometheus和Grafana,我们可以实时监控系统的指标,并设置报警规则,及时发现并解决潜在的性能问题。

  2. 为了保障微服务系统的稳定性和可靠性,你还需要考虑服务的熔断、限流、降级等策略。可以使用 Hystrix 或者 Resilience4j 等库来实现这些功能。

  3. 容器化部署:在持续集成和部署部分,我们可以进一步改进,引入Kubernetes(K8s)来实现容器化部署。Kubernetes是一个开源的容器编排平台,可以简化和自动化应用程序的部署、扩展和管理。通过使用Kubernetes,我们可以将微服务框架中的各个服务容器化,并通过K8s进行部署、伸缩和管理,提供更高效、可靠和弹性的部署方案。

  4. 自动化和流程改进:在持续集成和部署部分,我们可以进一步改进和优化自动化流程。通过使用更先进的CI/CD工具和技术,如Jenkins Pipeline、GitOps等,可以实现更高度的自动化和流程改进。例如,可以通过编写自动化的流水线脚本,实现代码的构建、测试、打包和部署的自动化,并与版本控制系统(如Git)进行集成,实现代码的自动触发和持续交付。

通过上述改进,我们可以进一步提升微服务框架的性能监控、报警能力,以及部署和管理的效率和可靠性。这将有助于更好地满足不断变化的业务需求,并提升系统的可靠性和稳定性。

技术自由的实现路径:

实现你的 架构自由:

《吃透8图1模板,人人可以做架构》

《10Wqps评论中台,如何架构?B站是这么做的!!!》

《阿里二面:千万级、亿级数据,如何性能优化? 教科书级 答案来了》

《峰值21WQps、亿级DAU,小游戏《羊了个羊》是怎么架构的?》

《100亿级订单怎么调度,来一个大厂的极品方案》

《2个大厂 100亿级 超大流量 红包 架构方案》

… 更多架构文章,正在添加中

实现你的 响应式 自由:

《响应式圣经:10W字,实现Spring响应式编程自由》

这是老版本 《Flux、Mono、Reactor 实战(史上最全)》

实现你的 spring cloud 自由:

《Spring cloud Alibaba 学习圣经》 PDF

《分库分表 Sharding-JDBC 底层原理、核心实战(史上最全)》

《一文搞定:SpringBoot、SLF4j、Log4j、Logback、Netty之间混乱关系(史上最全)》

实现你的 linux 自由:

《Linux命令大全:2W多字,一次实现Linux自由》

实现你的 网络 自由:

《TCP协议详解 (史上最全)》

《网络三张表:ARP表, MAC表, 路由表,实现你的网络自由!!》

实现你的 分布式锁 自由:

《Redis分布式锁(图解 - 秒懂 - 史上最全)》

《Zookeeper 分布式锁 - 图解 - 秒懂》

实现你的 王者组件 自由:

《队列之王: Disruptor 原理、架构、源码 一文穿透》

《缓存之王:Caffeine 源码、架构、原理(史上最全,10W字 超级长文)》

《缓存之王:Caffeine 的使用(史上最全)》

《Java Agent 探针、字节码增强 ByteBuddy(史上最全)》

实现你的 面试题 自由:

4000页《尼恩Java面试宝典 》 40个专题

免费获取11个技术圣经PDF:

上一篇 : 全球观察:中电兴发:公司与云南联通就优化改革的谈判目前正在进行中

下一篇 : 徐州贾汪:挖掘“清凉经济”,让绿水青山变成“金山银山”

广告
热文推荐

环球讯息:15亿收入不要了,再见巴黎!3大线索指向加盟曼联,英超争冠变天

侃球部落 2023-06-13

LPL饭堂灵魂提问,近五年最强中单,Faker难进前十,JDG有望绝杀_焦点热文

天下游戏汇 2023-06-13

世界要闻:坐不住了!催化剂正式发挥作用,姆巴佩被迫决定,皇马或成大赢家

侧身凌空斩 2023-06-13

天天热头条丨最新世界排名公布!国乒蝉联5项第一,樊振东、孙颖莎面临挑战

全言 2023-06-13

宣传缉枪治爆_天天新消息

辽宁法治报 2023-06-13

全球时讯:专项行动清理违规渔具

辽宁法治报 2023-06-13

统计:海南旅游收入高于疫前2019 年同期水平

中国网 2023-06-13

端午节发朋友圈文案怎么写吸引人?以端午节为主题的文案看这里

民企网 2023-06-13

冬至名言有哪些?冬至的古诗10首看这里

民企网 2023-06-13

课文匆匆的体裁是什么?课文匆匆教材分析怎么写?

民企网 2023-06-13

【宁夏】隆德县七名农民晋升高素质农民职称资格

隆德县农广校 2023-06-13

usual反义词是什么?active的反义词有哪些?

民企网 2023-06-13

世界动态:@高考生,成绩即将揭晓,志愿如何填报?指南来了!

人民日报微博 2023-06-13

最近的天气也太热了吧!快趁“热”收下这份防中暑指南

广西疾控微信公众号 2023-06-13

营造学青会氛围!广西体育明星团走进多所小学校园 快看点

南宁晚报·南宁宝客户端 2023-06-13

天天微速讯:最新国家级一流本科课程名单公布!广西有这些

广西头条NEWS微信公众号综合 2023-06-13

广西科学守护“海上森林” 努力实现“双碳”目标

广西新闻网-南国早报 2023-06-13

国四柴油车报废新规定_柴油车报废新规定

互联网 2023-06-13

OEM厂家共同成长黄金搭档 仙佑集团贴心服务共创美好未来

南早网 2023-06-13

东亚的互不侵犯条约-聚看点

观察网 2023-06-13

小罗缅怀贝卢斯科尼:你的名字将永远镌刻在AC米兰|世界实时

直播吧 2023-06-13

埃姆雷-詹:整座城市为多特夺冠做好准备,不知如何消化这种辜负

直播吧 2023-06-13

世界报道:基米希回应哈维称赞:我和拜仁还有两年合同,我们有很伟大的计划

直播吧 2023-06-13

挺硬气!21岁女网新星父亲放出豪言:我女儿要拿单打大满贯冠军_环球热点评

体育知道分子 2023-06-13

谈谈你今后的努力方向怎么写?孩子努力的方向和改进措施看这里

民企网 2023-06-13

等待下一次重逢的诗句有哪些?形容迟早会见面的文案看这里

民企网 2023-06-13

兰波诗集经典句子集锦来了!兰波写得最好的诗看这里

民企网 2023-06-13

王昌龄最出名的三首诗你知道吗?最著名的十首边塞诗都在这儿

民企网 2023-06-13

当前要闻:贵州电商云公司“一码贵州”平台入选2022年《中国电子商务报告》商业科技创新应用优秀案例

多彩贵州网 2023-06-13

古代经商谚语大全来了!生意高手十句口诀在这儿

民企网 2023-06-13

小学生关于成长的诗歌有哪些?关于成长的诗歌朗诵稿在这儿

民企网 2023-06-13

哈姆雷特摘抄及感悟怎么写?哈姆雷特读书心得看这里

民企网 2023-06-13

观天下!兰州举办新就业群体心理健康辅导讲座

中国市场监管报 2023-06-13

全民tv怎么直播 全民tv申请认证主播教程 全民怎么开通直播_全球独家

2023-06-13

【全球速看料】微信app天天领红包在哪 天天领红包小程序

2023-06-13

火山直播怎么开通直播间 火山直播怎么开通呢

2023-06-13

京东上面怎么查看自己的年度账单 京东怎么看年度账单2020

2023-06-13

在ps软件中怎么绘制直线 ps软件里怎么画直线

2023-06-13

6月13日生意社糠醛基准价为11425.00元/吨

生意社 2023-06-13

简讯:有黑的意思的字_黝黑的意思

互联网 2023-06-13

环球今头条!疯狂24小时!皇马计中计欺骗全欧,姆巴佩摊牌,1.2亿巨星恐被打压

叁炮体育世界 2023-06-13

全球新动态:曼城挖角国米中场全能神将,瓜帅情有独钟,两大障碍能否克服?

零度眼看球2023 2023-06-13

疯狂24小时!皇马计中计欺骗全欧,姆巴佩摊牌,1.2亿巨星恐被打压-最资讯

叁炮体育世界 2023-06-13

谜一样的巴蒂!世界排名第一突然退役,巨大悬念留给万千球迷

生活有意义 2023-06-13

全球简讯:是否存在有注册资本的分公司

法问网 2023-06-13

logo著作权登记费用是多少?

法问网 2023-06-13

奥海科技:接受兴证全球基金等机构调研_报资讯

每日经济新闻 2023-06-13

【机构调研记录】北信瑞丰调研鹭燕医药

证券之星 2023-06-13

赛博朋克2077发售日期介绍 赛博朋克2077具体发售时间

互联网 2023-06-13

当前动态:GOAT德约斩获生涯第23座大满贯&3圈大满贯第一人

收米旺财 2023-06-13

中网总奖金公布:1175万美元 ,同级别赛事奖金第一,其中WTA赛事803.97万美元 世界今热点

天羽看球 2023-06-13

世界观点:中国金花夺冠+豪夺335万,德约科维奇收获1768万巨奖,23冠超纳达尔

全能体育柳号 2023-06-13

短讯!孙颖莎惹争议!参加低级赛事,球迷质疑国乒吃相难看,帮忙抢积分

小李子爱体育 2023-06-13

【新视野】多家上市公司进军新能源产业 跨界“奔赴”合理性引监管层关注

经济参考报 2023-06-13

国内单机容量最大的冲击式水电机组完成国产化改造 成功并网发电 环球即时看

中国产业经济信息网 2023-06-13

环球热消息:奥运积分排名更新!梁王暂居男双榜首,何冰娇高居女单第3

土土女排 2023-06-13

得加钱?记者:除皇马外,巴黎愿今夏将姆巴佩出售给任何球队

直播吧 2023-06-13

德约科维奇与穆雷同一日双双夺冠,球迷梦回四巨头时代,不见费纳!-全球最资讯

体育百说 2023-06-13

【环球热闻】海峡组合法网逆袭夺冠 小将王欣瑜未来可期

中国青年网 2023-06-13

美元指数12日上涨

新华网 2023-06-13

世界速读:沙特能源大臣:沙特想与中国合作,不会理会西方的“担忧”

海口网 2023-06-13

海南发展(002163):6月12日北向资金增持25.24万股|环球要闻

证券之星 2023-06-13

天天热资讯!牛白_牛白藤别名

科学教育网 2023-06-13

天府烤卤官网 天府烤卤总部地址-短讯

互联网 2023-06-13

专班保障

中工网-工人日报 2023-06-13

张志丹:特斯拉FSD渐行渐近!新能源车能否迎来第二春?

九方智投 2023-06-13

热点聚焦:演员张龄心:不结婚不生子,老了就去养老院,如今她打了自己的脸_天天动态

新浪娱乐 2023-06-12

中超之光!巴萨4000万清洗曼城天才,1600万签大连神锋,1年10球

贝塔聊体育 2023-06-12

【环球时快讯】记者:迪亚斯新赛季将身穿皇马21号球衣

直播吧 2023-06-12

即时:纳乔:如果我能决定,我会在今夏把姆巴佩带到皇马

直播吧 2023-06-12

世界时讯:皇马拒绝哈弗茨,迪巴拉拒绝沙特亿元高薪,穆里尼奥再收顶薪报价

夏侯看足球 2023-06-12

天天热点评!对话|续写茶香传奇,90后非遗新人有一套

南报网 2023-06-12

皇马新7号确认!亿元先生接班阿扎尔挑战C罗,10号留给姆巴佩?|环球即时看

夏侯看足球 2023-06-12

饶明受伤,德约鲁德再战法网火枪手杯!

秦梦颜 2023-06-12

马琳难再指导陈梦,刘国梁布局,主教练放权,主管教练负责场边-世界速讯

东球弟 2023-06-12

【世界时快讯】陈梦丢大满贯有原因!官方杂志透露世乒赛前情况,一姐身体出问题

三十年莱斯特城球迷 2023-06-12

全球连线|红酒为媒推动中外交流_环球百事通

新华社 2023-06-12

每日消息!事关买菜! 2023年7月1日,柳州这一新规实施

南国今报APP 2023-06-12

每日报道:降雨范围更大!13日起,广西将进入“龙舟水”集中期

南国早报客户端 2023-06-12

天天微资讯!硅藻泥优缺点大揭秘_硅藻泥优缺点

互联网 2023-06-12

恭喜内马尔!利雅得新月为内马尔提出报价,年薪2.5亿欧元

生菜商量体育 2023-06-12

体坛3大GOAT齐聚!梅西德约却只能在两边,詹姆斯丢冠却是居中C位

嘴炮体育 2023-06-12

德天空记者:于帕梅卡诺在拜仁过得不开心,但无意在今夏离队_焦点快看

直播吧 2023-06-12

江瀚新材: 第一届董事会第十四次会议决议公告 今日快讯

证券之星 2023-06-12

“蔚小理”一季度交卷:理想连续盈利 蔚来小鹏各有“焦虑”

北京商报 2023-06-12

新闻发布如何取信于民

顶端新闻 2023-06-12

【天天播资讯】好听的闽南语歌曲排行2019_好听的闽南语歌曲有哪些

互联网 2023-06-12

人数破500万!梅西现身直播间,平台遭疯狂吐槽:吃相太难看

绿茵猫 2023-06-12

助攻绝杀升意甲!国米300万卖小麦孔亏了,7+9飞翼想重回蓝黑军团

二傻子爱体育 2023-06-12

环球百事通!hang发挥不佳泪洒现场,LNG2:1险胜FPX状态堪忧,打野tarzan难顶大梁

四海游戏汇 2023-06-12

中国金花单打9连败,吞下一根油条,张帅状态低迷已无任何竞争力

军林之天下 2023-06-12

历史上陈轸是一个怎样的人(春秋战国陈轸的人物形象分析)

互联网 2023-06-12

美赞臣中国牵手微生态领军企业未知君加速布局精准营养健康管理

东方资讯 2023-06-12

像蛇但不是蛇,广西大明山保护区发现新记录物种

南宁晚报·南宁宝客户端 2023-06-12

全球微速讯:高清图:贵南高铁广西段新建站房外部装修全面完成

广西日报-广西云客户端 2023-06-12

滚动:广西积极参与全国碳排放权交易市场,交易额逐年上升

人民日报客户端广西频道 2023-06-12

每周行业动态一览 新视野

中信证券股份有限公司 2023-06-12

hang发挥不佳泪洒现场,LNG2:1险胜FPX状态堪忧,打野tarzan难顶大梁

四海游戏汇 2023-06-12

今头条!海峡两岸选手王欣瑜/谢淑薇法网女双夺冠 健身房两分钟闲聊促成冠军档

北京日报 2023-06-12

【全球快播报】王欣瑜/谢淑薇夺得法网女双冠军

中国周刊 2023-06-12

陈梦丢大满贯有原因!官方杂志透露世乒赛前情况,一姐身体出问题

三十年莱斯特城球迷 2023-06-12

治理“神医神药”要击中要害

法治日报-法治网 2023-06-12

【世界速看料】这款神奇的净水器能预防“三高”?58名老人被骗63万元

法治日报 2023-06-12

2021 年雪佛兰 Tahoe 柴油获得 EPA 评级的 28 英里-全球热议

互联网 2023-06-12

世界信息:共筑中国质谱梦 磐诺仪器受邀出席中国质谱学术大会

化工仪器网 2023-06-12

观焦点:美好时光海苔广告歌_美好时光海苔

元宇宙网 2023-06-12

看见未来的三亚 | 文旅打卡新地标 三亚市文化中心项目预计今年7月完成项目主体结构施工

南海网 2023-06-12

观点:第五人格2023IVL夏季赛常规赛W1D1 第二场 GW vs Gr

IVL侦探清欢酱 2023-06-12

TES让一追二击溃对手,仁川3c再次同台竞技让大家热泪盈眶 当前讯息

游人馆 2023-06-12

陈梦丢大满贯有原因!官方杂志透露世乒赛前情况,一姐身体出问题

三十年莱斯特城球迷 2023-06-12

信用卡全额还款有利息吗逾期了(什么是信用卡全额还款)-全球百事通

红际 2023-06-12

世界微头条丨美团逾期是什么意思(美团逾期逾期3年怎么计算)

红际 2023-06-12

陕西宁强一街道党工委书记被停职,此前有人发布疑似其不雅信息 简讯

上游新闻 2023-06-12

天天快讯:800+二次元角色概念设计参考,设计废赶紧进来学!!!

哔哩哔哩 2023-06-12

【互动掘金】迅捷兴:公司在光模块领域已积累了相关产品经验和客户 目前可批量接单

证券时报网 2023-06-12

德约科维奇夺冠发言:高情商提及超越纳达尔,并回应“Goat”之争 全球报道

体育大参考 2023-06-12

环球信息:中午12点!22岁孙颖莎公布喜讯,王楚钦喜出望外,国乒球迷祝福

二哥聊球 2023-06-12

珠海市检察院召开“生态检察助力美丽珠海建设”主题新闻发布会|每日快报

珠海检察、南方+客户端 2023-06-12

三十年风雨兼程 车辙勾勒为民初心

天津政法报 2023-06-12

当前视讯!成都保租房申请流程图解(个人+企业房源)

本地宝 2023-06-12

csgo饰品在哪买便宜最新平台看这里 csgo开箱钥匙哪里便宜?

页游网 2023-06-12

中汽协:前5月汽车出口同比增81.5%

中新经纬 2023-06-12

csgo什么箱子能开出蝴蝶?csgo白嫖钥匙和箱子教程看这里

页游网 2023-06-12

csgo每周免费钥匙在哪里?csgo变革箱子值得开吗?

页游网 2023-06-12

csgo黄金ak是什么箱子开的?csgo冷门箱子价格如何?

页游网 2023-06-12

csgo什么箱子开手套概率高?csgo冷门箱子出金率高吗?

页游网 2023-06-12

全球焦点!球迷们纷纷发文请愿,要求男足立马换人,没想到鹿晗的呼声最高

飞花乱愁肠 2023-06-12

梅西活动全部取消引众怒:对比当初C罗来南京和韩国,高下立判 焦点关注

贝塔聊体育 2023-06-12

再见大巴黎!接受2.5亿年薪,姆巴佩不挽留,离开法甲,冲击亚冠

球场新视角 2023-06-12

德容不满欧足联赛事太多:没人关心欧国联,欧足联就是圈钱 当前时讯

直播吧 2023-06-12

世界速讯:网络电视节目直播 网络电视如何收看电视节目

城市网 2023-06-12

和评理 | 追随美国打压中国 英国投机取巧反而弄巧成拙 热点在线

红网 2023-06-12

世界热议:西协甲升级附加赛半决赛:卡斯蒂亚3-0巴萨竞技,以总比分5-4逆转

直播吧 2023-06-12

世界消息!一起多进点球!艾克森晒与武磊合影:非常开心与我的朋友重聚

直播吧 2023-06-12

世体:若收到4000万欧报价巴萨将卖费兰,之后会追逐卡拉斯科

直播吧 2023-06-12

海峡两岸选手王欣瑜/谢淑薇法网女双夺冠 健身房两分钟闲聊促成冠军档

北京日报 2023-06-12

世界看热讯:故意杀人故意伤害如何区分

法问网 2023-06-12

热讯:股东大会律师鉴证需要多少费用

法问网 2023-06-12

2023暑期档总票房破10亿 当前关注

北京商报 2023-06-12

csgo开箱一发入魂概率是多少?csgo每周免费箱子有几个?

页游网 2023-06-12

“千万工程”调研行|再访余村:留住“绿”,迎来“青”|环球观速讯

新华社客户端 2023-06-12

快看点丨浅谈中华传统文化的海洋特质

光明日报 2023-06-12

最高人民法院发布6月13日开庭与庭审直播公告 全球微动态

最高人民法院 2023-06-12

csgo开箱一发入魂要多少钱?csgo每周免费箱子在哪?

页游网 2023-06-12

kkcsgo开箱网正规吗?kkcsgo开箱网站怎么玩?

页游网 2023-06-12

有没有福利CSGO2开箱平台?csgo哪里可以买箱子?

页游网 2023-06-12

csgo开箱入门指南来了!绝地求生新箱子黄金皮肤获得方法看这里

页游网 2023-06-12

csgo开箱流程详解来了!CSGO2出金白嫖网站盘点

页游网 2023-06-12

小学生做仰卧起坐的好处_仰卧起坐的好处 环球播报

互联网 2023-06-12

csgo开箱在哪开?CSGO出现vac无法验证怎么办?

页游网 2023-06-12

csgo开箱网站免费抽一次是真的吗?CSGO盲盒开箱能提现吗?

页游网 2023-06-12

csgo开箱网站可信吗?CSGO盲盒开箱怎么提现?

页游网 2023-06-12

csgo开箱网站公认最好的是哪个?csgo开箱网站steam登不上什么情况?

页游网 2023-06-12

csgo开箱概率各个时间段会叠加吗?csgo开箱网站怎么绑定steam?

页游网 2023-06-12

CSGO搬砖真的赚钱吗?csgo开箱网站哪个爆率高?

页游网 2023-06-12

LCK版本陷阱图,Gen五杀碾压T1,AD德莱文估计没人选了

游戏主 2023-06-12

环球报道:Deft亮VN致敬UZI,坦言:他能去EDG,太有趣了

电竞天堂 2023-06-12

微头条丨亚运征途英雄联盟项目:中国队阵容曝光

ITBEAR科技资讯 2023-06-12

世体:巴萨与马竞就卡拉斯科价格达成一致,转会费1600万欧元-全球即时看

直播吧 2023-06-12

CSGO搬砖什么意思?CSGO搬砖教程来了

页游网 2023-06-12

CSGO开箱多少钱才能开出粉色 CSGO开箱steam连接错误是怎么回事

页游网 2023-06-12

CSGO开箱多少个能出金?CSGO开箱怎么steam钱包支付?

页游网 2023-06-12

蔚来新车全系降价 李斌回应:“内部讨论很久,现在是最合适的发布时机”-当前独家

北京商报 2023-06-12

光与夜之恋查理苏亘日归途剧情是什么 光与夜之恋查理苏亘日归途剧情介绍

互联网 2023-06-12

汽车置换是怎么置换的?汽车火花塞的功能和作用是什么?

民企网 2023-06-12

冷车启动有哒哒哒声怎么办?汽车冬天胎压多少合适?

民企网 2023-06-12

天天报道:第15届环赛里木湖公路自行车赛鸣枪开赛

新华网 2023-06-12

私家车多久年检一次?汽车EBD的工作原理是什么?

民企网 2023-06-12

汽车双离合是什么意思?汽车钥匙配个多少钱?

民企网 2023-06-12

住房公积金怎么解封提取?法拍房多久能出卖?

民企网 2023-06-12

浅议火爆烧烤背后的健康担忧_世界热文

科普中国 2023-06-12

刚需房买新房好还是二手房好?二手房不好卖的原因有哪些?

民企网 2023-06-12

当前快播:斯瓦泰克:不关心萨巴伦卡和莱巴金娜,只专注自己表现

网球之家 2023-06-12

孙颖莎王楚钦被誉为国乒劳模,两人德班世乒赛上场时长数据公布!

海宝体育 2023-06-12

征信查询过多会影响公积金贷款吗?造成楼盘倒挂现象的几个原因看这里

民企网 2023-06-12

小区业主私自侵占公共区域怎么办?新小区业主委员会怎么成立?

民企网 2023-06-12

蔚来全系新车降价3万元

北京商报 2023-06-12

小区业主可以换掉物业管理公司吗?小区车库业主停车要交停车费吗?

民企网 2023-06-12

小区业主不交物业费违法吗?小区业主可以调看监控录像吗?

民企网 2023-06-12

漫步者tws1蓝牙耳机怎么恢复双耳模式

2023-06-12

腾讯课堂 腾讯课堂怎么样

2023-06-12

浙商银行折价配股 早盘下跌超4% 环球热资讯

21世纪经济报道 2023-06-12

CCTV5直播国足VS缅甸!大连梭鱼湾首战别丢脸,扬科维奇首训弓拉满弦 全球球精选

萩龙观世界 2023-06-12

Deft亮VN致敬UZI,坦言:他能去EDG,太有趣了-世界速看料

电竞天堂 2023-06-12

小德超越小威加冕GOAT指日可待!网坛传奇不满:要尊重我的成就!

黑桃杰克说体育 2023-06-12

法网最大黑马穆霍娃,一度被医生宣判不能再打球,靠努力逆天改命!|环球热议

体育百说 2023-06-12

卡塔尔航空全新升级QVerse平台,为旅客提供数字化出行体验 焦点信息

中国航空新闻网 2023-06-12

全球通讯!wifi密码忘了怎么办 wifi密码忘了解决方法 wifi密码忘记了怎么办?简单一招

2023-06-12

png图片怎样转换成jpg格式 png图片如何转换为jpg_世界今亮点

2023-06-12

b站会员等级怎么升级 b站会员等级怎么升级快

2023-06-12

1元免费畅游18家景区!桂西南30多家景区联合发福利→

广西新闻网-南国早报 2023-06-12

全球新消息丨马上又有强降雨!旱涝急转当心次生灾害

广西天气 2023-06-12

环球百事通!广西开展国企违规投资专项整治行动

广西新闻网-广西日报 2023-06-12

力争2025年全面实现声环境功能区夜间达标率达到85% 广西这样做

广西新闻网-广西日报 2023-06-12

重实效 强实干 抓落实丨北海着力打造消费新场景 每日热讯

广西新闻网-广西日报 2023-06-12

短讯!韩媒:维信诺也考虑投资8代以上OLED 采用无FMM ViP技术

中华液晶网 2023-06-12

老旧小区改造后是不是不拆了?5楼房子不好卖的原因有哪些?

民企网 2023-06-12

农村自建房一般几个月?保租房可以租多久?

民企网 2023-06-12

蓝电E5斩获多项大奖 2023重庆车展蓝电汽车备受关注

中国焦点日报网 2023-06-12

詹俊:国米球迷能接受切尔西用卢卡库+库利巴利交换奥纳纳么? 热点在线

直播吧 2023-06-12

返回顶部