程序需要高内聚,低耦合

如何构建微服务

一个大型系统的微服务架构,就像一个复杂交织的神经网络,每一个神经元就是一个功能元素,它们各自完成自己的功能,然后通过http互相请求调用,都被微化了,它们作为一个个服务器共同创建了一个庞大的系统。如果修改其中的一个功能,只需要更新升级其中一个功能服务单元即可。

但是这种庞大的系统架构给部署和运维带来很大的难度。于是,spring为我们带来了构建大型分布式微服务的全套、全程产品:

  • 构建一个个功能独立的微服务应用单元,可以使用springboot,可以帮我们快速构建一个应用;
  • 大型分布式网络服务的调用,这部分由spring cloud来完成,实现分布式;
  • 在分布式中间,进行流式数据计算、批处理,我们有spring cloud data flow.
  • spring 为我们想清楚了整个从开始构建应用到大型分布式应用全流程方案。

第一个SpringBoot程序

环境

  • jdk1.8
  • maven 3.6.1
  • springboot: 最新版
  • IDEA

官方:提供了一个快速生成的网站!https://start.spring.io/

IDEA集成了这个网站

我选的版本是8 如果出错的化调回11

spring boot构建微服务 springboot开发微服务_spring boot构建微服务

运行出错 调回版本11

运行时出现的的错误:java: 警告: 源发行版 11 需要目标发行版 11

解决办法:

spring boot构建微服务 springboot开发微服务_maven_02

spring boot构建微服务 springboot开发微服务_maven_03

spring boot构建微服务 springboot开发微服务_spring_04

最后重启IDEA 我觉得只要这几个版本是一致的就应该都可以运行

  • 可以在官网直接下载后,导入idea开发

spring boot构建微服务 springboot开发微服务_maven_05

  • 直接使用idea创建一个springboot项目(一般开发直接在IDEA中创建)

spring boot构建微服务 springboot开发微服务_spring boot构建微服务_06

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
<!--	有一个父项目 spring-boot-starter-parent-->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.4.5</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.kuang</groupId>
	<artifactId>helloworld1</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>helloworld1</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>11</java.version>
	</properties>
	<dependencies>
<!--		web依赖:集成tomcat dispatcherServlet, xml ...-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
<!--		spring-boot-starter 所有的springboot依赖都使用这个开头的-->
<!--单元测试-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
<!--		打jar包插件 -->
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

如上所示,主要有四个部分:

  • 项目元数据信息:创建时候输入的Project Metadata部分,也就是Maven项目的基本元素,包括:groupId、artifactld、version、name、description等
  • parent: 继承spring-boot-starter-parent的依赖管理,控制版本与打包内容
  • dependencies"项目具体依赖,这里包含了spring-boot-starter=web用于实现HTTP接口(该依赖中包含了Spring MVC),官网对它的描述是:使用spring mvc 构建web(包括RESTful)应用程序的入门者,使用Tomcat作为默认嵌入式容器:spring-boot-starter-test用于编写单元测试的依赖包。
  • build:构建配置部分,默认使用spring-boot-maven-plugin,配合spring-boot-starter-parent 就可以把Spring Boot应用打包成JAR来直接运行。

1.在同级目录下建包,否则识别不到:

spring boot构建微服务 springboot开发微服务_spring boot构建微服务_07

2.在包中新建一个Controller类:

HelloController

package com.kuang.helloworld1.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//springboot的核心原理是自动装配
@RestController
public class HelloController {
//  接口 :  http://localhost:8080/hello
    @RequestMapping("/hello")
    public String hello(){

        //调用业务,接受前端的参数
        return "hello, World";
    }
}

出现的错误:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project helloworld1: Fatal error compiling

解决办法

在pom.xml中添加以下代码:

<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.4.3</version>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>

		</plugins>

打包成功会有一个jar包:

spring boot构建微服务 springboot开发微服务_xml_08

在此页面点击shift + 鼠标右键显示在此打开powershell窗口。

spring boot构建微服务 springboot开发微服务_xml_09

输入的命令:java -jar.\helloworld1-0.0.1-SNAPSHOT.jar

spring boot构建微服务 springboot开发微服务_xml_10

出现的错误:Initialization failed for 'https://start.spring.io' Please check URL, network and proxy settings. Error message: Cannot download 'https://start.spring.io': connect timed out

解决办法:1

spring boot构建微服务 springboot开发微服务_xml_11

**解决方法2:更换为阿里云的 https://start.aliyun.com/ **

spring boot构建微服务 springboot开发微服务_spring boot构建微服务_12

要使springboot运行完不结束 要在pom.xml中导入依赖:

<dependency>
  <!--start启动器 版本号可以不要  会继承父依赖-->          <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        
        </dependency>

springboot运行时出的错:Web server failed to start. Port 8080 was already in use.

解决办法

把不用的那些idea 文件 或者与此项目无关的IDEA文件关掉 并且在maven 那里进行clean。就可以运行出来。

spring boot构建微服务 springboot开发微服务_maven_13

更改端口号:

application.properties:

# 更改项目端口号
server.port=8081

spring boot构建微服务 springboot开发微服务_maven_14

图案制作地址:https://www.bootschool.net/ascii-art