【Nacos】Nacos快速上手
Nacos快速上手
- 项目环境介绍
- 一、服务注册/服务发现
- 1.引入Spring Cloud Alibaba依赖
- 2.引入Nacos相关的依赖
- 3.引入Load Balance依赖
- 4.配置Nacos的地址
- 二、修改远程调用代码
- 三、测试
- 四、启动多个服务,测试负载均衡
- 五、可能出现的问题
项目环境介绍
请你确保你的服务器或个人主机上已经安装并配置了Nacos
如果没有,请先安装Nacos并进行相应配置:Nacos安装和配置
这里我们使用一个父子工程的项目来进行演示,子工程一个是订单服务order-service
,一个是商品服务product-service
,在访问订单服务的时候,它就会远程调用我们的商品服务(此处订单服务时服务消费者,商品服务是服务提供者)
远程调用代码:
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private RestTemplate restTemplate;
public OrderInfo selectOrderById(Integer orderId){
OrderInfo orderInfo = orderMapper.selectOrderInfoById(orderId);
String url = "http://127.0.0.1:9090/product/"+orderInfo.getProductId();
ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
orderInfo.setProductInfo(productInfo);
return orderInfo;
}
}
一、服务注册/服务发现
Nacos的服务注册和服务发现代码一样
1.引入Spring Cloud Alibaba依赖
在父工程的pom文件中的中引入Spring Cloud Alibaba的依赖:
<properties>
<spring-cloud-alibaba.version>2022.0.0.0-Rc2</spring-cloud-alibaba.version>
</properties>
<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>
💥 注意: Spring Boot 和Spring Cloud的版本是有一定对应关系的,Spring Cloud
Alibaba也遵循Spring Cloud 的标准,在引入依赖时,一定要确认各个版本的对应关系,Spring Cloud Alibaba和Spring Cloud版本对应关系,参考官方文档:版本发布说明
版本在一定范围内才可以选择使用
2.引入Nacos相关的依赖
在order-service
和product-service
中引入nacos依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.引入Load Balance依赖
同样在order-service
和product-service
中都引入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
4.配置Nacos的地址
可以配置在我们自己的主机上也可以配置在Linux服务器上,此处我们选择Linux
配置项 | Key | 默认值 | 说明 |
---|---|---|---|
服务端地址 | spring.cloud.nacos.discovery.server-addr | 无 | Nacos Server启动监听的ip地址和端口 |
spring:
application:
name: product-service
#服务端地址
cloud:
nacos:
discovery:
server-addr: http://120.26.87.94:10020/
当然,此处如果使用的是本机作为Nacos服务中心,配置项该位自己主机的ip和相应端口即可
二、修改远程调用代码
把代码修改成我们的项目名
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private RestTemplate restTemplate;
public OrderInfo selectOrderById(Integer orderId){
OrderInfo orderInfo = orderMapper.selectOrderInfoById(orderId);
String url = "http://product-service/product/"+orderInfo.getProductId();
ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
orderInfo.setProductInfo(productInfo);
return orderInfo;
}
}
别忘了添加负载均衡注解 @LoadBalanced
@Configuration
public class BeanConfig {
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
三、测试
测试接口:http://127.0.0.1:8080/order/1
此时启动这两个服务,就会发现在Nacos管理界面就已经有这两个服务了
四、启动多个服务,测试负载均衡
在services
栏中,我们可以配置多个服务,具体操作步骤如下:
右击我们要进行复制的服务,然后选择Copy Configuration
项,然后再弹出的窗口中点击Modify options
->Add VM options
,进行端口配置,后续会出现一个新的输入项,我们输入-Dserver.port={自定义端口号}
再确认即可创建出多个服务实例
启动服务,观察Nacos界面,就可以看到我们已经添加了多个服务实例
五、可能出现的问题
java.net.UnknownHostException
出现这种问题大概率是因为没有添加负载均衡的依赖
检查是否添加了依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
服务注册失败
这种情况有可能会有报错日志也可能没有,但出现这种情况我们应该检查Spring Cloud Alibaba版本是否是正确的:版本发布说明