微服务之间Feign调用
需使用的服务
(图片来源网络,侵删)
@FeignClient(name = "rdss-back-service", fallback = SysUserServiceFallback.class, configuration = FeignConfiguration.class) public interface SysUserService { /** * 订单下单用户模糊查询 */ @GetMapping(value = "/user/getOrderUserName") List getOrderUserName(@RequestParam(value = "username", required = false) String username); }
@Slf4j @Service public class SysUserServiceFallback implements SysUserService { @Override public List getOrderUserName(String username) { log.error("调用getOrderUserName方法异常,参数:{}", username); return null; } }
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 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 bodyNames = request.getParameterNames(); if (bodyNames != null) { while (bodyNames.hasMoreElements()) { String name = bodyNames.nextElement(); String values = request.getParameter(name); template.header(name, values); } } } }
另外一个微服务中
@ApiOperation(value = "订单下单用户模糊查询", notes = "订单下单用户模糊查询", httpMethod = "GET") @GetMapping(value="/getOrderUserName") public List getOrderUserName(@RequestParam(value ="username", required = false) String username){ return sysUserService.getOrderUserName(username); }
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。