Spring Cloud 分布式服务架构(微服务架构)
目前主流实现:Dubbo+zookeeper和SpringBoot+Cloud
利用上述技术都可以将功能服务分散到不同服务器部署,然后实现服务间通信(调用)。
请求-->处理1-->处理2-->响应。意思可以将处理1和处理2做成独立服务分开部署,然后再进行RPC(Dubbo)或HTTP请求和响应模式(Cloud)交互。
Dubbo和Cloud的区别如下:
- Dubbo和Cloud服务调用机制不同,一个RPC、一个HTTP请求响应
- Dubbo一般和zookeeper结合管理服务,Cloud内置集成Eureka管理服务
- Cloud提供一套服务管理的完整方案、Dubbo需要跟其他技术集成使用。
- Cloud仅用于Rest服务管理、Dubbo是将组件服务化管理
Spring Cloud
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。
- Spring Cloud Netflix
是对Netflix开发的一套分布式服务框架的封装,包括服务的发现和注册,负载均衡、断路器、REST客户端、请求路由等。
- Spring Cloud Config
将配置信息*化保存, 配置Spring Cloud Bus可以实现动态修改配置文件
- Spring Cloud Bus
分布式消息队列,是对Kafka, MQ的封装
- Spring Cloud Security
对Spring Security的封装,并能配合Netflix使用
- Spring Cloud Zookeeper
对Zookeeper的封装,使之能配置其它Spring Cloud的子项目使用
-
Spring Cloud Eureka
Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件中的一部分,它基于Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能。
基于SpringCloud实现服务注册、查找、负载功能
搭建SpringCloud服务中心(eureka)
-
创建maven project,引入pom.xml定义
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.7.RELEASE</version> <relativePath/> </parent> <properties> <java.version>1.7</java.version> </properties> <dependencies> <!-- springcloud-eureka-server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>1.3.4.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Brixton.SR5</version> <type>pom</type> </dependency> </dependencies> </dependencyManagement>
-
追加application.properties中eureka参数定义
#eureka #spring.application.name=EUREKA-SERVER eureka.client.registerWithEureka=false eureka.client.fetchRegistry=false eureka.client.serviceUrl.defaultZone=http://localhost:7777/eureka
-
追加启动类,使用@EnableEurekaServer
@EnableEurekaServer//启动eureka服务器 @SpringBootApplication public class EurekaServerBootApplication { public static void main(String[] args){ SpringApplication.run(EurekaServerBootApplication.class, args); } }
-
启动程序测试
打开浏览器输入http://localhost:7777
向SpringCloud注册Service服务(Restful服务)
-
在工程中pom.xml中引入jar包定义
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Brixton.SR5</version> <type>pom</type> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.3.4.RELEASE</version> </dependency> <!-- 指定导入jackson包版本,避免eureka和boot冲突 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.8.8</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.8</version> </dependency> </dependencies>
-
在application.properties文件追加eureka定义
spring.application.name=PAPER-SERVICE eureka.client.serviceUrl.defaultZone=http://localhost:7777/eureka
-
在启动类前追加@EnableDiscoveryClient
@EnableDiscoveryClient @SpringBootApplication @MapperScan(basePackages="cn.xdl.ovls.paper.dao") public class PaperBootApplication { public static void main(String[] args) { SpringApplication.run(PaperBootApplication.class, args); } }
-
启动程序测试
先启动Eureka服务中心项目,然后启动服务项目。
浏览器输入http://localhost:7777就可以查看注册实例
SpringCloud服务调用(RestTemplate模式)
-
在项目中pom.xml引入定义
<!-- ribbon --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.3.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> <version>1.3.4.RELEASE</version> </dependency> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Brixton.SR5</version> <type>pom</type> </dependency> </dependencies> </dependencyManagement>
-
在application.properties追加eureka参数
eureka.client.serviceUrl.defaultZone=http://localhost:7777/eureka
-
创建RestTemplate对象,追加@LoadBalanced,启用ribbon负载功能
@Configuration public class RestTemplateConfiguration { @Bean @LoadBalanced//追加ribbon负载功能 public RestTemplate createRestTemplate(){ return new RestTemplate(); } }
-
注入RestTemplate对象,利用服务名调用Restful服务
@Autowired private RestTemplate template; //url规则: http://注册服务名/请求名 ResponseResult result = template.getForObject( "http://SUBJECT-SERVICE/subject", ResponseResult.class);
-
在启动类前,追加@EnableDiscoveryClient
@EnableDiscoveryClient//启用服务注册和查找 @SpringBootApplication public class ExamWebBootApplication { public static void main(String[] args){ SpringApplication.run(ExamWebBootApplication.class, args); } }
-
启动测试
SpringCloud服务调用(Feign接口对象模式)
-
在pom.xml中追加ribbon和feign定义
<dependencies> <!-- ribbon --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.3.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> <version>1.3.4.RELEASE</version> </dependency> <!-- feign调用 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> <version>1.3.4.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Brixton.SR5</version> <type>pom</type> </dependency> </dependencies>
-
在application.properties中配置eureka参数
eureka.client.serviceUrl.defaultZone=http://localhost:7777/eureka
-
定义远程Feign接口,追加@FeignClient标记
@FeignClient(name="SUBJECT-SERVICE")//指定注册服务名 public interface SubjectRemote { //方法参考Controller定义编写 @RequestMapping(value="/subject",method=RequestMethod.GET) public ResponseResult loadSubjects(); }
-
注入Feign接口对象调用远程服务
@Autowired private SubjectRemote subjectRemote; //利用Feign接口对象方法调用远程服务 ResponseResult result = subjectRemote.loadSubjects();
-
在主入口类中追加@EnableFeignClients和@EnableDiscoveryClient标记
@EnableFeignClients//启用Feign接口模式调用服务 @EnableDiscoveryClient//启用服务注册和查找 @SpringBootApplication public class ExamWebBootApplication { public static void main(String[] args){ SpringApplication.run(ExamWebBootApplication.class, args); } }
-
启动程序测试
推荐阅读
-
Spring Cloud 分布式服务架构(微服务架构)
-
spring cloud微服务分布式云架构 - Spring Cloud简介
-
Spring Cloud微服务架构:分布式配置中心
-
Spring Cloud构建微服务架构:分布式服务跟踪(跟踪原理)【Dalston版】
-
Spring Cloud构建微服务架构:分布式服务跟踪(抽样收集)【Dalston版】
-
spring cloud微服务分布式云架构--hystrix的使用
-
spring-cloud Finchley 微服务架构从入门到精通【六】BUS RabbitMQ 配置刷新
-
springCloud Finchley 微服务架构从入门到精通【五】高可用分布式配置中心
-
手把手教你用Spring Cloud和Docker构建微服务 博客分类: 互联网技术spring boot分布式
-
手把手教你用Spring Cloud和Docker构建微服务 博客分类: 互联网技术spring boot分布式