目录
Naacos
服务注册/服务发现
引⼊Spring Cloud Alibaba依赖
引入Nacos依赖
引入Load Balance依赖
配置Nacos地址
服务端调用
启动服务
Naacos
Nacos是Spring Cloud Alibaba的组件, Spring Cloud Alibaba遵循Spring Cloud中定义的服务注册, 服务发现规范. 因此使⽤Nacos和使⽤Eureka对于微服务来说,并没有太⼤区别.
主要差异在于:
• Eureka需要⾃⼰搭建⼀个服务, Nacos不⽤⾃⼰搭建服务, 组件已经准备好了, 只需启动即可.
• 对应依赖和配置不同
服务注册/服务发现
Nacos的服务注册和服务发现代码⼀样。
引⼊Spring Cloud Alibaba依赖
在⽗⼯程的pom⽂件中的 <dependencyManagement> 中引⼊Spring Cloud Alibaba的依赖:
<properties><spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version> </properties><dependencyManagement><dependencies><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> </dependencyManagement>
注意: Spring Boot 和Spring Cloud的版本是有⼀定对应关系的. Spring Cloud Alibaba也遵循
Spring Cloud 的标准, 在引⼊依赖时, ⼀定要确认各个版本的对应关系.
Spring Cloud Alibaba 和Spring Cloud版本对应关系, 参考官⽅⽂档:-》链接
版本在⼀定范围内可以⾃由选择.
引入Nacos依赖
在order-service和product-service中引⼊nacos依赖:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
引入Load Balance依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId> </dependency>
配置Nacos地址
配置项 | Key | 默认值 | 说明 |
服务端地址 | spring.cloud.nacos.discovery. server-addr | 无 | Nacos Server 启动监听的ip地址和端⼝ |
spring:application:name: product-servicecloud:nacos:discovery:server-addr: 47.98.109.138:8848
服务端调用
1. 修改IP为项⽬名
package order.service;import order.mapper.OrderMapper;
import order.model.OrderInfo;
import order.model.ProductInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public OrderInfo selectOrderById(Integer orderId){OrderInfo orderInfo = orderMapper.selectOrderById(orderId);String url = "http://product-service/product/"+orderInfo.getProductId();ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);orderInfo.setProductInfo(productInfo);return orderInfo;}
}
2. 为restTemplate添加负载均衡注解 @LoadBalanced
package order.config;import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class BeanConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
}
启动服务
启动两个服务, 观察Nacos的管理界⾯, 发现order-service 和product-service 都注册在Nacos上了。
测试负载均衡
多次访问“http://127.0.0.1:8080/order/1”,可以看到,每个服务实例接受的请求数量都差不多: