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