springcloud 服务调用的两种方式

spring-cloud调用服务有两种方式,一种是Ribbon+RestTemplate, 另外一种是Feign。
Ribbon是一个基于HTTP和TCP客户端的负载均衡器,其实feign也使用了ribbon, 只要使用@FeignClient时,ribbon就会自动使用。

一、Ribbon

1.1
新建模块client-a
pom文件

<?xml version="1.0" encoding="UTF-8"?>
<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"><parent><artifactId>spring-cloud</artifactId><groupId>com.feng</groupId><version>0.0.1</version></parent><modelVersion>4.0.0</modelVersion><artifactId>client-a</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId></dependency></dependencies></project>

新建bootstrap.yml

server:port: 8910eureka:client:serviceUrl:defaultZone: http://localhost:8010/eureka/spring:application:name: client-a

ClientApplication, 这里我们需要注册一个RestTemplate,并且使用@LoadBalanced开启负载功能

/*** @author fengzp* @date 17/5/9* @email fengzp@gzyitop.com* @company 广州易站通计算机科技有限公司*/
@SpringBootApplication
@EnableDiscoveryClient
public class ClientApplication {public static void main(String[] args) {SpringApplication.run(ClientApplication.class, args);}@Bean@LoadBalancedRestTemplate restTemplate(){return new RestTemplate();}
}

测试用的controller

/*** @author fengzp* @date 17/5/9* @email fengzp@gzyitop.com* @company 广州易站通计算机科技有限公司*/
@RestController
public class TestController {@AutowiredRestTemplate restTemplate;@RequestMapping("/hi")public String hi(@RequestParam String id){return restTemplate.getForObject("http://service-a/hi?id="+id, String.class);}
}

1.2
为了测试负载功能,这里要再新建一个模块service-b, 和上一篇的service-a的代码基本相同,只把端口修改了就可以。
把client-a和service-b都启动成功后,打开eureka中心应该看到:

1.3
打开http://localhost:8910/hi?id=123

可以看到服务已经成功调用。

然后刷新页面

看到端口已经改变,说明负载功能成功实现

二、feign

2.1
新建模块client-b
pom文件

<?xml version="1.0" encoding="UTF-8"?>
<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"><parent><artifactId>spring-cloud</artifactId><groupId>com.feng</groupId><version>0.0.1</version></parent><modelVersion>4.0.0</modelVersion><artifactId>client-b</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId></dependency></dependencies>
</project>

bootstrap.yml

server:port: 8911eureka:client:serviceUrl:defaultZone: http://localhost:8010/eureka/spring:application:name: client-b

ClientApplication, 使用@EnableFeignClients开启feiginClient功能

/*** @author fengzp* @date 17/5/9* @email fengzp@gzyitop.com* @company 广州易站通计算机科技有限公司*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ClientApplication {public static void main(String[] args) {SpringApplication.run(ClientApplication.class, args);}}

这里新建一个ServiceAFeignClient来调用service-a服务

@Component
@FeignClient(value = "service-a") //这里的name对应调用服务的spring.applicatoin.name
public interface ServiceAFeignClient {@RequestMapping(value = "/hi")String hi(@RequestParam("id") String id);}

Controller

@RestController
public class TestController {@AutowiredServiceAFeignClient serviceAFeignClient;@RequestMapping("/hi")public String hi(@RequestParam String id){return serviceAFeignClient.hi(id);}
}

2.2

运行后的结果应该是和ribbon的相同。

个人感觉使用feign比较舒服,代码比较简洁。

转载于:https://www.cnblogs.com/handsome1013/p/10937559.html

springcloud 服务调用的两种方式相关推荐

  1. 将mysql服务注册到consul_【NoSQL】Consul中服务注册的两种方式

    一句话 用agent更优雅,适合agent遍布每个应用机的情况.用catalog更直接,操作更方便 前言 今天遇到写一个服务启动自注册的逻辑时产生了一点纠结,可以使用agent对象的register方 ...

  2. 配置文件App.config 生成和调用的两种方式

    方式一: App.config //app.config<?xml version="1.0" encoding="utf-8"?> <con ...

  3. WCF 客户端调用服务操作的两种方法

    本节的主要内容:1.通过代理类的方式调用服务操作.2.通过通道的方式调用服务操作.3.代码下载 一.通过代理类的方式调用服务操作(两种方式添加代理类) 1.手动编写代理类,如下: 客户端契约: 1 u ...

  4. spring-cloud调用服务两种方式

    spring-cloud调用服务有两种方式,一种是Ribbon+RestTemplate, 另外一种是Feign. Ribbon是一个基于HTTP和TCP客户端的负载均衡器,其实feign也使用了ri ...

  5. python接口服务两种方式(被调用、主动推送)

    项目中用python开发,要对外接口时,根据场景不同,一般有两种方式: 外部调用python接口,返回数据 接口主动向外部推送数据 1外部调用python接口,返回数据 这种方式一般可以通过http接 ...

  6. C#动态调用WCF接口,两种方式任你选。

    REFERENCE FROM : http://www.cnblogs.com/Leo_wl/p/4762784.html 写在前面 接触WCF还是它在最初诞生之处,一个分布式应用的巨作. 从开始接触 ...

  7. nacos实现服务注册与两种消费方式

    nacos实现服务注册与两种消费方式 运行nacos 服务注册实例 两种服务消费方式 RestTemplet Feign 测试 参考 运行nacos 预备环境:64位操作系统.64位JDK1.8+.M ...

  8. python循环展示大写字母_python调用大写函数python中字典的循环遍历的两种方式

    开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...

  9. Hystrix服务降级的两种处理方式@HystrixCommand注解和定义统一fallback接口

    项目地址: 链接:https://pan.baidu.com/s/1Mxo0ltvZbpz_r8mCU-mSpw  提取码:3j4a 问题答疑: Hystrix服务保护框架,在微服务中Hystrix能 ...

  10. putextra 传递对象_intent.putextra用法 使用Intent传递对象的两种方式 - 电脑常识 - 服务器之家...

    intent.putextra用法 使用Intent传递对象的两种方式 发布时间:2017-05-22 来源:服务器之家 Intent 的用法相信你已经比较熟悉了,我们可以借助它来启动活动.发送广播. ...

最新文章

  1. 【图像超分辨率】Image Super-Resolution by Neural Texture Transfer
  2. java中前加加和后加加(精彩案例)
  3. linux 有道 离线词典,有道词典离线版
  4. 同志,云原生了解一下?
  5. Twaver-HTML5基础学习(8)拓扑元素(Element)_网元(Element)、节点(Node)
  6. 以下不正确的C语言标识符是( ),以下不正确的C语言标识符是 _____。
  7. 武田宣布就拟收购Shire plc签署优先短期贷款工具协议及次级银团贷款协议和过桥信贷协议第二次修订
  8. 苹果电脑macos Ventura 13.0(22A380)dmg原版引导版镜像下载
  9. 20155232《网络对抗》 Exp1 PC平台逆向破解(5)M
  10. Top 7大开源数据可视化分析工具!
  11. 富士胶片首次参展贵阳数博会;佳能携多元化专业影像设备亮相CCBN2021;七彩虹建设国内首家GPU博物馆 | 全球TMT...
  12. 数字图像处理第五次作业——频域滤波器
  13. 电脑CapsLock大小写切换不回来?
  14. 海康硬盘录像机报警输出配置设置
  15. 两个对象数组去重的3种方法
  16. android手机 双清,什么是双清、三清、四清?安卓手机刷机为什么要双清或三清、四清?...
  17. Unity Shader入门精要笔记(五):其他数学相关介绍
  18. 安全L1-网络基础知识-基础篇01
  19. 你需要提供管理员权限才能删除文件夹
  20. 收入分配改革方案月内出台

热门文章

  1. 修改hadoop配饰文件文件后导致hive无法找到原有的dfs文件
  2. 通过debug过程分析Struts2什么时候将Action对象放入了值栈ValueStack中
  3. 错误;找不到或无法加载主类 com.sun.tools.javac.main的解决方案
  4. 从蒙到入门——JavaEE完整体系架构
  5. Springboot集成Quartz和RabbitMQ时设置为不自动运行
  6. 2014大学计算机操作系统,郑州大学软件学院2013-2014《计算机操作系统》试题及答案...
  7. linux tty 软件包,Linux TTY framework(2)_软件架构
  8. Hyperledger Fabric1.4超详细环境搭建 搭建不出来本博主倒立写代码
  9. MapReduce job任务源码提交流程
  10. 剑指 Offer 09. 用两个栈实现队列(day 03)