FeignClient服务调用案例

2024-05-28 00:18

本文主要是介绍FeignClient服务调用案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

FeignClient服务调用案例,由A服务调用B服务,分别展示了get和post调用的各种传参方式。

A服务

  • A服务FeignClient调用服务类FeignDemoService
package com.github.third.feign;import com.github.common.util.Response;
import com.github.third.feign.fallback.FeignDemoServiceImpl;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.*;import java.util.Map;/*** @Project:collection* @Package:com.github.third.feign* @Date:2019/3/22 17:30* @Author:songfayuan* @Address: * @Description: FeignClient服务调用案例* @Modified By:*/
@FeignClient(name = "upms-service", fallback = FeignDemoServiceImpl.class)
public interface FeignDemoService {/*** feign get 请求<单个参数请求>* @param params* @return*/@GetMapping("/demo/noAuthorization/feignGetRequest1")Response feignGetRequest1(@RequestParam("params") String params);/*** feign get 请求<多参数请求>* @param params1* @param params2* @return*/@GetMapping("/demo/noAuthorization/feignGetRequest")Response feignGetRequest(@RequestParam("params1") String params1, @RequestParam("params2") String params2);/*** feign get 请求<单个参数请求>* @return* @author songfayuan* @date 2019/03/25 11:19*/@GetMapping("/demo/noAuthorization/feignGetRequest3/{params}")Response feignGetRequest3(@PathVariable("params") String params);/*** feign post 请求<单参、多参数请求>* @return*/@PostMapping("/demo/noAuthorization/feignPostRequest")Response feignPostRequest(@RequestBody Map<String, Object> params);/*** feign post 请求<单参数请求>* @param params* @return*/@PostMapping("/demo/noAuthorization/feignPostRequest2")Response feignPostRequest2(@RequestParam("params") String params);
}
  • 异常回调类 FeignDemoServiceImpl
package com.github.third.feign.fallback;import com.github.common.util.Response;
import com.github.third.feign.FeignDemoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;import java.util.Map;/*** @Project:collection* @Package:com.github.third.feign.fallback* @Date:2019/3/22 17:30* @Author:songfayuan* @Address: * @Description: FeignClient服务调用案例失败回调* @Modified By:*/
@Slf4j
@Service
public class FeignDemoServiceImpl implements FeignDemoService {@Overridepublic Response feignGetRequest1(String params) {log.warn("调用{}异常...", "/demo/noAuthorization/feignGetRequest1");return null;}@Overridepublic Response feignGetRequest(String params1, String params2) {log.warn("调用{}异常...", "/demo/noAuthorization/feignGetRequest");return null;}@Overridepublic Response feignGetRequest3(String params) {log.warn("调用{}异常...", "/demo/noAuthorization/feignGetRequest3");return null;}@Overridepublic Response feignPostRequest(Map<String, Object> params) {log.warn("调用{}异常...", "/demo/noAuthorization/feignPostRequest");return null;}@Overridepublic Response feignPostRequest2(String params) {log.warn("调用{}异常...", "/demo/noAuthorization/feignPostRequest2");return null;}
}

B服务

  • 具体业务功能DemoController
package com.github.admin.controller.demo;import com.github.common.util.Response;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.support.atomic.RedisAtomicInteger;
import org.springframework.web.bind.annotation.*;import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;/*** 描述:demo* @author songfayuan* 2017年8月31日下午2:07:19*/
@Slf4j
@RestController
@RequestMapping("/demo")
public class DemoController {/*** feign get 请求<单个参数请求>* @param params* @return* @author songfayuan* @date 2019/03/22 18:29*/@GetMapping("/noAuthorization/feignGetRequest1")public Response feignGetRequest1(@RequestParam("params") String params){log.info("请求参数params = {}", params);return Response.success(params);}/*** feign get 请求<多参数请求>* @param params1* @param params2* @return* @author songfayuan* @date 2019/03/22 18:29*/@GetMapping("/noAuthorization/feignGetRequest")public Response feignGetRequest(@RequestParam("params1") String params1, @RequestParam("params2") String params2){log.info("请求参数params1 = {}, params2 = {}", params1, params2);return Response.success(params1 + "&" + params2);}/*** feign get 请求<单个参数请求>* @return* @author songfayuan* @date 2019/03/25 11:19*/@GetMapping("/noAuthorization/feignGetRequest3/{params}")public Response feignGetRequest3(@PathVariable("params") String params){log.info("请求参数params = {}", params);return Response.success(params);}/*** feign post 请求<单参、多参数请求>* @param params* @return* @author songfayuan* @date 2019/03/22 18:29*/@PostMapping("/noAuthorization/feignPostRequest")public Response feignPostRequest(@RequestBody Map<String, Object> params){log.info("请求参数params = {}", params);return Response.success(params);}/*** feign post 请求<单参数请求>* @param params* @return* @author songfayuan* @date 2019/03/25 11:00*/@PostMapping("/noAuthorization/feignPostRequest2")public Response feignPostRequest2(@RequestParam("params") String params){log.info("请求参数params = {}", params);return Response.success(params);}}
  • 文中用到的Response类
package com.github.common.util;import com.fasterxml.jackson.annotation.JsonInclude;import java.io.Serializable;/*** 响应信息主体** @param <T>* @author songfayuan*/
//@JsonInclude(JsonInclude.Include.NON_NULL)
public class Response<T> implements Serializable {private static final long serialVersionUID = 1L;private static final int SUCCESS_CODE = 200;private static final String SUCCESS_MSG = "success";private static final int ERROR_CODE = 500;private static final String ERROR_MSG = "服务器内部异常,请联系技术人员"; //将error改成了内容信息public static final int NO_LOGIN = -1;public static final int SUCCESS = 200;public static final int FAIL = 500;public static final int NO_PERMISSION = 2;private String msg = "success";private int code = SUCCESS;private T data;public Response() {super();}public Response(T data) {super();this.data = data;}public Response(T data, String msg) {super();this.data = data;this.msg = msg;}public Response(int code, T data, String msg) {super();this.code = code;this.data = data;this.msg = msg;}public Response(int code, String msg) {super();this.code = code;this.msg = msg;}public Response(Throwable e) {super();this.msg = e.getMessage();this.code = FAIL;}public static Response success() {Response resp = new Response();resp.code = (SUCCESS_CODE);resp.msg = (SUCCESS_MSG);return resp;}public static Response successResponse(String msg) {Response resp = new Response();resp.code = SUCCESS_CODE;resp.msg = msg;return resp;}public static Response error() {Response resp = new Response();resp.code = (ERROR_CODE);resp.msg = (ERROR_MSG);return resp;}public static Response errorResponse(String msg) {Response resp = new Response();resp.code = ERROR_CODE;resp.msg = msg;return resp;}public static Response response(int code, String msg) {Response resp = new Response();resp.code = (code);resp.msg = (msg);return resp;}public static Response response(int code, String msg, Object data) {Response resp = new Response();resp.code = (code);resp.msg = (msg);resp.data = data;return resp;}public static Response success(Object data) {Response resp = new Response();resp.code = (SUCCESS_CODE);resp.msg = (SUCCESS_MSG);resp.data = data;return resp;}public static Response error(Object data) {Response resp = new Response();resp.code = (ERROR_CODE);resp.msg = (ERROR_MSG);resp.data = data;return resp;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public T getData() {return data;}public void setData(T data) {this.data = data;}
}

这篇关于FeignClient服务调用案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1009000

相关文章

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

MySQL 数据库表与查询操作实战案例

《MySQL数据库表与查询操作实战案例》本文将通过实际案例,详细介绍MySQL中数据库表的设计、数据插入以及常用的查询操作,帮助初学者快速上手,感兴趣的朋友跟随小编一起看看吧... 目录mysql 数据库表操作与查询实战案例项目一:产品相关数据库设计与创建一、数据库及表结构设计二、数据库与表的创建项目二:员

Python如何调用另一个类的方法和属性

《Python如何调用另一个类的方法和属性》在Python面向对象编程中,类与类之间的交互是非常常见的场景,本文将详细介绍在Python中一个类如何调用另一个类的方法和属性,大家可以根据需要进行选择... 目录一、前言二、基本调用方式通过实例化调用通过类继承调用三、高级调用方式通过组合方式调用通过类方法/静

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

C#中的Drawing 类案例详解

《C#中的Drawing类案例详解》文章解析WPF与WinForms的Drawing类差异,涵盖命名空间、继承链、常用类及应用场景,通过案例展示如何创建带阴影圆角矩形按钮,强调WPF的轻量、可动画特... 目录一、Drawing 是什么?二、典型用法三、案例:画一个“带阴影的圆角矩形按钮”四、WinForm

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

Python跨文件实例化、跨文件调用及导入库示例代码

《Python跨文件实例化、跨文件调用及导入库示例代码》在Python开发过程中,经常会遇到需要在一个工程中调用另一个工程的Python文件的情况,:本文主要介绍Python跨文件实例化、跨文件调... 目录1. 核心对比表格(完整汇总)1.1 自定义模块跨文件调用汇总表1.2 第三方库使用汇总表1.3 导

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.