SpringCloud实践(一) 基础知识:微服务、SpringCloud、Springboot

在学习SpringCloud以前,先梳理一下基础知识,本章节的目标就是了解以下基础知识:html

  • 微服务
  • SpringCloud
  • Springboot
  • 最后经过搭建一个简单的Springboot 的 helloworld 结束本章。

1、什么是微服务前端

传统企业架构里面,通常分为数据库、服务端处理、前端展示。服务端通常是单体模块或者单体的进程,随着web端的业务愈来愈复杂,对于服务端的要求也愈来愈高,服务接口愈来愈多。一开始人们采用服务总线来解决服务发现和服务治理的问题,随着互联网兴起,接口的调用性能和稳定性问题愈来愈突出,所以去中心化成为服务治理以后一个被你们高度重视的问题,在这个背景下,愈来愈多的公司采用了微服务来进行服务端的设计,从以前的淘宝dubbo,到后来的SpringCloud, 微服务如今已经成为后端服务设计中最为流行的一种技术选型。java

       

2、SpringCloud简介python

微服务概念兴起后,有许多相关的框架在技术人员中流传出来,若是前面提过的dubbo,其余还有批量任务的 Elastic-job 一系列的技术框架,可是都是基于微服务中的某一个点的问题进行解决,SpringCloud的出现,给技术人员提供了一个解决微服务架构实施的综合性解决框架。web

SpringCloud包含了多个子项目:spring

Spring Cloud Config: 配置管理工具数据库

Spring Cloud Netflix: 核心组件,含有Eureka: 服务治理组件(服务注册中心,服务注册和发现机制)apache

Hystrix:容错管理组件,实现断路器模式后端

Ribbon:客户端负载均衡的服务调用组件浏览器

Spring Cloud Bus: 事件、消息总线

Spring Cloud Cluster:集群

等等,还有不少不一一列举。

3、Spring Boot简介

SpringCloud的工程构建是基于Spring Boot实现,所以有必要先了解一下Spring Boot, 经过建立一个简单的web工程来了解一下SpringBoot:建议使用IDEA做为开发工具

首先经过创建一个Model来创建一个SpringBoot工程:


点击下一步:


填入Model 的元数据相关信息后,继续next


这里选择Web,next后,填入模块的名称:


点击finish后,就出现以下的工程结构:


上面这张图显示了工程结构,其中pom.xml是maven工程的配置文件,里面会有工程的依赖,咱们使用了spring initialzr向导,所以会在pom.xml 中自动填入初始的依赖;其次默认src main 目录下有一个java ,一个resources,在java 中放置代码,在resources中放工程的资源如配置文件,图中的application.yml 也是配置文件,是后来加入的,这是springboot的特点配置文件,在代码区的 HelloControler也是后来代码,后面会说明,系统默认会有一个应用入口类,SpringbootApplication。最后test区是放置单元测试代码的区域。

创建起工程后,咱们准备开发一个小demo,helloword。

首先看一下pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.study</groupId>
	<artifactId>springboot</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springboot</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.1.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

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


</project>

若是之后本身的工程中有其余依赖,能够本身添加,上面是建立工程时就本身建立的,还记得前面咱们选的web 选项吗,在这里就有sping-boot-starter-web。

其次,咱们写一个controler,默认调用都被这个controler处理

package com.study.springboot.controler;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping("/sayhello")
    public String Hello() {
        return "Hello World!";
    }
}

在springboot中采用了注解方式来开发,提高开发效率,上面这段就是当http://localhost:port/sayhello调用时,返回hello world。接着,建立一下运用的配置文件,在resource 目录下,咱们建立一个文件application.yml

server:
#配置服务器启动端口
  port: 8028
#配置访问的上下文路径,就是localhost:8028后面须要的上下文路径
  context-path: /sayhello

Springboot采用了递进式样的配置文件格式yml,有点相似python,固然也能够用默认的application.properties

上面等于server.port=8028

最后,咱们看一下demo的入口:

package com.study.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootApplication.class, args);
	}
}

这个类没有作任何处理,建立时就是这样,,咱们直接把它运行起来:


运行后,咱们在浏览器输入url  http://localhost:8028/sayhello,浏览器就会返回以下信息:


一个简单的 Springboot demo 就完成了。