Springboot整合openFeign及nacos


Springboot整合openFeign及nacos(注冊中心)

1. 新建項目(maven/springboot)並在項目中建立3個Module,分別為:

一、common_api
二、nacos_provider
三、nacos_consumer

image

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

聲明:本文為作者個人學習及記錄使用。如有錯誤,望指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM