微服务框架——SpringCloud
1.SpringCloud微服务框架
a.概念:SpringCloud是基于SpringBoot的微服务框架
b.五大神兽:Eureka(服务发现)、Ribbon(客服端负载均衡)、Hystrix(断路器)、Zuul(服务网关)、Spring Cloud Config(分布式配置)
2.Eureka服务发现
a.组成:Eureka服务器和Eureka客户端
b.Eureka服务器(注册中心)
①新建springboot项目,依赖选择Eureka Server
②pom文件关键依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency> ...... </dependencies> ......
③application.yml文件
# 服务名称
spring:
application:
name: eureka-server
# 服务端口号
server:
port: 8081 #Eureka 相关配置
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://localhost:${server.port}/eureka/
# 是否从其他的服务中心同步服务列表
fetch-registry: false
# 是否把自己作为服务注册到其他服务注册中心
register-with-eureka: false
④启动类添加注解@EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication { public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
} }
⑤启动后访问 localhost:8081 可进入管理员界面
c.Eureka客户端(生产者)
①新建springboot项目,依赖选择 Eureka Discovery 、Web
②pom文件关键依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <dependencies>
<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-client</artifactId>
</dependency> ...... </dependencies> ......
③application.yml文件
spring:
application:
name: eureka-client-producer
server:
port: 8082 eureka:
client:
service-url:
defaultZone: http://localhost:8081/eureka/
④启动类添加注解@EnableEurekaClient
@SpringBootApplication
@EnableEurekaClient
public class EurekaClientProducerApplication { public static void main(String[] args) {
SpringApplication.run(EurekaClientProducerApplication.class, args);
} }
⑤创建controller供外部调用
@RestController
public class CommonController { @Value("${server.port}")
String port; @Value("${spring.application.name}")
String name; @RequestMapping(value = "/printProducer")
public String printProducer(String param){
return "[" + name + "]请求参数:" + param + ",服务端口:" + port;
}
}
3.Ribbon负载均衡
a.Eureka客户端(消费者) + Ribbon负载均衡
①新建springboot项目,依赖选择 Eureka Discovery 、Web 以及 Ribbon
②pom文件关键依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <dependencies>
<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-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency> ...... </dependencies> ......
③application.yml文件
spring:
application:
name: eureka-client-consumer
server:
port: 8085 eureka:
client:
service-url:
defaultZone: http://localhost:8081/eureka/
④启动类添加注解@EnableDiscoveryClient并且加入restTemplate
@SpringBootApplication
@EnableEurekaClient
public class EurekaClientConsumerApplication { public static void main(String[] args) {
SpringApplication.run(EurekaClientConsumerApplication.class, args);
} @Bean
@LoadBalanced
RestTemplate restTemplate()
{
return new RestTemplate();
} }
⑤使用restTemplate调用服务
@RestController
public class CommonController { @Resource
RestTemplate restTemplate; @RequestMapping(value = "/print")
public String print(String param){
String result = restTemplate.getForObject("http://EUREKA-CLIENT-PRODUCER/printProducer?param=" + param, String.class);
return result;
} }
4.Hystrix断路器
a.消费者增加Hystrix依赖,pom中添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
b.启动类添加注解@EnableHystrix
@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
public class EurekaClientConsumerApplication { ...... }
c.具体使用
@RestController
public class CommonController { @Resource
RestTemplate restTemplate; /* 断路器配置,当无法调用如下方法时,就会调用自定的errorCallback方法。 */
@HystrixCommand(fallbackMethod = "errorCallback")
@RequestMapping(value = "/print")
public String print(String param){
String result = restTemplate.getForObject("http://EUREKA-CLIENT-PRODUCER/printProducer?param=" + param, String.class);
return result;
} public String errorCallback(String param){
return "连接消费服务失败,请求参数:" + param;
} }
微服务框架——SpringCloud的更多相关文章
- 微服务框架SpringCloud(Dalston版)学习 (一):Eureka服务注册与发现
eureka-server eureka服务端,提供服务的注册与发现,类似于zookeeper 新建spring-boot工程,pom依赖: <dependency> <groupI ...
- 微服务框架SpringCloud与Dubbo
#v1.0.0# 1.背景 Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点.阿里巴巴近几年对开源社区的贡献不论在国内还是国外都是引人注目的,比如:JStorm捐赠给 ...
- 微服务框架——SpringCloud(三)
1.Zuul服务网关 作用:路由转发和过滤,将请求转发到微服务或拦截请求.Zuul默认集成了负载均衡功能. 2.Zuul实现路由 a.新建springboot项目,依赖选择 Eureka Discov ...
- 微服务框架——SpringCloud(二)
1.Feign声明式服务调用(负载均衡+熔断器) a.概念:Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单.Feign整合了Ribbon和Hys ...
- 微服务框架——SpringCloud(四)
1.Spring Cloud Config 分布式配置 a.Config服务器 ①新建springboot项目,依赖选择Config Server ②pom文件关键依赖 <parent> ...
- java框架之SpringCloud(1)-微服务及SpringCloud介绍
微服务概述 是什么 业界大牛 Martin Fowler 这样描述微服务: 参考[微服务(Microservices)-微服务原作者Martin Flower博客翻译]. 下面是关于上述博客中的部分重 ...
- 基于Spring-Cloud的微服务框架设计
基于Spring-Cloud的微服务框架设计 先进行大的整体的框架整理,然后在针对每一项进行具体的详细介绍
- 微服务框架Dubbo与Springcloud的区别
微服务框架Dubbo与Springcloud的区别 微服务主要的优势如下: 1.降低复杂度 将原来偶合在一起的复杂业务拆分为单个服务,规避了原本复杂度无止境的积累.每一个微服务专注于单一功能,并通过定 ...
- springcolud 的学习(二).SpringCloud微服务框架
为什么选择SpringCloud因为SpringCloud出现,对微服务技术提供了非常大的帮助,因为SpringCloud 提供了一套完整的微服务解决方案,不像其他框架只是解决了微服务中某个问题. 服 ...
随机推荐
- 从线性模型(linear model)衍生出的机器学习分类器(classifier)
1. 线性模型简介 0x1:线性模型的现实意义 在一个理想的连续世界中,任何非线性的东西都可以被线性的东西来拟合(参考Taylor Expansion公式),所以理论上线性模型可以模拟物理世界中的绝大 ...
- CentOS6和CentOS7
http://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708.iso net.ifnames= biosdevname ...
- nginx 容器反向代理网址的设置
先讲一下场景: nginx 容器要和SpringBoot 容器部署在一台机器上, nginx 为 SpringBoot 提供反向代理, 需要在 nginx.conf 中写上 SpringBoot 的 ...
- 【ShaderToy】基本操作——旋转
*继续:ShaderToy基础学习中d(`・∀・)b 对每个像素点进行旋转,其实加个公式就ok了啊. 对网格进行旋转: 代码如下: #define TUTORIAL 2 #define PI 3.14 ...
- java 根据经纬度坐标计算两点的距离算法
/** * @Desc 根据经纬度坐标计算两点的距离算法<br> * @Author yangzhenlong <br> * @Data 2018/5/9 18:38 */ p ...
- addEventListener解决多个window.onscroll共存的2个方法
方法1.(注意第一个和第二个的先后次序) window.onscroll=function(){console.log('第一个');} var oldMethod = window.onscroll ...
- mysql的The user specified as a definer (”@’%') does not exist 的解决办法
两种可能: 1.用户权限不够 赋给用户所有权限试试 mysql> grant all privileges on *.* to root@"%" identified by ...
- HttpClient的巨坑
之前做项目的时候,调用api都是使用的HttpWebRequest 最近一个项目改用HttpClient,用了之后,感觉很坑. 1.高并发情况下,造成tcp连接占用的端口无法释放(时间为2MSL,此时 ...
- Pytorch学习笔记(一)Numpy SciPy MatPlotlib Tutorial
英文原文链接:http://cs231n.github.io/python-numpy-tutorial/ Numpy Numpy是Python中科学计算的核心库.它提供了一个高性能的多维数组对象,以 ...
- String,下表和切片,分割
字符串介绍 1.字符串在内存中的存储 2.字符串的加法 3.字符串的格式化 1. 下标索引 所谓“下标”,就是编号,就好比超市中的存储柜的编号,通过这个编号就能找到相应的存储空间 字符串中" ...