OpenFeign 的使用
一、服务端代码:服务端无需引入oenfeign,只需提供rest api接口;
// AssetsController.java
@GetMapping("/getAssets")
public HttpResult getAssets(@RequestParam("id") int id) {
return assetsService.getAssets(id);
}
// AssetsService.java
HttpResult<AssetsVo> getAssets(int id);
// AssetsServiceImpl.java
public HttpResult getAssets(int id) {
AssetsInfo assets = assetsInfoMapper.selectById(id);
System.out.println(assets);
return HttpResult.OK(assets);
// return HttpResult.OK("SUCCESS!!!");
}
二、客户端需要做以下操作,引入openfeign:
1、引入pom依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
2、启动类加上注解:@EnableFeignClients
package com.unicom;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableFeignClients
public class JobExecutorApplication {
public static void main(String[] args) {
SpringApplication.run(JobExecutorApplication.class, args);
}
}
3、创建openfeign客户端:AssetsClient.java
package com.unicom.executor.feign.assets;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* name: 指定调用rest接口所对应的服务名
* url: 指定接口地址和端口号
* path: 指定调用rest接口所在的AssetsController调用路径
*/
@FeignClient(name = "demo", url = "localhost:8080", path = "/demo/assets")
public interface AssetsClient {
/**
* 声明需要调用的rest接口对应的方法,getAssets()
*/
@GetMapping("/getAssets")
String getAssets(@RequestParam("id") int id);
}
4、通过AssetsClient客户端,调用getAssets()方法:
package com.unicom.executor.controller;
import com.unicom.executor.feign.assets.AssetsClient;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/executor")
@Api(tags = "执行器")
public class ExecutorController {
@Autowired
private AssetsClient assetsClient;
@ApiOperation("feign查询单个资产")
@GetMapping("/getAssets")
public String getStudent(@RequestParam("id") int id) {
// 像调用本地方法一样调用远程方法(其实很垃圾,封装方法不是写在了AssetsClient里吗,只是看起来?)
String result = assetsClient.getAssets(2);
return "Hello" + result;
}
}
至此所有配置结束,调用成功!
http://localhost:8088/executor/executor/getAssets?id=2
Hello{"code":0,"msg":"操作成功","data":"SUCCESS!!!","ok":true}