本文主要是介绍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服务调用案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!