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