SpringCloud-day05-服务调用Ribbon
6.服务调用Ribbon
6.1Ribbon简介
前面讲了eureka服务注册与发现,但是结合eureka集群的服务调用并没有谈到。这里就要用到Ribbon,结合eureka,来实现服务的调用;
Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。
Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。
在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。
Ribbon与Eureka配合使用时的架构如下图:
6.2.Ribbon简单实用
Ribbon是客户端负载均衡,所以肯定集成再消费端,也就是consumer端
我们修改microservice-ticket-consumer-80
第一步: microservice-station-consumer-80,引入依赖,pom.xml 加入 ribbon相关依赖
<!-- Ribbon与Eureka 结合消费端负载均衡-->
<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-config</artifactId>
</dependency>
第二步: microservice-station-consumer-80 的 application.yml如下
server:
port: 80
context-path: / # 客户端负载均衡配置
eureka:
client:
register-with-eureka: false #false 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false
service-url:
defaultZone: http://eureka2001.wfd360.com:2001/eureka/,http://eureka2002.wfd360.com:2002/eureka/,http://eureka2003.wfd360.com:2003/eureka/
第三步:ribbon结合eureka来调用服务提供者,SpringCloudConfig也改成 要加个负载均衡配置 @LoadBalanced
第四步:因为和eureka整合,所以启动类TicketConsumerApplication_80 加个注解 @EnableEurekaClient
第五步:在服务提供者microservice-ticket-provider-1001的application.yml加下配置,指定下应用名称:
application:
name: microservice-ticket
直观图如下:
第六步:修改下TicketConsumerController的URL,改成指定的微服务应用名称,在第五步中我们的服务名称为:microservice-student
代码如下:private static final String URL="http://MICROSERVICE-TICKET/ticket"; // 特别注意 这里需要添加访问的一级地址 ticket,为了引起大家注意,提供的代码中没有这个
控制层全部代码如下:
package com.wfd360.controller; import com.wfd360.model.Ticket;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate; import java.util.List; /**
* Created by 姿势帝-博客园 on 2019/3/26.
* 欢迎添加笔者wx(851298348)共同探讨、学习!
*/ /**
* 知识点:@RestController注解相当于@ResponseBody + @Controller合在一起的作用。
*/
@Controller
@RequestMapping("/ticket")
public class TicketConsumerController {
@Autowired
private RestTemplate restTemplate; /**
*服务提供者名称 microservice-ticket
* 服务调用者这边的控制器里 url = http://MICROSERVICE-TICKET
*/
private static final String URL="http://MICROSERVICE-TICKET/"; /**
* 添加或者修改车票信息
*
* @param ticket
* @return
*/
@PostMapping(value = "/save")
@ResponseBody
public boolean save(Ticket ticket) {
System.out.println("======su=====save=========");
// return restTemplate.postForObject("http://localhost:1001/ticket/save", ticket, Boolean.class);
return restTemplate.postForObject(URL+"/save", ticket, Boolean.class);
} /**
* 查询车票信息
*
* @return
*/
@SuppressWarnings("unchecked")
@GetMapping(value = "/list")
@ResponseBody
public List<Ticket> list() {
// return restTemplate.getForObject("http://localhost:1001/ticket/list", List.class);
return restTemplate.getForObject(URL+"/list", List.class);
} /**
* 根据id查询车票信息
*
* @return
*/
@GetMapping(value = "/get/{id}")
@ResponseBody
public Ticket get(@PathVariable("id") Integer id) {
// return restTemplate.getForObject("http://localhost:1001/ticket/get/" + id, Ticket.class);
return restTemplate.getForObject(URL+"/get/" + id, Ticket.class);
} /**
* 根据id删除车票信息
*
* @return
*/
@GetMapping(value = "/delete/{id}")
@ResponseBody
public boolean delete(@PathVariable("id") Integer id) {
try {
// restTemplate.getForObject("http://localhost:1001/ticket/delete/" + id, Boolean.class);
restTemplate.getForObject(URL+"/delete/" + id, Boolean.class);
return true;
} catch (Exception e) {
return false;
}
}
}
第七步:测试 ,先启动3个注册中心,在启动服务提供者,最后启动消费者
访问:http://localhost/ticket/list ,结果如下,则配置成功
ribbon的基本使用结束,案例代码见 v5版本!
SpringCloud-day05-服务调用Ribbon的更多相关文章
- SpringCloud商品服务调用方式之Ribbon
1.创建order_service项目 pom依赖 <dependency> <groupId>org.springframework.boot</groupId> ...
- 【微服务】之五:轻松搞定SpringCloud微服务-调用远程组件Feign
上一篇文章讲到了负载均衡在Spring Cloud体系中的体现,其实Spring Cloud是提供了多种客户端调用的组件,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使 ...
- spring cloud 微服务调用--ribbon和feign调用
这里介绍ribbon和feign调用两种通信服务调用方式,同时介绍如何引入第三方服务调用.案例包括了ribbon负载均衡和hystrix熔断--服务降级的处理,以及feign声明式服务调用.例子包括s ...
- SpringCloud之服务调用
1.Ribbon 1.1负载均衡LB 全称Load Balance,将用户的请求平摊到多个服务器上,从而达到系统的HA.集中式LB:在服务消费者和服务提供者之间使用独立的LB设施,如硬件,由该设施负责 ...
- SpringCloud商品服务调用方式之feign
简介:改造电商项目 order-service服务 调用商品服务获取商品信息 Feign: 伪RPC客户端(本质还是用http) 官方文档: https://cloud.spring.io/sprin ...
- 三、springcloud之服务调用Feign
一.背景 项目中接口调用: Httpclient Okhttp Httpurlconnection RestTemplate 微服务提供了更简单,方便的Feign 二.Feign简介 Feign是一个 ...
- 微服务SpringCloud之服务调用与负载均衡
上一篇我们学习了服务的注册与发现,本篇博客是在上一篇的基础上学习服务的调用.上一博客主要创建了Eureka的服务端和一个Client,该Client包含了一个Controller用来提供对外服务供外部 ...
- SpringCloud微服务之Ribbon负载均衡(一)
什么是微服务?什么是SpringCloud? 微服务是一种架构的模式,它提倡将一个应用程序划分成很多个微小的服务,服务与服务之间相互协调.相互配合.每个服务运行都是一个独立的进程,服务与服务之间采用轻 ...
- 四、springcloud之服务调用Feign(二)
一.Fegin的常见应用 Feign的Encoder.Decoder和ErrorDecoder Feign将方法签名中方法参数对象序列化为请求参数放到HTTP请求中的过程,是由编码器(Encoder) ...
- springCloud微服务调用失败【CannotGetJdbcConnectionException: Failed to obtain JDBC Connection】
详情如下: 2019-07-28 10:56:18.229 ERROR 16212 --- [nio-8081-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet ...
随机推荐
- c#委托之浅析
前言: 这章我们将弄懂,委托是什么?有什么作用?在什么样的场景下可以启到什么作用? 委托适用的场景:当确定处理一个任务时,不确定其处理任务的方法时可使用,这样可以提高扩展性,调用符合条件的处理方法,避 ...
- (一)CentOS6.3安装Hadoop2.6.5
1.准备环境 下载CentOS: https://www.centos.org/download/ 下载JDK: https://www.oracle.com/technetwork/java/jav ...
- Python 目录整理
基础部分: 1 常量 2 字符编码 字符编码补充 3 编码集 4 break与continue 5装饰器 6 迭代器 7生成器 8面向过程 9模块 10包 11 递归调用 12文件的用途 13类 ...
- 03-在tomcat部署网站多个网站
在Tomcat服务器发布两个项目 CRM OA server.xml配置文件 <Context docBase="C:\crm" path="/crm" ...
- Spark-RPC理解
基本架构 Akka Actor式RPC架构 Spark采用的是AkkaActor架构实现RPC,但是实际使用过程为了兼容不同节点之间的文件下载,采用Netty来实现Actor功能. Spark RPC ...
- ie9 placeholder兼容代码方法
function guid() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r ...
- React基础概念
Hello Wrold ReactDOM.render( <h1>Hello, world!</h1>, document.getElementById('root') ); ...
- jQuery人民币转大写,C#人命币转大写
jQuery人民币转大写 function convertCurrency(money) { //汉字的数字 var cnNums = new Array('零', '壹', '贰', '叁', '肆 ...
- vue中提交表单后如何清空
只需要在提交方法里写上this.form={brand_right:0}即可.
- ubuntu 14.04解决wifi连接不稳定问题
问题描述:开机后wifi功能可以使用,一段时间后无法上网,重启后正常. 三种方法: 一 将/etc/ppp/options 文件第232行中的 cp-echo-failure 4 改为 lcp-ech ...