步骤1:下载和安装Nacos 首先,你需要从Nacos的官方网站上下载并安装Nacos Server。根据你的操作系统选择合适的版本,并按照官方文档中的说明进行安装和配置。
步骤2:创建Spring Boot项目 在你喜欢的IDE中创建一个新的Spring Boot项目,命名为"demo-service"。确保将依赖管理方式设置为Maven,并添在父POM加如下的依赖:
<!-- 引入 spring-cloud模块 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud Alibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
步骤3:配置Nacos连接信息 打开"application.properties"或"application.yml"文件,添加以下配置,其中,"server-addr"为Nacos Server的地址和端口号,根据你的安装配置进行修改。
spring.application.name=demo-service
server.port=8080
spring.cloud.nacos.discovery.server-addr=localhost:8848
步骤4:启用服务注册与发现 在Spring Boot应用程序的入口类(通常是带有@SpringBootApplication注解的类)上添加@EnableDiscoveryClient注解,启用Nacos的服务注册与发现功能。
步骤5:注册服务 对于需要注册到Nacos的服务,你可以在相应的Controller类中添加@RestContoller和@RequestMapping注解,创建REST接口
步骤6:启动应用程序 使用IDE或者命令行启动应用程序。应用程序会自动注册到Nacos Server,并将自己的地址和端口信息注册到服务注册表中。
步骤7:查看服务列表 访问Nacos的控制台,在服务列表中应该能看到你注册的服务信息。你可以查看服务的节点信息、健康状态等。
至此,你已经成功地使用Nacos实现了服务注册与发现。
步骤8:多个服务之间调用,在需要调用已注册的服务的地方,可以使用RestTemplate来发起HTTP请求并调用服务。在Spring Boot中使用RestTemplate非常方便,以下是一个简单的例子:
@Autowired
private RestTemplate restTemplate;
@GetMapping("/call-demo-service")
public String callDemoService() {
String demoServiceUrl = "http://demo-service/api/hello"; // 指向已注册服务的REST接口路径
return restTemplate.getForObject(demoServiceUrl, String.class);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
负载均衡:当在RestTemplate中加上@LoadBalanced注解时,可以实现负载均衡的功能,即在调用多个相同服务提供者的情况下,能够均衡地分配请求到不同的服务实例上。以下是使用@LoadBalanced注解的示例代码:
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerServiceApplication {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Autowired
private RestTemplate restTemplate;
@GetMapping("/call-demo-service")
public String callDemoService() {
String demoServiceUrl = "http://demo-service/api/hello";
return restTemplate.getForObject(demoServiceUrl, String.class);
}
public static void main(String[] args) {
SpringApplication.run(ConsumerServiceApplication.class, args);
}
}
在上述代码中,通过在RestTemplate的@Bean方法上添加@LoadBalanced注解,使得RestTemplate具备了负载均衡的能力。这样,在调用"demo-service"服务的REST接口时,RestTemplate将会自动选择一个可用的服务实例进行调用,实现了负载均衡的效果。
即:nacos中同一个服务名可以对应多个端口的应用,在调用的时候加上@LoadBalanced注解,他会自己去分配调用哪个端口的应用