文章目录本文使用Nacos来实现服务发现
- 概述
- 创建服务整合Nacos
- service-provider
- service-consumer
- 启动测试
- 服务调用
- service-provider
- service-consumer
- 启动测试
- 本文小结
概述
本文的目的是对SpringBoot服务整合Nacos,实现服务调用。
下面会创建2个 SpringBoot 项目:
- service-provider
- service-consumer
都整合Nacos,启动后可以自动注册到 Nacos 服务注册中心。
然后在service-consumer的Controller中实现对service-provider的接口调用。
步骤:
(1)创建service-provider与service-consumer,整合Nacos
(2)service-provider 中添加测试接口 “/hello”,service-consumer 中调用其 “/hello” 接口
创建服务整合Nacos service-provider
pom.xml
org.springframework.boot
spring-boot-starter-parent
2.2.5.RELEASE
com.example
service-provider
0.0.1-SNAPSHOT
service-provider
Demo project for Spring Boot
1.11
org.springframework.boot
spring-boot-starter-web
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-dependencies
Hoxton.SR3
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.2.1.RELEASE
pom
import
org.springframework.boot
spring-boot-maven-plugin
重点是 SpringBoot、SpringCloud、SpringCloud Alibaba 这3者的版本问题,这里使用的版本为:
- SpringBoot 2.2.5.RELEASE
- SpringCloud Hoxton.SR3
- SpringCloud Alibaba 2.2.1.RELEASE
如何确定各自的版本呢?在 SpringCloud Alibaba 项目的 wiki 文档中有所说明,地址为:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
页面效果:
添加好依赖之后,添加相关配置:
server:
port: 8081 # 端口
spring:
application:
name: service-provider # 服务名
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos server 地址
然后在启动类中添加注解:
...
@SpringBootApplication
@EnableDiscoveryClient // 开启服务发现
public class ServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceProviderApplication.class, args);
}
}
service-consumer
依赖于 service-provider 中一致,还有添加的注解也是一样的。
只是配置有点不同,需要使用不同的端口,以及服务名称:
server:
port: 8082 # 端口
spring:
application:
name: service-consumer # 服务名
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos server 地址
启动测试
分别启动 service-provider 与 service-consumer,启动后即可在 Nacos 控制台的服务列表中看到:
说明整合Nacos成功。
服务调用 service-provider
在 service-provider 中添加一个测试接口 /hello:
...
@RestController
public class TestController {
@GetMapping("hello")
public String hello(@RequestParam String name){
return "hello " + name;
}
}
service-consumer
在 service-consumer 中进行调用,因为需要使用 RestTemplate,所以先配置一下:
...
@Configuration
public class ConsumerConfig {
// 定义 RestTemplate Bean
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
下面开始调用:
...
@RestController
public class TestController {
// 引入 RestTemplate 和 LoadBalancerClient
@Autowired
RestTemplate restTemplate;
@Autowired
LoadBalancerClient loadBalancerClient;
@GetMapping("hello")
public String hello(@RequestParam String name) {
String result = "";
// 根据服务名获取服务实例
ServiceInstance serviceInstance = loadBalancerClient.choose("service-provider");
// 发起调用,返回调用结果
return restTemplate.getForObject(serviceInstance.getUri() + "/hello?name=" + name, String.class);
}
}
启动测试
重启 service-provider、service-consumer,访问 service-consumer 的 /hello 接口,地址:
http://localhost:8082/hello?name=nacos
返回结果为 “hello nacos”,调用成功。
本文小结
本文简单使用Nacos和springboot整合来实现一个服务的注册和发现,创建了一个消费者和一个服务者。



