SpringCloud H系列 alibaba 2.1.1 (二) nacos1.X 註冊中心 多客戶端實現(Common,WebFlux,RestTemplate,Feign)

1.項目父工程與server端

請參考 : SpringCloud H系列 alibaba 2.1.1 (一) nacos1.X 註冊中心 服務端

2.項目結構

  • Common  通過spring cloud common中的負載均衡接口選取服務提供節點實現接口調用
  • WebFlux  通過 spring webflux  實現接口調用
  • RestTemplate  通過 spring RestTemplate  實現接口調用
  • Fegin  通過 spring openfeign 實現接口調用

 

3.創建客戶端子工程 alibaba-nacos-discovery-client

pom.xml  工程文件

    <parent>
        <groupId>com.alibaba</groupId>
        <artifactId>spring-cloud-hoxton</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>alibaba-nacos-discovery-client</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <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>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

</project>

application.yml   配置文件

server:
  port: 9000
spring:
  application:
    name: alibaba-nacos-discovery-client-webclient
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.1.141:8848

TestApplication.java  啓動類

@EnableDiscoveryClient  //啓動註冊中心客戶端 註冊到nacos
@SpringBootApplication
@EnableFeignClients     //開啓Feign客戶端
public class TestApplication {

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

}

客戶端需要根據服務名請求服務端的接口

(1) Common 實現

CommonController.java  服務端接口調用

@Slf4j
@RestController
public class CommonController {

    @Autowired
    LoadBalancerClient loadBalancerClient;

    @GetMapping("/testCommon")
    public String test() {
        ServiceInstance serviceInstance = loadBalancerClient.choose("alibaba-nacos-discovery-server");
        String url = serviceInstance.getUri() + "/test?name=common";
        RestTemplate restTemplate = new RestTemplate();
        String result = restTemplate.getForObject(url, String.class);
        return "返回數據 : " + result;
    }
}

測試

成功

(2) WebFlux 實現

WebFluxConfig.java  配置類

@Configuration
public class WebFluxConfig {

    @Bean
    @LoadBalanced
    public WebClient.Builder loadBalancedWebClientBuilder() {
        return WebClient.builder();
    }
}

 WebFluxController.java  服務端接口調用

@Slf4j
@RestController
public class WebFluxController {

    @Autowired
    private WebClient.Builder webClientBuilder;

    @GetMapping("/testWebFlux")
    public Mono<String> test() {
        Mono<String> result = webClientBuilder.build().get()
                .uri("http://alibaba-nacos-discovery-server/test?name=webFlux")
                .retrieve().bodyToMono(String.class);
        return result;
    }
}

測試

成功 

(3) RestTemplate 實現

RestTemplateConfig.java  配置類

@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

RestTemplateController.java  服務端接口調用

@Slf4j
@RestController
public class RestTemplateController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/testRest")
    public String test() {
        String result = restTemplate.getForObject("http://alibaba-nacos-discovery-server/test?name=restTemplate", String.class);
        return "返回數據 : " + result;
    }
}

測試

成功

 

(4) Fegin 實現

 TestServiceFeign.java  調用服務端的接口

@FeignClient("alibaba-nacos-discovery-server")
public interface TestServiceFeign {

    @GetMapping("/test")
    String hello(@RequestParam(name = "name") String name);

}

FeginController.java  調用配置好的接口

@Slf4j
@RestController
public class FeignController {

    @Autowired
    private TestServiceFeign client;

    @GetMapping("/testFeign")
    public String test() {
        String result = client.hello("feign");
        return "返回數據 : " + result;
    }
}

測試

成功 

 

項目已上傳到gitee

地址: spring-cloud-alibaba-H-demo

如果幫到您了,請幫忙點個star

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章