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

猜你喜欢

转载自blog.csdn.net/weixin_40461281/article/details/103387973