springcloud-alibaba服务注册发现整合feign:webflux调用
1.Feign是从Netflix中分离出来的轻量级项目,能够在类接口上添加注释,成为一个REST API客户端。
这里我们用到的是OpenFeign
SpringCloud在netflix feign的基础上扩展了支持Spring MVC注释,并通过自动配置为Spring Boot应用程序提供集成。
2.我们在上一篇的文章中的项目进行改造(上一篇文章地址:springcloud-alibaba服务注册发现)
3.在新建一个springboot项目名为nacos-discovery-consumer-feign
(可以直接复制一下nacos-discovery-consumer项目,删除target文件夹)
在父工程的pom.xml文件加入如下:
<modules>
<module>nacos-discovery-consumer</module>
<module>nacos-discovery-provider</module>
<module>nacos-discovery-consumer-feign</module>
</modules>
在nacos-discovery-consumer-feign项目的pom.xml文件中加入如下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
要想开启feign我们不要忘了在启动类上加@EnableFeignClients
4.新建一个DemoFeignService
package com.tuanzi.service;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @auther 团子
* @date 2019-07-28 16:26
*/
@FeignClient(name = "nacos-discovery-provider")//指定服务的提供方
public interface DemoFeignService {
@GetMapping("/demo")
String demo(@RequestParam("name") String name);
}
5.DemoController类
package com.tuanzi.controller;
import com.tuanzi.service.DemoFeignService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @auther 团子
* @date 2019-07-21 18:12
*/
@RestController
public class DemoController {
@Autowired
private DemoFeignService demoFeignService;
@GetMapping("/test")
public String test(String name){
return demoFeignService.demo(name);
}
}
这样我们代码就写完了
启动nacos,nacos-discovery-consumer-feign项目和nacos-discovery-provider项目
已经注册进来了
这时我们在访问:http://127.0.0.1:8052/test?name=tuanzi
也可以调用到
6.Webflux
我们还是复制(nacos-discovery-consumer项目,删除target和test文件夹)或者新建一个springboot项目
7.父工程添加
<modules>
<module>nacos-discovery-consumer</module>
<module>nacos-discovery-provider</module>
<module>nacos-discovery-consumer-feign</module>
<module>nacos-discovery-consumer-webflux</module>
</modules>
8.nacos-discovery-consumer-webflux项目的pom.xml文件添加如下:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
</dependencies>
9.在启动类添加如下代码:
@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryConsumerWebfluxApplication {
public static void main(String[] args) {
SpringApplication.run(NacosDiscoveryConsumerWebfluxApplication.class, args);
}
@Bean
@LoadBalanced
public WebClient.Builder webClientBuilder(){
return WebClient.builder();
}
}
10.controller类
package com.tuanzi.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
/**
* @auther 团子
* @date 2019-07-21 18:12
*/
@RestController
public class DemoController {
@Autowired
private WebClient.Builder webClientBuilder;
@GetMapping("/test")
public Mono<String> test(String name){
return webClientBuilder.build()
.get()
.uri("http://nacos-discovery-provider/demo?name=" + name)
.retrieve()
.bodyToMono(String.class);
}
}
这样就算写完了。我们来启动nacos-discovery-consumer-webflux和nacos-discovery-provider项目
我们可以看到也是注册进来了。
我们访问http://127.0.0.1:8053/test?name=tuanzi丫丫
也可以调用。