首页 > 其他分享 >微服务之间的调用方式RestTemplate和FeignClient

微服务之间的调用方式RestTemplate和FeignClient

时间:2023-06-02 21:06:31浏览次数:36  
标签:FeignClient 调用 users restTemplate RestTemplate class public String


SpringCloud服务间的调用有两种方式:RestTemplate和FeignClient。不管是什么方式,他都是通过REST接口调用服务的http接口,参数和结果默认都是通过jackson序列化和反序列化。因为Spring MVC的RestController定义的接口,返回的数据都是通过Jackson序列化成JSON数据。

一、RestTemplate

使用这种方式,只需要定义一个RestTemplate的Bean,设置成LoadBalanced即可。

如下示例:

@Configuration
public class SomeCloudConfiguration {
@LoadBalanced
@Bean
RestTemplate restTemplate() {
    return new RestTemplate();
}
}

这样我们就可以在需要用的地方注入这个bean使用:

public class SomeServiceClass {
@Autowired
private RestTemplate restTemplate;
public String getUserById(Long userId) {
    UserDTO results = restTemplate.getForObject("http://users/getUserDetail/" + userId, UserDTO.class);
    return results;
}
}

其它示例参考:

@SpringBootApplication
public class SleuthClientApplication {
  
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
  
    public static void main(String[] args) {
        SpringApplication.run(SleuthClientApplication.class, args);
    }
}
  
@RestController
class HomeController {
  
    private static final Log log = LogFactory.getLog(HomeController.class);
    @Autowired
    private RestTemplate restTemplate;
      
    private String url="http://localhost:9986";
  
    @RequestMapping("/service1")
    public String service1() throws Exception {
        log.info("service1");
        Thread.sleep(200L);
        String s = this.restTemplate.getForObject(url + "/service2", String.class);
        return s;
    } 
}

二、FeignClient

 除了上面的方式,我们还可以用FeignClient。

@FeignClient(value = "users", path = "/users")
public interface UserCompositeService {
@RequestMapping(value = "/getUserDetail/{id}",
        method = RequestMethod.GET,
        produces = MediaType.APPLICATION_JSON_VALUE)
UserDTO getUserById(@PathVariable Long id);
}

  我们只需要使用@FeignClient定义一个接口,Spring Cloud Feign会帮我们生成一个它的实现,从相应的users服务获取数据。

  其中,@FeignClient(value = “users”, path = “/users/getUserDetail”)里面的value是服务ID,path是这一组接口的path前缀。在下面的方法定义里,就好像设置Spring MVC的接口一样,对于这个方法,它对应的URL是/users/getUserDetail/{id}。然后,在使用它的时候,就像注入一个一般的服务一样注入后使用即可:

<insert id="insertBatch" parameterType="List">
INSERT INTO TStudent(name,age)
<foreach collection="list" item="item" index="index" open="("close=")"separator="union all">
SELECT #{item.name} as a, #{item.age} as b FROM DUAL
</foreach>
</insert>

标签:FeignClient,调用,users,restTemplate,RestTemplate,class,public,String
From: https://blog.51cto.com/chengzheng183/6404858

相关文章

  • celery笔记三之task和task的调用
    本文首发于公众号:Hunter后端原文链接:celery笔记三之task和task的调用这一篇笔记介绍task和task的调用。以下是本篇笔记目录:基础的task定义方式日志处理任务重试忽略任务运行结果task的调用1、基础的task定义方式前面两篇笔记中介绍了最简单的定义方式,使用@......
  • Android通过 SharedPreference 实现用户名与密码的存储与调用
    注:Android实验课(一)的内容一、实验原理1.1实验目标编程实现用户名与密码的存储与调用。1.2实验要求设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedPreference,读取不到该用户名提示用户不存在,用......
  • 利用APIFOX对ABAP函数进行调用
    1.安装APIFOX,当然也可以使用在线版,无需下载官网地址:https://apifox.com/ 2.新建项目 3.为项目起一个名称,为相关开发测试人员授权 4.在根目录新增子目录 5.编辑开发/测试/生产环境的地址信息以及默认全局变量 6.将SAP提供的ABAPAPI地址配置进APIFOX,有关ABAP提......
  • Jmeter:Beanshell调用java代码的三种方式
    阅读文本大概需要3分钟。0x01:BeanShell控制界面介绍每次调用前重置bsh.Interpreter:可以选择True和False。如果此选项为True,则将为每个取样器重新创建解释器。传递给BeanShell的参数(=>StringParametersandString[]bsh.args):传递给BeanShell脚本的参数,参数存在以下变量中。Param......
  • 《深度剖析CPython解释器》16. Python函数机制的深度解析(第三部分): 闭包的底层实现
    https://www.cnblogs.com/traditional/p/13580694.html楔子上一篇我们看了函数是如何调用的,这一次我们看一下函数中局部变量的访问、以及闭包相关的知识。函数中局部变量的访问我们说过函数的参数和函数内部定义的变量都属于局部变量,所以它也一样是通过静态的方式进行访问。......
  • Windows 下 JNA 调用动态链接库 dll
    1.创建动态链接库项目创建jnaTest项目下一步中填写项目名称和存储的目录;然后直接创建即可创建结果2.定义头文件#pragmaonce#ifndefJNA_TEST_H#defineJNA_TEST_H#ifdef__cplusplusextern"C"{#endif__declspec(dllexport)intadd(inta,intb);__declspec......
  • ingress 调用istio ingress 控制器
    清理环境[root@k8s-master01httpbin]#  kubectldelete-fhttpbin-gateway1.yaml-nistiogateway.networking.istio.io"httpbin-gateway"deletedvirtualservice.networking.istio.io"httpbin"deleted[root@k8s-master01httpbin]#[root@k8s-master......
  • VB运行库+FlashPlayer国际去广告版安装脚本(支持静默安装封装部署时调用)
    前言:此脚本可静默安装VB运行库和flash国际版三合一程序,flash是去广告最新版,已测试不会有乱七八糟的弹窗广告,绿色无毒!!制作脚本的目的主要是为了离线封装系统时方便在部署阶段调用安装支持库。个人认为,离线封装系统是最绿色的,避免了二次封装破坏系统的稳定性,而且第三方封装工具都......
  • API接口调用的优势以及获取方式
     API接口调用的优势:简化了系统集成:API接口提供了一种方便、快捷的方式,允许不同的系统之间进行通信和集成,降低了系统集成的难度和复杂度。提供了标准化的接口:API接口通常采用标准化的协议和数据格式,方便不同系统之间进行交换和共享信息。提高了数据安全性:API接口可以......
  • 有赞 调用 api 接口(有赞开放平台)
    ps:先注册有赞账号有赞https://www.youzan.com/有赞开放平台http://open.youzan.com/有赞开发者后台http://open.youzan.com/developer/app/index接入说明:http://open.youzan.com/docAPI文档:http://open.youzan.com/api***********************************************......