之前学习的服务间调用用的是Spring自带的RestTemplate,这里记录一下另一个REST 客户端:Feign
服务器端项目(cloud-server),端口8761,没啥改变。
服务提供者(cloud-provider),端口8080,提供一个REST服务
@RestController
public class MainController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
以及该项目的配置,也没啥特殊的,记得配置spring.application.name,调用者调用时有用到
server:
port: 8080
spring:
application:
name: cloud-provider
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
服务调用者(cloud-invoker),端口9000,加入Feign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在其启动类加个@EnableFeignClients注解,这是Feign的开关
@SpringBootApplication
@EnableEurekaClient
//Feign开关
@EnableFeignClients
public class CloudInvokerApplication {
public static void main(String[] args) {
SpringApplication.run(CloudInvokerApplication.class, args);
}
}
然后是一个服务端接口
@FeignClient("cloud-provider") //声明调用的服务名称
public interface TestClient {
@GetMapping("/hello")
String hello();
}
最后写个MainController类,为其注入了TestClient的Bean
@RestController
@Configuration
public class MainController {
@Autowired
private TestClient testClient;
@GetMapping("/invokeHello")
public String invokeHello() {
return testClient.hello();
}
}
分别运行三个项目,在浏览器输入http://localhost:9000/invokeHello可以看到Hello World说明成功了