什么是微服务架构
简单地说,微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在独立的进程中运行,服务之间通过基于HTTP的RESTful API进行通信协作。被拆分成的每一个小型服务都围绕着系统中的某一项或者耦合较高的业务进行构建,并且每个服务都维护者自身的数据存储、业务开发、自动化测试以及独立部署。由于有了轻量级的通信协作基础,所有这些微服务可以使用不同的语言来编写。
SpringCloud简介
SpringCloud是一个基于SpringBoot实现的微服务框架开发工具。它为微服务架构中涉及的配置管理、服务治理、断路器、智能路由、微代理、分布式会话和集群状态管理等操作提供了一个简单的开发方式。
SpringCloud Config:配置管理工具,支持使用Git存储配置内容,可以使用它实现应用配置的外部化存储,并支持客户端配置信息刷新等。
SpringCloud Netflix:核心组件,对多个NetflixOSS开源套件进行整合。
Eureka:服务治理组件,包含服务注册中心、服务注册和发现机制的实现。
Hystrix:容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力。
Ribbon:负载均衡的服务调用组件。
Feign:基于Ribbon和Hystrix的声明式服务调用组件。
Zuul:网关组件,提供智能路由,访问过滤等功能。
SpringCloud Consul:服务发现和及配置管理工具。
SpringCloud Stream:通过Redis、Rabbit、或者Kakfa实现的消费微服务,可以通过简单的声明式模型来发送和接受消息。
等等~~~
Eureka
搭建注册中心
创建一个基础的SpringBoot工程,命名为eureka-server,并在pom文件中引入必要的依赖内容,代码如下:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.7.RELEASE</version> <relativePath/> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <projece.reporting.outputEncoding>UTF-8</projece.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.SR2</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <!-- <version>3.0.3</version>--> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <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>
在引导类上添加@EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行对话
@SpringBootApplication @EnableEurekaServer //启用Eureka服务 public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class,args); } }
修改默认配置,端口号 ,微服务名称,注册中心地址
server: port: 10086 spring: application: name: dynamic.eureka #微服务的名称 注入到eureka eureka: client: service-url: defaultZone: http://localhost:${server.port}/eureka
注册服务提供者
创建一个基础的SpringBoot工程,命名为eureka-provider,并在pom文件中引入必要的依赖内容,代码同上
在引导类上添加@EnableDiscoveryClient注解,将此微服务添加到注册中心
@SpringBootApplication @EnableDiscoveryClient //启动eureka客户端 public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class,args); } }
修改默认配置:端口号,微服务名称,注册给eureka
server: port: 8889 spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql:///ssm username: root password: root application: name: service-provider #微服务名称 eureka: client: service-url: defaultZone: http://localhost:10086/eureka register-with-eureka: true #true注册给eureka
注册服务消费者
创建一个基础的SpringBoot工程,命名为eureka-consumer,并在pom文件中引入必要的依赖内容,代码同上
在引导类上添加@EnableDiscoveryClient注解,将此微服务添加到注册中心
@SpringBootApplication @EnableDiscoveryClient @EnableCircuitBreaker //熔断 public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class,args); } }
修改默认配置:端口号,微服务名称,注册给eureka
server: port: 8887 spring: datasource: username: root password: root url: jdbc:mysql:///ssm driver-class-name: com.mysql.jdbc.Driver application: name: service-consumer eureka: client: service-url: defaultZone: http://localhost:10086/eureka register-with-eureka: true #true注册给eureka
测试:各一个项目都启动,
以上关于注册中心eureka就配置好了。