SpringCloud OpenFeign超详细讲解模板化远程通信的实现
作者:有头发的程序猿! 发布时间:2023-04-27 06:43:29
1. openFeign实现
基于spring-boot-starter-parent 2.6.8,spring-cloud-dependencies 2021.0.3
,一个order服务一个user服务
1.1 pom依赖
<!--nacos服务注册与发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.0.1.0</version>
</dependency>
<!--远程服务调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
<!--服务调用feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
1.2 yaml配置
order调用端,配置的超时设置注释掉了只为记录
spring:
application:
name: orderservice
cloud:
#找对应网段的网卡 不配置内部服务就走外网
inetutils:
preferred-networks: 192.168.0
nacos:
discovery:
server-addr: 192.168.0.221:8848
#feign:
# client:
# config:
# #default设置的是全局超时时间,对所有的openFeign接口服务都生效 默认60s超时
# default:
# connectTimeout: 5000
# readTimeout: 5000
# #为某个服务设置超时时间 优先于全局
# userservice:
# connectTimeout: 5000
# readTimeout: 5000
user服务仅需要注册
spring:
application:
name: userservice
cloud:
#找对应网段的网卡 不配置内部服务就走外网
inetutils:
preferred-networks: 192.168.0
nacos:
discovery:
server-addr: 192.168.0.221:8848
远程调用依赖于注册中心,这里用的是nacos,其他的eureka也可以的
1.3 客户端调用代码
启动类上添加
@EnableFeignClients
注解api接口,可以单独放在api包
@FeignClient(value = "userservice")
//没有注册中心的服务调用使用 testFeign/随便写
//@FeignClient(value = "testFeign",url = "http://192.168.0.199:7540")
public interface UserService {
//默认是@RequestBody注解参数
//如果使用其他注解一定要带上value 否者会报错 RequestParam.value() was empty on parameter 1
@GetMapping("/getTime/{uuid}")
String getTime(@PathVariable("uuid") String uuid, @RequestParam("name") String name);
@PostMapping("/postTime")
Map<String, Object> getTime(@RequestBody Map<String, Object> params);
}
客户端代码
@Resource
UserService userService;
@GetMapping("/test")
public String test() throws Exception {
log.info("openFeign -- start");
Map<String, Object> time = userService.getTime(resMap);
log.info("openFeign -- {}", time);
return template + ":" + time;
}
1.4.服务端暴露接口
@PostMapping("/postTime")
public Map<String, Object> getTime(@RequestBody Map<String, Object> params) {
params.put("time", new Date().getTime());
return params;
}
1.5.测试日志
c.e.order.controller.OrderController : openFeign -- start
c.e.order.controller.OrderController : openFeign -- {aaaa=bbbb, time=1657187048104}
来源:https://blog.csdn.net/qq_35551875/article/details/125605949


猜你喜欢
- 本文实例为大家分享了RecyclerView实现横向滚动效果的具体代码,供大家参考,具体内容如下布局文件<LinearLayout
- 关于《JavaCV的摄像头实战》系列《JavaCV的摄像头实战》顾名思义,是使用JavaCV框架对摄像头进行各种处理的实战集合,这是欣宸作为
- 下面程序代码通过使用Lock锁执行简单的流水线任务:import java.util.concurrent.locks.Condition;
- Spring简介1.什么是Springspring是分层的JavaSE及JavaEE应用于全栈的轻量级开源框架,以 IoC (Inverse
- 前言:事情是这样的:运营人员反馈,通过Excel导入数据时,有一部分成功了,有一部分未导入。初步猜测,是事务未生效导致的。查看代码,发现导入
- 一,SQL注入–1,需求–1,利用jdbc查询user的信息,如果信息正确就登录,否则提示错误–1,创建user表,指定字段id name
- 1.特殊数组的特征值题目描述思路详解看到本题,首先思考需要排序,然后查找,这里为了效率采用二分查找。假设定义x=(left+riht)/ 2
- 在本人用editplus写java文件时碰到的问题。 import java.util.*;class collection{ &
- 本项目是前端vue3,后端springboot开发 需求为:前端导入表格,后端处理表格存储数据,点击按钮可以导出表格。上传效果:前端点击上传
- 定时的功能我们在手机上见得比较多,比如定时清理垃圾,闹钟,等等.定时功能在java中主要使用的就是Timer对象,他在内部使用的就是多线程的
- 一、国际惯例,先看下效果图二、不跟你多bb直接上布局文件代码<?xml version="1.0" encodin
- Android 应用坐标系详解:
- Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法。被传递的对象需要先实现序列化,
- 前言下面大部分内容来源于网上的相关帖子和官网,自己简单写了个demo体验了下,个人感觉mybatis的缓存并不是很合适查询做缓存时,遇到更新
- 线程安全解决方案synchronized,ReentrantLock,Atomic 使用场景描述在实际开发过程中如果服务量,请求频繁,就会经
- 人机交互过程中,当我们需要机器给我们反馈不确定的数字结果时,就会需要用到随机数了,那么,在Java中,我们应当如何来生成并使用随机数呢?一、
- 在上章C++图解单向链表类模板和iterator迭代器类模版详解我们学习了单链表,所以本章来学习双向循环链表我们在上个文章代码上进行修改,
- 单个异常捕捉val handler = CoroutineExceptionHandler { coroutineContext, thro
- 一、题目描述-批量重命名1、题目题目:在window操作系统中,支持对文件名重命名,但不支持批量重命名。实现:做一个批量重命名的工具。2、解
- C# 多态性多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。多态性可以是静态的或动