文章目录
- Nacos服务注册和发现
- 1. Nacos服务注册
- 1.1 引入依赖
- 1.2 配置Nacos
- 1.3 重启服务
- 1.4 Nacos后台
- 2. Nacos服务发现
- 2.1 引入依赖
- 2.2 配置Nacos
- 2.3 服务发现
Nacos服务注册和发现
1. Nacos服务注册
服务提供者将服务注册到nacos注册中心
- 引入依赖
- 配置Nacos地址
- 重启
1.1 引入依赖
在pom.xml中引入Nacos依赖
<!--nacos 服务注册发现-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
1.2 配置Nacos
application.yml
中添加nacos地址配置:
spring:application:name: item-service # 服务名称cloud:nacos:server-addr: 192.168.1.100:8848 # nacos地址
1.3 重启服务
服务在启动时,自动注册Nacos.
1.4 Nacos后台
2. Nacos服务发现
2.1 引入依赖
<!--nacos 服务注册发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
2.2 配置Nacos
application.yml
中添加nacos地址配置:
spring:application:name: item-service # 服务名称cloud:nacos:server-addr: 192.168.1.100:8848 # nacos地址
2.3 服务发现
通过DiscoveryClient实现服务发现:
private void handleCartItems(List<CartVO> vos) {// 1.获取商品idSet<Long> itemIds = vos.stream().map(CartVO::getItemId).collect(Collectors.toSet());// 2.查询商品//2.1 服务发现:通过服务名称,获取服务实例List<ServiceInstance> instances = discoveryClient.getInstances("item-service");if (CollUtils.isEmpty(instances)) {return;}//2.2服务发现:通过随机算法负载均衡获取调用的服务实例ServiceInstance serviceInstance = instances.get(RandomUtil.randomInt(instances.size()));//2.3通过RestTemplate发起http请求,得到http响应ResponseEntity<List<ItemDTO>> response = restTemplate.exchange(serviceInstance.getUri()+"/items?ids={ids}",//服务发现:请求路径HttpMethod.GET,null,new ParameterizedTypeReference<List<ItemDTO>>() {},Map.of("ids", CollUtils.join(itemIds, ",")));if (!response.getStatusCode().is2xxSuccessful()) {return;}List<ItemDTO> items = response.getBody();
// List<ItemDTO> items = itemService.queryItemByIds(itemIds);if (CollUtils.isEmpty(items)) {return;}// 3.转为 id 到 item的mapMap<Long, ItemDTO> itemMap = items.stream().collect(Collectors.toMap(ItemDTO::getId, Function.identity()));// 4.写入vofor (CartVO v : vos) {ItemDTO item = itemMap.get(v.getItemId());if (item == null) {continue;}v.setNewPrice(item.getPrice());v.setStatus(item.getStatus());v.setStock(item.getStock());}}