在一个商品的的微服务中(item-service)分为了ly-item-interface和ly-item-service这两个部分,是一个聚合工程
8121647.png

在微服务中,如果使用feign调用,最好在服务提供方,提供好api接口,然后在服务调用方导入feign的依赖,然后编写一个client类,去继承提供方提供的这个接口,然后在类上添加一个@FeignClient(value = "item-service") ,item-service为服务提供方微服务的名称。
注意点:在服务提供方提供api接口的时候一般写在ly-item-interface中,以便于别人集成以后进行调用,并且在编写api接口的时候,需要注意的是,在原本controller中定义在类上的路径如,GetMapping("category") ,也是需要在api接口中定义的,
方法上的路径就更不用说了,肯定也是需要带过来,否则的话当调用方继承这个接口,调用的时候 ,会报错404,feign调用不到
如下所示:

@RequestMapping("category")
public interface CategoryApi {

    @GetMapping("names")
    ResponseEntity<List<String>> queryNameByIds(@RequestParam("ids") List<Long> ids);
}

然后就是调用方了,在调用方ly-search中编写FeignClient,但不要写方法声明了,直接继承ly-item-interface提供的api接口

@FeignClient(value = "item-service")
public interface CategoryClient extends CategoryApi {
}

测试一下feign调用

@RunWith(SpringRunner.class)
@SpringBootTest(classes = LeyouSearchApplication.class)
public class CategoryClientTest {

    @Autowired
    private CategoryClient categoryClient;

    @Test
    public void testQueryCategories() {
        List<String> names = this.categoryClient.queryNameByIds(Arrays.asList(1L, 2L, 3L));
        names.forEach(System.out::println);
    }
}