微服务之间Feign调用

需使用的服务

java 复制代码
@FeignClient(name = "rdss-back-service", fallback = SysUserServiceFallback.class, configuration =
        FeignConfiguration.class)
public interface SysUserService {

    /**
     * 订单下单用户模糊查询
     */
    @GetMapping(value = "/user/getOrderUserName")
    List<SysUserVo> getOrderUserName(@RequestParam(value = "username", required = false) String username);
   }
java 复制代码
@Slf4j
@Service
public class SysUserServiceFallback implements SysUserService {

    @Override
    public List<SysUserVo> getOrderUserName(String username) {
        log.error("调用getOrderUserName方法异常,参数:{}", username);
        return null;
    }
}
java 复制代码
package com.rdss.common.config;

import com.rdss.common.constants.CommonConstants;
import feign.Body;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;

@Configuration
public class FeignConfiguration implements RequestInterceptor {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Override
    public void apply(RequestTemplate template) {
        if(template==null)return;
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes();
        if(attributes==null){
            template.header("ticket", CommonConstants.INNER_FEIGN_TRANS_TICKET);
            return;
        }
        HttpServletRequest request = attributes.getRequest();
        if(request==null){
            return;
        }
        Enumeration<String> headerNames = request.getHeaderNames();
        if (headerNames != null) {
            while (headerNames.hasMoreElements()) {
                String name = headerNames.nextElement();
                String values = request.getHeader(name);
                //使用body,请求头的content-length与body不一致,所以会出现too many bytes written executing错误,跳过它即可
                /*if(name.equals("content-length")){
                    continue;
                }*/
                template.header(name, values);

            }
        }
        Enumeration<String> bodyNames = request.getParameterNames();
        if (bodyNames != null) {
            while (bodyNames.hasMoreElements()) {
                String name = bodyNames.nextElement();
                String values = request.getParameter(name);
                template.header(name, values);
            }
        }
    }
}

另外一个微服务中

java 复制代码
 @ApiOperation(value = "订单下单用户模糊查询", notes = "订单下单用户模糊查询", httpMethod = "GET")
    @GetMapping(value="/getOrderUserName")
    public List<SysUserVo> getOrderUserName(@RequestParam(value ="username", required = false) String username){
        return sysUserService.getOrderUserName(username);
    }
相关推荐
天空属于哈夫克33 天前
企业微信二次开发:精准实现关键词自动回复
架构·企业微信
晨米酱3 天前
AGENTS.md:Agent 的上下文策略层
面试·架构·agent
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
vipxieliang3 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
码流子3 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
kybs19913 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
moMo3 天前
从固定流程到问题路由:让 LangGraph RAG 按需检索
架构
白远山3 天前
上海24小时自助健身房解决方案实战指南与经验分享
java·数据库·架构·需求分析
LorryJovens3 天前
【LAAP科研】双系统具身AGI范式研究——基于LAAP认知架构与Jev概率决策模型的系统性技术调研与范式验证
人工智能·gpt·安全·架构
码兄科技3 天前
24小时自助健身房系统软件开发实战指南:功能设计与部署方案
java·spring boot·uni-app