Spring-Cloud
注册中心的三大体系 1.服务注册中心 2.服务消费者(发起请求的服务) 3.服务提供者(受理请求的服务)
1.创建注册中心:
pom.xml
<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>
<groupId>spring-cloud</groupId>
<artifactId>spring_cloud_eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.7.RELEASE</version>
</parent>
<!-- dependencyManagement dependencies区别 如果在dependencyManagement 设置了版本信息 那在dependencies就不需要设置版本啦 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
</project>

app.class
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class ServerApp {
public static void main(String[] args) {
SpringApplication.run(ServerApp.class, args);
}
}
application.properties
#端口名称
server.port=6699
#服务名称
spring.application.name=master-service
#设置为false代表不注册自己服务
eureka.client.register-with-eureka=false
#由于注册中心的只测就是维护服务示例,他并不需要去检索服务,所以设置为false
eureka.client.fetch-registry=false
#地址
eureka.instance.hostname=127.0.0.1
#访问地址
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

2.创建服务端注册到注册中心
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.7.RELEASE</version>
</parent>

<dependencies>
<!-- 添加对Web的支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 要注册的需要引用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- 实现负载均衡引入客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<!-- 加入断路器依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
</dependencies>
<!--依赖管理,用于管理spring-cloud的依赖,其中Camden.SR3是版本号 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
app.class
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
public class CommonApp {
public static void main(String[] args) {
SpringApplication.run(CommonApp.class, args);
}
}
applicationContext.xml
#服务名称
spring.application.name=server-common
#项目端口
server.port=6688
#设置服务器地址
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:6699/eureka/

3.Spring-Cloud服务端添加账号密码保护
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
application.properties
#添加服务端密码
security.user.password=cloudpwd
#添加服务端账号
security.user.name=clouduname
如果注册中心设置了账号密码 那么服务端在设置注册中心的链接上需要以如下格式进行填写
http://账号:密码@127.0.0.1:6699/eureka/

Spring-Cloud-Ribbon实现负载均衡
1.负载均衡的算法:默认是轮询,还有随机,还可自定义算法
2.实现过程
1.引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
2.为RestTemplate添加@loadeBalanced注解
@Bean
@LoadBalanced
public RestTemplate newRestTemplate(){
return new RestTemplate();
}
3.RestTemplate 常用方法
1.Get请求的接口
restTemplate.getForEntity(url,Type.class);

getForEntity的第一个参数为我要调用的服务的地址,这里我调用了服务提供者提供的/hello接口,注意这里是通过服务名调用而不是服务地址,如果写成服务地址就没法实现客户端负载均衡了。
getForEntity第二个参数String.class表示我希望返回的body类型是String

restTemplate.getForEntity("请求地址?name={name}", 返回值类型.class, Map<key,Value>);
Map<String, Object> maps = new HashMap<String,Object>();
maps.put("name", "value1");
ResponseEntity<List> responseEntity = restTemplate.getForEntity("http://server-order/queryAll?name={name}", List.class, maps);

getForEntity的第一个参数为我要调用的服务的地址,这里我调用了服务提供者提供的/hello接口,注意这里是通过服务名调用而不是服务地址,如果写成服务地址就没法实现客户端负载均衡了。
getForEntity第二个参数String.class表示我希望返回的body类型是String
maps 为请求链接内的参数值 ?name={name} 括号里面的name必须与map的key对应才能附上值

getForObject(url,Type.class/Object.class)
请求地址
返回值类型 也可以是一个实体对象

Spring-Cloud-Hystrix 容错保护
1.相当于当出现调用失败时执行默认的其他方法
2.实现过程
1.pom.xml
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
2.在启动类上增加
@EnableCircuitBreaker注解
3.在服务层指定如果请求失败执行的方法
@HystrixCommand(fallbackMethod = "exceptionMethod")exceptionMethod 方法名
第二种实现方法.配合 feign实现
@FeignClient(value = "server-order",fallback = OrderHyStrIxServer.class) 表名呗feign管理fallback = OrderHyStrIxServer.class表明要容错机制的类
@Service
@FeignClient(value = "server-order",fallback = OrderHyStrIxServer.class)
public interface OrderServer {
@RequestMapping(value = "queryAll")
public List<String> orderAllInfo(@RequestParam(value = "name",defaultValue = "defaultValue")String name);
}
实现类
@Component
public class OrderHyStrIxServer implements OrderServer {

public List<String> orderAllInfo(String name) {
// TODO Auto-generated method stub
List<String> strs = new ArrayList<String>();
strs.add("进入异常回调方法!!");
return strs;
}

Spring-Cloud-feign 声明式服务调用(相当于加上一层代理,用户调用代理即可)
1.实现过程
pom.xml:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
app.class
@EnableFeignClients
server
@Service
@FeignClient(name = "server-common")//代理的服务名
public interface FeignServer {
@RequestMapping(value = "SendHystrix", method = RequestMethod.GET)//代理的服务的接口
public List<String> feignSend();
}
Controller
@Autowired
private FeignServer feignServer;
@RequestMapping(value = "FeignSendOrder")
public List<String> feignSendOrder(){
System.out.println("调用feign ---> common --->Order");
return feignServer.feignSend();
}
application.properties
#服务名称
spring.application.name=server-feign
#项目端口
server.port=6644
#注册中心地址
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:6699/eureka/
#开启hystrix声明事服务
feign.hystrix.enabled=true

转载于:https://www.cnblogs.com/lvwqq/p/8854829.html

Spring-cloud-eureka-robbin-hystrix-feign相关推荐

  1. Spring Cloud (Eureka,Feign,Hystrix整合)

    Spring Cloud(Eureka,Feign,Hystrix整合) Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代 ...

  2. 【夯实Spring Cloud】Spring Cloud中使用Hystrix实现断路器原理详解(上)

    本文属于[夯实Spring Cloud]系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货.系列目录如下: [夯实Spring Cloud]D ...

  3. Spring Cloud入门教程-Hystrix断路器实现容错和降级

    简介 Spring cloud提供了Hystrix容错库用以在服务不可用时,对配置了断路器的方法实行降级策略,临时调用备用方法.这篇文章将创建一个产品微服务,注册到eureka服务注册中心,然后我们使 ...

  4. 10 在Spring Cloud中使用Hystrix

    Hystrix主要用于保护调用服务的一方,如果被调用的服务发生故障,符合一定条件,就会开启断路器对调用的程序进行隔离. 1.准备测试程序 在进行Spring Cloud整合Hystrix之前,我们先准 ...

  5. 在spring cloud eureka中使用ip而不是hostname

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_34173549/article/details/80640012 众所周知,spring cl ...

  6. Spring Cloud Eureka 自我保护机制

    Spring Cloud Eureka 自我保护机制 Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这 ...

  7. Spring Cloud Eureka 入门 (三)服务消费者详解

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "真正的进步 ...

  8. 3.spring cloud + zookeeper注册中心 + Feign调用案例

    3.spring cloud + zookeeper注册中心 + Feign调用案例 3.1.pom.xml定义 <?xml version="1.0" encoding=& ...

  9. eureka 之前的服务如何关闭_干货分享 | 服务注册中心Spring Cloud Eureka部分源码分析...

    友情提示:全文13000多文字,预计阅读时间10-15分钟 Spring Cloud Eureka作为常用的服务注册中心,我们有必要去了解其内在实现机制,这样出现问题的时候我们可以快速去定位问题.当我 ...

  10. Spring Cloud Eureka 入门 (二)服务提供者详解

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "优秀不是过 ...

最新文章

  1. 铁路运货的运费与路程远近java_JAVA铁路运货的运费与路程远近及货物的重 – 手机爱问...
  2. Apache配置代理服务器的方法(2)
  3. 数字图像处理中常用的插值方法
  4. 决策树c4.5编译,
  5. sql-labs page2(21~38) 解题过程记录
  6. Caffe应用篇----文件格式转换
  7. 手机modem开发(1)---MTK modem NVRAM
  8. mysql启用keepalive_mysql主从之keepalive+MySQL高可用
  9. 浏览器保存密码后文本框出现黄色背景的解决方案
  10. 前沿 | IBM语音识别已接近人类水平
  11. vuex mapstate_Vuex从使用到原理解析
  12. iphone clearColor 不起作用问题
  13. 从SynchronizedCollection说起
  14. Ehcache 整合Spring 使用页面、对象缓存(转)
  15. windows 游戏编程大师技巧(第二版)学习之路-1
  16. linux中fork() 函数详解
  17. c语言实验报告函数及其应用,2020c语言实验报告函数总结心得.docx
  18. 利用讯飞语音听写接口实现实时语音转写。
  19. 基于波动率的期权交易策略分析
  20. 华东师范大学计算机与电子科技大学比较,报录比

热门文章

  1. python的整数类型有几种进制_(一)Python入门-2编程基本概念:08整数-不同进制-其他类型转换成整数...
  2. java cad polyline_CAD中的各种Polyline
  3. 澳大利亚研究者研制出一种计算机芯片 他们,快讯:几乎看不见的3D打印机器人;西澳大利亚大学的研究人员开发出一种保护生态机器鱼;效率达CPU一万倍的神经形态芯片发布!...
  4. react native 开发笔记(二)
  5. java继承的生活例子,帮你突破瓶颈
  6. 进阶学习(3.7) Flyweight Pattern 享元模式
  7. java 流程控制_《Java基础知识》Java流程控制
  8. 四川网络推广介绍什么样的网站架构更能吸引蜘蛛爬行抓取?
  9. 网络推广——网络推广专员浅析新站应该如何提升长尾关键词的排名
  10. 浅析网站URL优化有哪些问题需要注意呢?