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

标签:SpringCloud,OpenFeign,模板化,远程通信
0
投稿

猜你喜欢

  • 浅谈springboot的三种启动方式

    2022-07-31 10:57:47
  • Struts2中异常处理机制分析

    2023-11-17 21:54:32
  • JAVA内存模型(JMM)详解

    2023-11-23 16:54:32
  • 微信公众号开发之回复图文消息java代码

    2022-11-24 00:56:19
  • 浅析Java中如何实现线程之间通信

    2022-08-24 14:28:36
  • 解析:ClickOnce通过URL传递参数 XXX.application?a=1

    2022-05-26 01:54:34
  • Spring创建Bean的过程Debug的详细流程

    2023-02-09 23:55:37
  • Java高级面试题小结

    2023-11-23 07:34:00
  • Java使用fill()数组填充的实现

    2022-02-06 15:03:33
  • java如何实现字符串中的字母排序

    2021-09-17 14:55:11
  • 简单了解JAVA public class与class区别

    2023-11-15 23:59:26
  • android仿微信支付宝的支付密码输入框示例

    2023-09-27 22:11:47
  • Java并发内存模型详情

    2023-06-04 23:50:23
  • c#之事件用法

    2023-09-22 05:05:28
  • 移动端WebApp隐藏地址栏的方法

    2022-09-26 20:26:29
  • SpringBoot基于Swagger2构建API文档过程解析

    2022-12-06 20:42:58
  • Android中ADB命令用法大结局

    2022-12-18 10:36:28
  • SpringMVC通过RESTful结构实现页面数据交互

    2022-01-23 08:57:24
  • Android键盘显示与隐藏代码

    2021-06-29 22:15:58
  • c# 控件截图的简单实例

    2022-01-21 16:43:19
  • asp之家 软件编程 m.aspxhome.com