上依赖
//feign
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign:3.0.2'
我使用的是2.5.6
版本的springboot
,所以对应的openfeign
要用3.0.X
的。如果springboot
是2.2.X
的话,openfeign
直接改成和springboot
一样的版本就行。如果是2.6.X
的话使用3.1.X
。
在启动类的上面添加注解@EnableFeignClients
。
创建一个接口类。
import com.zeaho.test.util.JsonResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient(name = "test", url = "http://localhost:8889")
public interface TestFeign
{
@GetMapping("/test/mysql")
JsonResult getData();
}
url
是你要调用的地址,可以是外部的。方法上面写你调用的route
。
注解Mapping
可以添加consumes
来指定参数传递方式,如@PostMapping(value = "/route", consumes = {"application/x-www-form-urlencoded"})
然后直接调用这个接口就行。我写了一个controller
并用AOP
方式打出了日志可以看到调用过程。
import com.test.adapter.WorkStatePatternAdapter;
import com.test.feign.TestFeign;
import com.test.model.WorkStatePattern;
import com.test.mongoModel.TerminalOilMsg;
import com.test.pageable.WorkStatePageable;
import com.test.repo.TestRepo;
import com.test.util.JsonResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.web.PageableDefault;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class TestController
{
@Autowired
private TestRepo testRepo;
@Autowired
private TestFeign testFeign;
@GetMapping("/test/mysql")
public JsonResult testJpa(@PageableDefault WorkStatePageable params)
{
Page<WorkStatePattern> page = testRepo.findAll(params);
return JsonResult.successResult(new WorkStatePatternAdapter(page));
}
@GetMapping("/test/feign")
public void testFeign()
{
log.info("返回的code是: " + testFeign.getData().getCode());
}
}
通过前台调用http://127.0.0.1:8889/test/feign
可以看到日志。
手动调用
testFeign
方法后通过feign
注解直接调用testJpa
方法,并获取返回参数。