三、Spring Cloud实战微服务

1、Spring Cloud实战前提

1.1、技术储备

    语言基础——Spring Cloud是基于Java语言的工具套件,同时是基于Spring Boot构建的,所以要有Java+SpringBoot基础

1.2、工具及版本

    jdk1.8 + springBoot1.4.3.RELEASE + SpringCloud Camden SR4 + Maven3.3.9

2、服务提供者与消费者

生产者消费者生产者消费者

2.1、服务提供者(生产者)相关代码

2.1.1、pom文件如下:

<?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>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.gome</groupId>
	<artifactId>provider-user</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>provider-user</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
		<project.build.sourceEncodeing>UTF-8</project.build.sourceEncodeing>
	</properties>

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

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	
	<!-- 引入Spring Cloud依赖 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Camden.SR4</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

2.1.2、其他部分与一般SpringBoot项目一样

@RestController("/user")
public class UserController {
	
	@Autowired
	private UserMapper userMapper;
	
	@GetMapping("/{id}")
	public User findById(@PathVariable Long id) {
		
		User one = userMapper.getOne(id);
		return one;
	}
}

2.2、服务消费者代码

2.2.1、pom文件基本同上,修改<artifactId>相关项目名称即可

2.2.2、请求生产者服务的代码

添加RestTemplate

使用RestTemplate调用生产者服务

2.2.3、代码优化

    由于以上代码要请求的项目地址直接写在代码里,属于“硬编码”。我们可以通过配置文件进行优化,如下:

硬编码问题优化

2.2.4、依然存在的问题

  •     适用场景局限——如果服务提供者修改网络地址(IP或者端口),将会影响服务消费者。这事消费者要重新修改配置文件重新发布启动。这显然不可取!
  •     无法动态伸缩——生产环境下,每个微服务一般都会部署多个实例,以实现容灾和负载均衡。这就需要系统有自动伸缩的能力,比如动态增减节点。硬编码无法满足这种需求!

3、补充知识——整合SpringBoot Actuator

    Actuator可以对SpringBoot项目进行健康状况的检测

3.1、添加依赖

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

   3.2、常用端点描述

Actuator常用端点描述

    通过这些请求对应项目所在地址(IP+端口)拼接以上uri可以获取该项目目前的各项健康状况,如下:

请求 http://localhost:8000/health    响应以下内容:

{

    "status" : "UP",

    "diskSpace" : {

        "status"  : "UP",

        "total"  :  214750457856,

        "free"  :  183337144320,

        "threshold"  :  10485760

    }

    "db"  :  {

        "status"  :  "UP",

        "database"  :  "MYSQL",

        "hello"  :  1

    }

}

    其中UP表示运行正常。除了UP外,还有DOWN、OUT_OF_SERVICE、UN-KNOWN等状态

猜你喜欢

转载自blog.csdn.net/sky_helloword/article/details/85073274