消费方 spring cloud 项目配置:
需要引入jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
配置文件添加:
REST-SERVICE:
ribbon:
NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
listOfServers: http://127.0.0.1:8080/
main启动类添加:
@EnableFeignClients(basePackages = "com.test.feign")
feign接口:
@FeignClient(name = "REST-SERVICE", path = "/restapi", fallbackFactory = TestServiceClientFallBack.class)
public interface TestServiceClient {
@RequestMapping(value = "/getInfo/{id}", method = RequestMethod.GET)
Map<String, Object> getInfo(@PathVariable("id") String id);
}
@Component
class TestServiceClientFallBack implements TestServiceClient, FallbackFactory<TestServiceClient> {
Throwable throwable;
Logger logger = LoggerFactory.getLogger(TestServiceClientFallBack.class);
@Override
public TestServiceClient create(Throwable throwable) {
this.throwable = throwable;
return new TestServiceClientFallBack();
}
@Override
public Map<String, Object> getInfo(String id) {
logger.error("id: {}", id);
return new HashMap<>(4);
}
}
调用类:
@RestController
public class RemoteTestController {
@Autowired
private TestServiceClient testServiceClient;
@GetMapping(value = "/getInfo/{customerId}")
public Map<String, Object> getInfo(@PathVariable("id") String id) {
Map<String, Object> result = testServiceClient.getInfo(id);
return result;
}
}
提供方 web项目配置:
只需提供暴露的rest接口即可:
@RestController
public class TestController {
@GetMapping(value = "/restapi/getInfo/{id}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public Map<String, Object> getInfo(@PathVariable("id") String id) {
Map<String, Object> result = new HashMap<>(4);
result.put("id", id);
System.out.println("getInfo 参数 result:" + result);
return result;
}
}
测试使用的例子,正常情况接口不要用Map传参,可读性太差