
Eureka 注册的服务之间互相调用
1.请求方
启动类添加注解,扫描Eureka 中的全部服务
@SpringBootApplication@EnableEurekaClient@EnableFeignClientspublic class LoginServiceApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(LoginServiceApplication.class).web(true).run(args);}}pom.xml 添加包 (版本号 根据实际选择)
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId><version>1.4.6.RELEASE</version></dependency>创建接口类
@FeignClient(name="hello-service") //spring service namepublic interface FeignVehicle {
@RequestMapping(value="/hello", method = RequestMethod.GET)@ResponseBodypublic List<Map> hello(@RequestParam Map<String,String> params);}实现类注入此接口类
@AutowiredFeignVehicle feignVehicle;使用的时候直接按照正常调用方式即可
Map<String,String> map = new HashMap<String, String>();feignVehicle.hello(map);跨服务调用的时候出现token信息取不到,在发送方添加拦截器
@Configurationpublic class FeignConfiguration {
@Beanpublic RequestInterceptor requestInterceptor() {
return new RequestInterceptor() {
@Overridepublic void apply(RequestTemplate template) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest(); //当前服务tokentemplate.header("Authorization","Bearer " + request.getSession().getId()); //template 接收请求方token}};}}2.接收方
请求 启动类
@SpringBootApplication@EnableEurekaClientpublic class HelloServiceApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(HelloServiceApplication.class).web(true).run(args);}}请求Controller
@Controller@RequestMapping("/hello")public class HelloController {
@RequestMapping(value="/hello",method = RequestMethod.GET)@ResponseBodypublic List<Map> hello(@RequestParam Map<String, String> queryParam) {
return null; }}