基于JDK8+SpringBoot2.7.18, nacos server2.4.3
一、物理化安装
1、下载nacos-server二进制包
2、上传至部署机器并进行解压
3、修改nacos默认端口
vim /root/soft/nacos/conf/application.properties
#修改默认端口为10001
#server.port=8848
server.port=10001
4、启动单机版nacos
注:Nacos的运行建议至少在2C4G 60G的机器配置下运行
#执行以下命令快速启动
sh startup.sh -m standalone
5、访问nacos的控制台页面,验证nacos是否部署OK
二、集成至SpringCloud,实现注册中心
1、父模块pom中添加nacos-discovery依赖包管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.0.6.2</version>
</dependency>
</dependencies>
</dependencyManagement>
2、对子模块服务提供者1进行配置
(1)pom中新增nacos-discovery依赖
<!-- nacos 注册中心 相关依赖 start -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos 注册中心 相关依赖 end -->
(2)application.yaml中新增nacos注册中心相关配置
spring:
application:
name: service-provider-1
cloud:
nacos:
discovery:
server-addr: nacos的ip:10001
(3)启动类中开启注册
@SpringBootApplication
@EnableDiscoveryClient # 添加该注解开启服务注册
public class App {
...
}
(4)定义一个接口,供服务消费者测试调用
@RestController
class ServiceProviderController {
@RequestMapping(value = "/getResult/{string}", method = RequestMethod.GET)
public String getResult(@PathVariable String string) {
return "Hello, Nacos Discovery service-provider-1 return : " + string;
}
}
3、对子模块服务提供者2进行配置
(1)pom中新增nacos-discovery依赖
<!-- nacos 注册中心 相关依赖 start -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos 注册中心 相关依赖 end -->
(2)application.yaml中新增nacos注册中心相关配置
spring:
application:
name: service-provider-2
cloud:
nacos:
discovery:
server-addr: nacos的ip:10001
(3)启动类中开启注册
@SpringBootApplication
@EnableDiscoveryClient # 添加该注解开启服务注册
public class App {
...
}
(4)定义一个接口,供服务消费者测试调用
@RestController
class ServiceProviderController {
@RequestMapping(value = "/getResult/{string}", method = RequestMethod.GET)
public String getResult(@PathVariable String string) {
return "Hello, Nacos Discovery service-provider-2 return : " + string;
}
}
4、对子模块服务消费者1进行配置
(1)pom中新增nacos-discovery依赖
<!-- nacos 注册中心 相关依赖 start -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos 注册中心 相关依赖 end -->
<!-- 微服务调用 相关依赖 start -->
<!-- 不引入spring-cloud-starter-loadbalancer的话,消费者通过服务提供者名调用会报错:`UnknownHostException` 问题 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<!-- 这里的版本和spring-cloud保持一致 -->
<version>3.1.5</version>
<type>pom</type>
</dependency>
<!-- 微服务调用 相关依赖 end -->
(2)application.yaml中新增nacos注册中心相关配置
spring:
application:
name: service-consumer-1
cloud:
nacos:
discovery:
server-addr: nacos的ip:10001
(3)启动类中开启注册
@SpringBootApplication
@EnableDiscoveryClient # 添加该注解开启服务注册
public class App {
...
}
(4)启动类中定义一个restTemplate的Bean
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
(5)定义两个接口,用于测试调用两个服务提供者定义的接口
@RestController
public class TestController {
private final RestTemplate restTemplate;
@Autowired
public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
@RequestMapping(value = "/provider1/{str}", method = RequestMethod.GET)
public String getResultFromServiceProvider1(@PathVariable String str) {
// 这里通过服务提供者名service-provider-1调用定义的接口
return restTemplate.getForObject("http://service-provider-1/getResult/" + str, String.class);
}
@RequestMapping(value = "/provider2/{str}", method = RequestMethod.GET)
public String getResultFromServiceProvider2(@PathVariable String str) {
// 这里通过服务提供者名service-provider-2调用定义的接口
return restTemplate.getForObject("http://service-provider-2/getResult/" + str, String.class);
}
}