Spring Cloud 2-Ribbon 客户端负载均衡(二)

1.Hello-Service服务端配置
在pom文件中添加Eureka客户端依赖,并配置Eureka注册中心的服务地址.也可以不配置,那就会使用默认的localhost的8761
端口.
pom.xml
<!-- eureka 客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
application.yml
spring:
application:
name: hello-service
server:
port: 8080
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
启动两个service
mvn package
打包java -jar jar包 --server.port=端口
启动并指定端口
使用bat脚本可以快速启动服务,
start java -jar hello-service-0.0.1-SNAPSHOT.jar --server.port=8081
start java -jar hello-service-0.0.1-SNAPSHOT.jar --server.port=8082
启动 8081
8082
两个端口提供服务

2.Ribbon客户端配置
pom.xml
<!-- ribbon 客户端 负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
application.yml
spring:
application:
name: ribbon-client
server:
port: 8085
hello:
serviceUrl: http://localhost:8081/hello/
http://localhost:8081/hello 是hello-service的服务请求地址,用于非负载均衡
的情况下,Bean的配置不需要加@LoadBalanced
注解;
在Ribbon中可以直接调用HELLO-SERVICE
服务注册的名字使用服务,已达到负载均衡
的目的.
Application.java
@SpringBootApplication
public class RibbonClientApplication {
@LoadBalanced
@Bean
RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(RibbonClientApplication.class, args);
}
}
@LoadBalanced
客户端负载均衡模板
Controller.java
@RestController
@RequestMapping("con")
public class ConsumerController {
@Autowired
private RestTemplate template;
@Value("${hello.serviceUrl}")
private String helloServiceUrl;
/**
* 非负载均衡请求,不需要@LoadBalance
* @return
*/
@GetMapping("hello01")
public String hello01(){
return template.getForObject(helloServiceUrl, String.class);
}
/**
* 负载均衡请求 HELLO-SERVICE 服务在Eureka上注册的名字
* @return
*/
@GetMapping("hello02")
public String hello02(){
return template.getForObject("http://HELLO-SERVICE/hello", String.class);
}
}
3.启动服务并验证
依次启动Eureka注册中心,2个Hello-Service和Ribbon-Client

访问: http://localhost:8085/con/hello02
Hello World!
验证负载均衡和高可用,可以直接访问服务,然后关闭其中一个服务再访问
第一次访问: http://localhost:8085/con/hello02
Hello World!
可以直接访问到服务.然后关闭其中一个服务再访问

访问: http://localhost:8085/con/hello02 可能会看到如下报错
{"timestamp":"2018-12-21T04:01:02.288+0000","status":500,"error":"Internal Server Error","message":"I/O error on GET request for \"http://HELLO-SERVICE/hello\": Connection refused: connect; nested exception is java.net.ConnectException: Connection refused: connect","path":"/con/hello02"}
继续访问,就会正常被请求到了
访问: http://localhost:8090/con/hello02
Hello World!
访问: http://localhost:8090/con/hello02
Hello World!
访问: http://localhost:8090/con/hello02
Hello World!
默认服务采用轮询方式提供服务,每两次会有一次失败.多访问几次后,就只有运行的服务提供服务.
Spring Cloud 2-Ribbon 客户端负载均衡(二)的更多相关文章
- Spring Cloud - 切换Ribbon的负载均衡模式
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模 ...
- Spring Cloud Gateway Ribbon 自定义负载均衡
在微服务开发中,使用Spring Cloud Gateway做为服务的网关,网关后面启动N个业务服务.但是有这样一个需求,同一个用户的操作,有时候需要保证顺序性,如果使用默认负载均衡策略,同一个用户的 ...
- spring cloud --- Ribbon 客户端负载均衡 + RestTemplate + Hystrix 熔断器 [服务保护] ---心得
spring boot 1.5.9.RELEASE spring cloud Dalston.SR1 1.前言 当超大并发量并发访问一个服务接口时,服务器会崩溃 ,不仅导致这个接口无法 ...
- spring cloud --- Ribbon 客户端负载均衡 + RestTemplate ---心得【无熔断器】
spring boot 1.5.9.RELEASE spring cloud Dalston.SR1 1.前言 了解了 eureka 服务注册与发现 的3大角色 ,会使用RestTem ...
- springcloud(十二):Ribbon客户端负载均衡介绍
springcloud(十二):Ribbon客户端负载均衡介绍 Ribbon简介 使用分布式微服务脚骨的应用系统,在部署的时候通常会为部分或者全部微服务搭建集群环境,通过提供多个实例来提高系统的稳定型 ...
- SpringBoot(三) - Ribbon客户端负载均衡,Zuul网关,Config配置中心
1.Ribbon客户端负载均衡 1.1 依赖 1.2 配置信息 # feign默认加载了ribbon负载均衡,默认负载均衡机制是:轮询 # 负载均衡机制是添加在消费端(客户端)的,如果改为随机,指定服 ...
- Spring Cloud Ribbon——客户端负载均衡
一.负载均衡负载均衡(Load Balance): 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性.其意思 ...
- spring cloud 系列第3篇 —— ribbon 客户端负载均衡 (F版本)
源码仓库地址:https://github.com/heibaiying/spring-samples-for-all 一.ribbon 简介 ribbon是Netfix公司开源的负载均衡组件,采用服 ...
- 笔记:Spring Cloud Ribbon 客户端负载均衡
Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,基于 Netflix Ribbon 实现,通过Spring Cloud 的封装,可以让我们轻松的将面向服 ...
随机推荐
- SQLserver查询库中包含某个字段的表
select [name] from [TPMS_PRD].[dbo].sysobjects where id in(select id from [TPMS_PRD].[dbo].syscolumn ...
- Winform开发框架中工作流模块的动态处理
在工作流处理表中,首先我们区分流程模板和流程实例两个部分,这个其实就是类似模板和具体文档的概念,我们一份模板可以创建很多个类似的文档,文档样式结构类似的.同理,流程模板实例为流程实例后,就是具体的一个 ...
- Django配置404页面
一.settings配置 1.首先需要在settings中将DEBUG由原来的True改为False DEBUG = False 2.需要设置 ALLOWED_OSTS = ["*" ...
- js计算两个日期的月份差?
//两个日期 var date1 = '2013-03-26'; var date2 = '2011-01-10'; // 拆分年月日 date1 = date1.split('-'); // 得到月 ...
- Superset安装与使用
参考: https://www.jianshu.com/p/b02fcea7eb5b
- python 元祖字典集合
一.元祖 1.用途:记录多个值,当多个值没有改变的需求,元祖不能修改,但元祖里的数据的数据可以修改. 2.定义方式:在()内用逗号分隔开多个任意值. 思考:如果定义一个只有一个一个值的元祖. # t ...
- H5的段落标签、图片标签、列表标签与链接标签
段落标签 (1)<p>段落标签</p> (2)<nobr>强制不换行标签,会出现滚动条</nobr> (3)<pre>保留原始排版标签< ...
- bzoj3277-串
Code #include<cstdio> #include<iostream> #include<cmath> #include<cstring> # ...
- Django 路由系统
Django 路由系统 基本格式 from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 参数说 ...
- Django 分页组件替换自定义分页
Django的分页器(paginator) 总之不太好用我们还是用自己的好一些 自定义分页器 分页实现源码 """ 自定义分页组件 """ ...