Springboot整合openFeign及nacos(注冊中心)
1. 新建項目(maven/springboot)並在項目中建立3個Module,分別為:
一、common_api
二、nacos_provider
三、nacos_consumer
2. common_api: 作為公共實體對象
2.1 編寫公共實體
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDTO implements Serializable {
private Integer id;
private String name;
private Boolean Status;
}
3. nacos_provider 提供者
3.1 添加依賴
<!-- 添加 Nacos 支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>common_api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
3.2 編寫配置文件
# 應用名稱
spring:
application:
name: nacos-provider-openFeign
cloud:
nacos:
discovery:
username: nacos # nacos 登錄用戶名
password: nacos # nacos 密碼
server-addr: 127.0.0.1:8848 # nacos 服務端地址
# 應用服務 WEB 訪問端口
server:
port: 8080
3.3 編寫接口
@RestController
public class TestController {
@Resource
private ProService proService;
/**
* 為客戶端提供可調用的接口
*/
@RequestMapping("/call/{name}")
public String call(@PathVariable String name) {
return LocalTime.now() + "——服務提供者1:" + name;
}
@PostMapping("/findAll")
public List<UserDTO> findAll() {
System.out.println("執行調用方法");
return proService.findAll();
}
/**
* openFeign默認的傳參方式就是JSON傳參(@RequestBody),
* 因此定義接口的時候可以不用@RequestBody注解標注,不過為了規范,一般都填上。
*/
@RequestMapping("/findAllByUser")
public List<UserDTO> findAllByUser(@RequestBody UserDTO userDTO) throws InterruptedException {
System.out.println(userDTO);
return proService.findAll();
}
}
3.4 編寫service和serviceImpl(簡單寫一下)
List<UserDTO> findAll();
@Override
public List<UserDTO> findAll() {
List<UserDTO> list=new ArrayList<>();
list.add(new UserDTO(1,"張三",true));
list.add(new UserDTO(2,"李四",false));
list.add(new UserDTO(3,"王五",true));
return list;
}
4. nacos_consumer 消費者
4.1 添加依賴
<!-- 添加 Nacos 支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>common_api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
4.2 編寫配置文件
# 應用名稱
spring:
application:
name: nacos-consumer-openFeign
cloud:
nacos:
discovery:
username: nacos # nacos 登錄用戶名
password: nacos # nacos 密碼
server-addr: 127.0.0.1:8848 # nacos 服務端地址
feign:
client:
config:
default:
#建立連接所用的時間,適用於網絡狀況正常的情況下,兩端連接所需要的時間
connectTimeout: 5000
#指建立連接后從服務端讀取到可用資源所用的時間
readTimeout: 5000
# 應用服務 WEB 訪問端口
server:
port: 8081
4.3 啟動類添加依賴
@SpringBootApplication
@EnableFeignClients // 啟用 OpenFeign
@EnableDiscoveryClient //啟用nacos服務發現
public class NacosConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
}
4.4 消費者service
@FeignClient(value = "nacos-provider-openFeign")
public interface TestService {
@GetMapping("/call/{name}")
String call(@PathVariable(value = "name") String name);
@PostMapping("/findAll")
List<UserDTO> findAll();
/**
* openFeign默認的傳參方式就是JSON傳參(@RequestBody),
* 因此定義接口的時候可以不用@RequestBody注解標注,不過為了規范,一般都填上。
*/
@PostMapping("/findAllByUser")
List<UserDTO> findAllByUser(@RequestBody UserDTO userDTO);
}
4.5 消費者Controller
@RestController
@RequestMapping("/test")
public class TestController {
@Resource
private TestService testService;
@RequestMapping("/find")
public String find(){
String name="張三";
return testService.call(name);
}
@PostMapping("/findAll")
public List<UserDTO> findALl(){
return testService.findAll();
}
@PostMapping("/findAllByUserDTO")
public List<UserDTO> findAllByUserDTO(){
UserDTO kk = new UserDTO(1, "看看", false);
return testService.findAllByUser(kk);
}
}
gitee
地址:https://gitee.com/song-xusheng/nacos_open-feign
聲明:本文為作者個人學習及記錄使用。如有錯誤,望指正。