微服务之多个服务间调用

现在又一个学生微服务 user 和 学校微服务 school,如果user需要访问school,我们应该怎么做?

1.使用RestTemplate方式

添加config

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate; @Configuration
public class RestTempldateConfig {   @Bean
  @Scope("singleton")
  @LoadBalanced
  public RestTemplate restTempldate(){     RestTemplate restTemplate = new RestTemplate();
    restTemplate.getMessageConverters().clear();
    restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());     return restTemplate;
  } }

@LoadBalanced是一个负载均衡注解,默认是线性轮询策略找到服务

调用:

Result result = restTemplate.postForObject("http://SPRING-SCHOOL/school/findAll", null,Result.class);
return result;

SPRING-SCHOOL 为school应用名称

2.使用 openfeign 实现系统见调用

引入包

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

编写调用端代码

import com.lvlvstart.spring.demo.common.entity.School;
import com.lvlvstart.spring.demo.common.msg.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping; import java.util.List; @FeignClient("SPRING-SCHOOL")
public interface SchoolClient {   @PostMapping(value = "/school/findAll")
  public Result<List<School>> findAll();   @PostMapping(value = "/school/findById")
  public Result<School> findById(String schoolId);
}

启动类添加注解 @EnableFeignClients

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients("com.lvlvstart.spring.demo.common.client")
public class SpringUserApplication {   public static void main(String[] args) {
  SpringApplication.run(SpringUserApplication.class, args);
  } }

调用

@Autowired
private SchoolClient schoolClient; @PostMapping("findAllSchool")
public Result findAll(){
  return schoolClient.findAll();
}

openfeign 设置调用超时时间

feign:
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: basic

为什么 openfeign 的超时时间是 connectTimeout 和 readTimeout ?有知道的可以在评论区告诉我

完整代码请访问: https://github.com/halouprogramer/spring-cloud-demo

Spring Cloud 服务之间调用的更多相关文章

  1. spring cloud 服务A调用服务B自定义token消失,记录

    后端:spring cloud 前端:vue 场景:前端ajax请求,包装自定义请求头token到后台做验证,首先调用A服务,A服务通过Feign调用B服务发现自定义token没有传到B服务去; 原因 ...

  2. Spring Cloud服务间调用鉴权

    学习使用Spring Cloud 微服务间的调用都是RestFul风格,如何保证调用之间的安全性,这是一个很重要的问题. 通过查阅资料http://wiselyman.iteye.com/blog/2 ...

  3. spring cloud服务间调用feign

    参考文章:Spring Cloud Feign设计原理 1.feign是spring cloud服务间相互调用的组件,声明式.模板化的HTTP客户端.类似的HttpURLConnection.Apac ...

  4. Java Spring Cloud服务间调用

    A服务是用户服务,B服务某个需求需要用户信息,而B服务无法连接用户的数据库(分库),需要让A服务查询用户信息. 在B服务写一个接口去调用A服务的某个请求 /** * 访问A服务 */ @FeignCl ...

  5. Spring Cloud 服务端注册与客户端调用

    Spring Cloud 服务端注册与客户端调用 上一篇中,我们已经把Spring Cloud的服务注册中心Eureka搭建起来了,这一章,我们讲解如何将服务注册到Eureka,以及客户端如何调用服务 ...

  6. Spring Cloud 服务网关Zuul

    Spring Cloud 服务网关Zuul 服务网关是分布式架构中不可缺少的组成部分,是外部网络和内部服务之间的屏障,例如权限控制之类的逻辑应该在这里实现,而不是放在每个服务单元. Spring Cl ...

  7. Spring Cloud服务注册中心交付至kubernetes

    前言 服务发现原则: 各个微服务在启动时,会将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息 服务消费者可以从服务发现组件中查询到服务提供者的网络地址,并使用该地址来远程调用服务 ...

  8. 服务注册中心之ZooKeeper系列(二) 实现一个简单微服务之间调用的例子

    上一篇文章简单介绍了ZooKeeper,讲了分布式中,每个微服务都会部署到多台服务器上,那服务之间的调用是怎么样的呢?如图: 1.集群A中的服务调用者如何发现集群B中的服务提供者呢? 2.集群A中的服 ...

  9. 【spring cloud】在spring cloud服务中,打包ms-core失败,报错Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.0.4.RELEASE:repackage (default) on project

    在spring cloud服务中,有一个ms-code项目,只为所有的微服务提供核心依赖和工具类,没有业务意义,作为核心依赖使用.所以没有main方法,没有启动类. 在spring cloud整体打包 ...

随机推荐

  1. DevExpress MVVM<1>

    DevExpress MVVM 概念 模型 -定义数据和您的业务逻辑. 视图 -指定UI,包括绑定到ViewModel中的属性和命令的所有可视元素(按钮,标签,编辑器等). ViewModel-连接模 ...

  2. python-基础-def(*agrs,**kwagrs)

    1.*args,返回的数据类型为 tuple,使用方法如下图代码:**kwargs 返回的数据类型为 dict 使用方法如下图代码. def KeyWord_s(arg): print(arg,typ ...

  3. 【oracle】ORA-00947: 没有足够的值

    insert 时 对应NOT NULL 的列 必须有值

  4. [bzoj3456]城市规划:多项式,分治

    Description 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整个国家的任意两个城市都直接或 ...

  5. IPv6升级测试指南(Android/iOS/Mac)

    目录 我们升级到IPv6的原因 测试的时候的注意要点 Android/IOS/MAC测试总结 Android测试IPv6的方法 IOS端测试IPv6的方法 MAC浏览器端测试IPv6的方法 升级IPV ...

  6. java之封装

    java中通过将成员变量声明为private,再提供公共的public方法:setXxx()和getXxx()实现对该属性的操作,以实现以下目的: 隐藏一个类中不需要对外提供的实现: 使用者只能通过事 ...

  7. swoole视频直播

    $serv=new swoole_websocket_server("0.0.0.0",9501);$client=array();$serv->on("open& ...

  8. ThinkPHP调用其他控制器的方法,助手函数action()

    用法: $a = action('admin/user/detail',['id'=>10]); var_dump($a) 表示在其他控制器调用user控制器的detail方法,传了一个参数id

  9. PHP 将远程文件写入到pdf或者word

    /** * 下载 */public function download($ids = null){ //一些条件参数啥的 $data = []; //获取文件 $res = curl_post(url ...

  10. Linux中,Tomcat 怎么承载高并发(深入Tcp参数 backlog)

    一.前言 这两天看tomcat,查阅 tomcat 怎么承载高并发时,看到了backlog参数.我们知道,服务器端一般使用mq来减轻高并发下的洪峰冲击,将暂时不能处理的请求放入队列,后续再慢慢处理.其 ...