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

相关文章

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

Python get()函数用法案例详解

《Pythonget()函数用法案例详解》在Python中,get()是字典(dict)类型的内置方法,用于安全地获取字典中指定键对应的值,它的核心作用是避免因访问不存在的键而引发KeyError错... 目录简介基本语法一、用法二、案例:安全访问未知键三、案例:配置参数默认值简介python是一种高级编

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

python如何调用java的jar包

《python如何调用java的jar包》这篇文章主要为大家详细介绍了python如何调用java的jar包,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录一、安装包二、使用步骤三、代码演示四、自己写一个jar包五、打包步骤六、方法补充一、安装包pip3 install

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动