java · 2024-02-29 0

openfeign 使用

一、生产端

1.pom

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.2</version>
    <relativePath/>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.26</version>
        <optional>true</optional>
    </dependency>
</dependencies>

2.yml

application.yml 文件

server:
  port: 8081

3.java

@Setter
@Getter
public class RemoteRequest {

    private Integer id;

    private String name;
}

@Getter
@Builder
public class RemoteResponse {

    private Integer id;

    private String name;
}

@RestController
public class IndexController {

    @GetMapping("/remote")
    public String remote() {
        System.out.println("- - - remote - - - 8081");
        return "this is simple";
    }

    // curl -H "Content-Type: text/plain;charset=UTF-8" -X GET "http://localhost:8081/remoteGet?name=zhang1"
    @GetMapping("/remoteGet")
    public String remoteGet(@RequestParam("name") String name) {
        System.out.println("- - - remoteGet - - - 8081");
        System.out.println(name);
        return name;
    }

    // curl -H "Content-Type: application/json" -X POST -d '{"id": "1", "name": "zhang1"}' "http://localhost:8081/remotePost"
    @PostMapping("/remotePost")
    public RemoteResponse remotePost(@RequestBody RemoteRequest request) {
        System.out.println("- - - remotePost - - - 8081");
        System.out.println(request);
        return RemoteResponse.builder()
                .id(request.getId() + 1)
                .name(request.getName() + "1")
                .build();
    }
}

@SpringBootApplication
public class Boot1 {

    public static void main(String[] args) {
        SpringApplication.run(Boot1.class, args);
    }
}

二、消费端

1.pom

引入 spring-cloud-starter-openfeign

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.2</version>
    <relativePath/>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
        <version>3.1.5</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.26</version>
        <optional>true</optional>
    </dependency>
</dependencies>

2.yml

application.yml 文件

server:
  port: 8082

customer:
  url: http://127.0.0.1:8081/

3.java

@Getter
@Builder
public class RemoteRequest {

    private Integer id;

    private String name;
}

@Setter
@Getter
public class RemoteResponse {

    private Integer id;

    private String name;
}

@FeignClient(name = "feignCustomerService", url = "${customer.url}")
public interface CustomerService {

    @GetMapping(value = "/remote")
    String remote();

    @GetMapping(value = "/remoteGet")
    String remoteGet(@RequestParam("name") String name);

    @PostMapping(value = "/remotePost")
    RemoteResponse remotePost(@RequestBody RemoteRequest orderUpdateDTO);
}

@RestController
public class IndexController {

    @Autowired
    private CustomerService service;

    @GetMapping("/remote")
    public String remote() {
        String response = service.remote();

        System.out.println("- - - remoteGet - - - 8082");
        System.out.println(response);
        return response;
    }

    @GetMapping("/remoteGet")
    public String remoteGet() {
        String response = service.remoteGet("zhang1");

        System.out.println("- - - remoteGet - - - 8082");
        System.out.println(response);
        return response;
    }

    @GetMapping("/remotePost")
    public RemoteResponse remotePost() {
        RemoteRequest request = RemoteRequest.builder()
                .id(1)
                .name("zhangsan")
                .build();
        RemoteResponse response = service.remotePost(request);

        System.out.println("- - - remoteGet - - - 8082");
        System.out.println(response);
        return response;
    }
}

@EnableFeignClients
@SpringBootApplication
public class Boot2 {

    public static void main(String[] args) {
        SpringApplication.run(Boot2.class, args);
    }
}