文档章节

spring cloud微服务之间的调用

S
 SimonTao
发布于 01/20 12:22
字数 670
阅读 222
收藏 0

SpringCloud中为了解决服务与服务调用的问题,提供了两种方式。RestTemplate和Feign。虽然这两种调用的方式不同,但在底层还是和HttpClient一样,采用http的方式进行调用的。对HttpClient进行的封装。下面我们来详细的介绍一下这两种方式的区别,我们首先看一下RestTemplate的方式。

RestTemplate方式调用

检测注册中心是是否将服务注册到服务中心。

直接上代码:

package com.mt.feign;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableEurekaClient
public class MtSpringcloudFeignClientApplication {
 public static void main(String[] args) {
 SpringApplication.run(MtSpringcloudFeignClientApplication.class, args);
 }

 @Bean
 public RestTemplate initRestTemplate() {
 return new RestTemplate();
 }
}

RestTemplate调用方式一

package com.mt.feign.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/client")
public class Controller {
 @Autowired
 private RestTemplate template;
 @GetMapping("/get")
 public Object get() {
 String result = template.getForObject("http://127.0.0.1:8085/server/get", String.class);
 return result;
 }
}

RestTemplate调用方式二

package com.mt.feign.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/client")
public class Controller {
 @Autowired
 private RestTemplate template;
 @Autowired
 private LoadBalancerClient loadBalancerClient;
 @GetMapping("/get")
 public Object get() {
 ServiceInstance serviceInstance = loadBalancerClient.choose("jilinwula-springcloud-feign-server");
 String url = String.format("http://%s:%s/server/get", serviceInstance.getHost(), serviceInstance.getPort());
 String result = template.getForObject(url, String.class);
 return result;
 }
}

在SpringClourd中提供了LoadBalancerClient接口。通过这个接口我们可以通过用户中心的Application的名字来获取该服务的地址和端口。

RestTemplate调用方式三

启动类更改:

package com..feign;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableEurekaClient
public class MtSpringcloudFeignClientApplication {
 public static void main(String[] args) {
 SpringApplication.run(MtSpringcloudFeignClientApplication.class, args);
 }
 @Bean
 @LoadBalanced
 public RestTemplate initRestTemplate() {
 return new RestTemplate();
 }
}

在RestTemplate实例化的地方添加了@LoadBalanced注解,我们使用RestTemplate时就该注解就会自动将调用接口的地址替换成真正的服务地址。下面我们看一下Controller中的改动:

package com.mt.feign.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping("/client")
public class Controller {
 @Autowired
 private RestTemplate template;
 @GetMapping("/get")
 public Object get() {
 String url = String.format("http://%s/server/get", "tcmp-measure-service");
 String result = template.getForObject(url, String.class);
 return result;
 }
}

代码和第一次的代码基本一样,唯一的区别就是获取服务地址和端口的地方替换成了注册中心中的Application的名字,并且我们的RestTemplate在使用上和第一次没有任何区别,只是在url中不同。

上述内容就是全部内容,在实际的项目开发中,这两种方式均可实现服务与服务间的调用,并且这两种方式都有弊端,所以并没有特别推荐的方式。

spring cloud微服务之间的调用

© 著作权归作者所有

S
粉丝 1
博文 22
码字总数 10298
作品 0
朝阳
私信 提问
加载中

评论(0)

基于springCloud的分布式架构体系

Spring Cloud作为一套微服务治理的框架,几乎考虑到了微服务治理的方方面面,之前也写过一些关于Spring Cloud文章,主要偏重各组件的使用,本次分享主要解答这两个问题:Spring Cloud在微服务...

Idea
2019/03/13
64
0
放弃 Dubbo,选择最流行的 Spring Cloud 微服务架构实践与经验总结

前言 在使用 Spring Cloud 之前,我们对微服务实践是没有太多的体会和经验的。从最初的开源软件云收藏来熟悉 Spring Boot,到项目中的慢慢使用,再到最后全面拥抱 Spring Cloud。 这篇文章给...

Java微服务
2019/01/08
0
0
基于Spring Cloud的微服务落地

微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持。 在Java生态圈,目...

烂猪皮
2018/04/20
29
0
中小企业对Spring Cloud微服务架构实践经验总结的一些思考

Spring Cloud 在国内中小型公司能用起来吗?从 2016 年初一直到现在,我们在这条路上已经走了一年多。 在使用 Spring Cloud 之前,我们对微服务实践是没有太多的体会和经验的。从最初的开源软...

Java大蜗牛
2018/08/13
91
4
从架构演进的角度聊聊 Spring Cloud 都做了些什么?

引用 作者:纯洁的微笑 Spring Cloud作为一套微服务治理的框架,几乎考虑到了微服务治理的方方面面,之前也写过一些关于Spring Cloud文章,主要偏重各组件的使用,本次分享主要解答这两个问题...

xixingzhe
2017/11/02
155
0

没有更多内容

加载失败,请刷新页面

加载更多

单利模式

花乐天
26分钟前
39
0
生成ssh_key

#生成包含mail的sshkeyssh-keygen -t rsa -C "your_email@example.com"#文件存放路径和文件名Enter file in which to save the key (/Users/teddy/.ssh/id_rsa): /Users/teddy/.ssh/id_r......

人中泰迪
27分钟前
60
0
代理模式

代理模式(Proxy Pattern)是只为其他对象提供一种代理,以控制对这个对象的访问,属于结构行模式。 代理模式一般包含三种角色: 抽象主题角色:抽象主题类的主要职责是声明真实主题与代理的...

xjkvkv
29分钟前
54
0
SQLPro for MySQL for Mac(SQL数据库管理工具) v1.0.315

sqlpro for mysql mac是一款运行在Mac OS平台上的SQL数据库管理工具,轻量级但功能强大的数据库mysql客户端,允许快速和简单的访问MySQL服务器,包括那些驻留在Amazon RDS,方便和快速的连接到...

麦克W
30分钟前
39
0
文件处理及分区管理

{6.shell脚本命令} [1.diff] diff file file1 **比较两个文件的不同 -c **显示周围的行 -u **按照一格式统一输出生成补丁 -r **比较两个目录中文件的不同 patch file file.patch **打补丁 -b...

osc_5ijle82k
38分钟前
52
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部