SpringCloud是一个分布式的整体解决方案。Spring Cloud为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局锁,leader选举.分布式session,集群状态)中快速构建的工具,使用SpringCloud的开发者可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接。本篇只讲述SpringBoot与SpringCloud的整合以及简单使用,若要详细学习SpringCloud请参考其他文章或官方文档。

一.Spring Cloud分布式开发五大常用组件

1.服务发现 --- Netfix Eureka

2.客户端负载均衡 --- Netfix Ribbon

3.断路器 --- Netfix Hystrix

4.服务网关 --- Netfix Zuul

5.分布式配置 --- Spring Cloud Config

二.创建Eureka注册中心
创建一个空的项目,在该项目下创建一个eureka-server模块。

eureka-server所需要的依赖:

 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>1.4.4.RELEASE</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

2.1 配置eureka相关信息

server:
port: 8761 eureka:
instance:
hostname: eureka-server #eureka实例的主机名
client:
register-with-eureka: false #不把自己注册到eureka上
fetch-registry: false #不从eureka上来获取服务的注册信息
service-url:
defaultZon: http://localhost:8761/eureka/

2.2 开启注册中心功能 @EnableEurekaServer

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication { public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
} }

启动时eureka-server,若启动报错:java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava,则更换SpringBoot版本为1.5.12.RELEASE

三.服务提供者注册服务

3.1 创建应用provider-ticket

导入eureka依赖:

 <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>1.4.4.RELEASE</version>
</dependency>
@RestController
public class TicketController {
@Autowired
TicketService ticketService; @GetMapping("/ticket")
public String getTicket(){
System.out.println("8002端口应用");
return ticketService.getTicket();
}
}
@Service
public class TicketService {
public String getTicket(){
return "《海王》";
}
}

3.2 配置服务

server:
port: 8002
spring:
application:
name: provider-ticket eureka:
instance:
prefer-ip-address: true #注册服务的时候使用服务的ip地址
client:
service-url:
defaultZon: http://localhost:8761/eureka/

启动时若报错则跟换SpringBoot的版本为1.5.12.RELEASE版本。

3.3 注册多个服务

首先将服务用maven工具打包成jar,打包的时候遇到了一些问题。是SpringBoot与SpringCloud的版本不匹配导致的。下面是两者的版本对应明细

如果还是报错,看一下eureka-server项目是否成功启动了,在服务注册期间eureka-server要保持运行状态,打包成功后,修改provider-ticket的端口号:

server:
port: 8002

再次打包,然后使用java -jar provider-ticket-0.0.1-SNAPSHOT.jar命令分别启动两个jar包项目。查看http://localhost:8761/

上述状态说明两个服务已经成功地在Eureka上注册了。

四.发现消费服务

4.1 引入依赖

 <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

4.2 在启动类开启发现服务功能,并配置RestTemplate

@EnableDiscoveryClient //开启发现服务功能
@SpringBootApplication
public class ConsumerUserApplication { public static void main(String[] args) {
SpringApplication.run(ConsumerUserApplication.class, args);
}
@LoadBalanced //使用负载均衡机制
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}

4.3 配置发现服务信息

spring:
application:
name: consumer-user
server:
port: 8200 eureka:
instance:
prefer-ip-address: true #注册服务的时候使用服务的ip地址
client:
service-url:
defaultZon: http://localhost:8761/eureka/

4.4 调用服务

@RestController
public class UserController {
@Autowired
RestTemplate restTemplate;
@GetMapping("/")
@ResponseBody
public String buyTicket(){
String str = restTemplate.getForObject("http://PROVIDER-TICKET/ticket", String.class);
return str;
}
}

4.5 测试

启动consumer-user应用,访问http://localhost:8200/,查看是否有返回值,刷新页面看是否启用了负载均衡,将eureka中的两个服务都调用了。

SpringBoot分布式篇Ⅷ --- 整合SpringCloud的更多相关文章

  1. SpringBoot分布式篇Ⅶ --- 整合Dubbo

    在分布式系统中, 国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring,Spring Boot,Spring Cloud. 分布式系统: 一.Zookeepe ...

  2. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...

  3. SpringBoot消息篇Ⅲ --- 整合RabbitMQ

    知识储备:  关于消息队列的基本概念我已经在上一篇文章介绍过了(传送门),本篇文章主要讲述的是SpringBoot与RabbitMQ的整合以及简单的使用. 一.安装RabbitMQ 1.在linux上 ...

  4. SpringBoot检索篇Ⅳ --- 整合ElasticSearch

    知识储备:  关于ElasticSearch的基本使用我已经在上一篇文章介绍过了(传送门),本篇文章主要讲述的是SpringBoot与ElasticSearch的整合使用. SpringBoot与El ...

  5. SpringBoot缓存篇Ⅱ --- 整合Redis以及序列化机制

    一.Redis环境搭建 系统默认是使用ConcurrentMapCacheManager,然后获取和创建ConcurrentMapCache类型的缓存组件,再将数据保存在ConcurrentMap中 ...

  6. SpringBoot安全篇Ⅵ --- 整合Spring Security

    知识储备: 关于SpringSecurity的详细学习可以查看SpringSecurity的官方文档. Spring Security概览 应用程序的两个主要区域是"认证"和&qu ...

  7. SpringBoot整合SpringCloud搭建分布式应用

    什么是SpringCloud? SpringCloud是一个分布式的整体解决方案.SpringCloud为开发者提供了在分布式系统中快速构建的工具,使用SpringCloud可以快速的启动服务或构建应 ...

  8. SpringCloud实战 | 第四篇:SpringCloud整合Gateway实现API网关

    一. 前言 微服务实战系列是基于开源微服务项目 有来商城youlai-mall 版本升级为背景来开展的,本篇则是讲述API网关使用Gateway替代Zuul,有兴趣的朋友可以进去给个star,非常感谢 ...

  9. Springboot security cas整合方案-原理篇

    前言:网络中关于Spring security整合cas的方案有很多例,对于Springboot security整合cas方案则比较少,且有些仿制下来运行也有些错误,所以博主在此篇详细的分析cas原 ...

随机推荐

  1. 第二阶段:4.商业需求文档MRD:5.PRD-原型图

    页面原型图!

  2. Java 8 访问接口的默认方法

    Java 8 API提供了很多全新的函数式接口来让工作更加方便,有一些接口是来自Google Guava库里的,即便你对这些很熟悉了,还是有必要看看这些是如何扩展到lambda上使用的. 一.Opti ...

  3. jquery简单实现复选框的全选与反选

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. JAVA CONCURRENT FRAMEWORK

    1.ConcurrentHashMap 在并发中使用hashmap容易导致死锁,hashmap存在以下问题 1.线程不安全的hashmap 在多线程环境下使用hashmapPut操作时会引起死循环,因 ...

  5. 如何使用JMX来管理程序?

    什么是JMX JMX,全称Java Management Extensions,用于我们管理和监控java应用程序.JMX有以下用途: 监控应用程序的运行状态和相关统计信息. 修改应用程序的配置(无需 ...

  6. DEVOPS技术实践_08:声明式管道语法

    简介 前面简单的做了管道的实验,看了一下的它的效果 声明式管道是Groovy语法中的一个更简单和结构化的语法.下面主要学习明式管道语法. 一 声明式管道的基本结构 以上节的代码为例 node { de ...

  7. tomcat启动慢问题

    sed -i 's/securerandom\.source\=file\:\/dev\/random/securerandom\.source\=file\:\/dev\/urandom/g' $J ...

  8. tensorflow之tf.train.exponential_decay()指数衰减法

    exponential_decay(learning_rate,  global_steps, decay_steps, decay_rate, staircase=False, name=None) ...

  9. $loj\ 6045$ [雅礼集训 $2017\ Day8$] 价 网络流

    正解:网络流 解题报告: 传送门$QwQ$ 这题还,挺有趣的我$jio$得. 考虑依然先是照着最小割的模子建图呗,然后从意义上来分析,割一条边就相当于不吃一种减肥药/买一种药材.由已知得,买的药材数量 ...

  10. $Noip2014/Luogu2312$ 解方程

    $Luogu$ $Sol$ 枚举解+秦九韶公式计算+取模. $Code$ #include<iostream> #include<cstdio> #include<cst ...