数据交互: feign
1) 在consumer项目中的pom, 添加feign组件的依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-openfeign
2) 在consumer项目中的启动类上, 添加@EnableFeignClients , @EnableDiscoveryClient, @SpringBootApplication
启动类示例:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableCircuitBreaker
public class UserConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(UserConsumerApplication.class, args);
}
}
3) 在consumer项目中的创建与provider项目对应的接口,
接口中的方法声明(含注解部分)必须与对应的
provider项目的controller中的方法声明一致
示例:
@Service
@FeignClient(value = "user-provider")
public interface UserPorvider {
@PostMapping("save")
public Dto save(@RequestBody User user);
@PostMapping("remove")
public Dto remove(@RequestBody User user);
@PostMapping("modify")
public Dto modify(@RequestBody User user);
@PostMapping("unique")
public Dto unique(@RequestBody User user);
@PostMapping("query")
public Dto query(@RequestBody Map map);
@PostMapping("ribbon")
public String testRibbon(@RequestParam("count") int count);
}
4) 在consumer项目中的provider接口上,
添加@Service, 添加@FeignClient(value = "provider 的application name")
示例:
@Service
@FeignClient(value = "user-provider", fallback = UserProviderImpl.class)
public interface UserPorvider {
@PostMapping("save")
public Dto save(@RequestBody User user);
@PostMapping("remove")
public Dto remove(@RequestBody User user);
@PostMapping("modify")
public Dto modify(@RequestBody User user);
@PostMapping("unique")
public Dto unique(@RequestBody User user);
@PostMapping("query")
public Dto query(@RequestBody Map map);
@PostMapping("ribbon")
public String testRibbon(@RequestParam("count") int count);
}
5) 在consumer项目中的controller中, 声明provider接口对象并注入实例
示例:
@RestController
public class UserController {
@Autowired
private UserPorvider userPorvider;
@PostMapping("login")
public Dto login(User user){
System.out.println(user);
Dto dto = userPorvider.unique(user);
if (dto.getSuccess().equals("false") && dto.getCode().equals("200")){
dto.setMsg("用户名或密码错误!");
}
return dto;
}
}
6) 在provider项目中的启动类上添加注解:
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan("com.dsed.dao") 注:括号中为dao包
示例:
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan("com.szxs.dao")
public class UserProviderApplication {
public static void main(String[] args) {
SpringApplication.run(UserProviderApplication.class, args);
}
}



