当前位置:   article > 正文

5、alibaba微服务nacos的引入和使用_nacos导入配置怎么用

nacos导入配置怎么用

1、项目中引入nacos

父项目中已经引入了spring-cloud-alibaba,这个里面就已经包含nacos依赖了,所以在子项目中引入nacos依赖不用添加版本信息

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. </dependency>
  6. <!--nacos-服务注册发现-->
  7. <dependency>
  8. <groupId>com.alibaba.cloud</groupId>
  9. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  10. </dependency>
  11. </dependencies>

引入之后需要在子项目的application.yml中添加服务的名称和nacos服务地址信息

  1. server:
  2. port: 8020
  3. #应用名称(nacos会将该名称当做服务名称)
  4. spring:
  5. application:
  6. name: order-service
  7. cloud:
  8. nacos:
  9. server-addr: 192.168.1.146:8848
  10. discovery:
  11. #不配置,默认的就是nacos
  12. username: nacos
  13. password: nacos
  14. #namespace的默认值就是public,可以不用配置
  15. namespace: public
  1. server:
  2. port: 8021
  3. #应用名称(nacos会将该名称当做服务名称)
  4. spring:
  5. application:
  6. name: stock-service
  7. cloud:
  8. nacos:
  9. server-addr: 192.168.1.146:8848
  10. discovery:
  11. #不配置,默认的就是nacos
  12. username: nacos
  13. password: nacos
  14. #namespace的默认值就是public,可以不用配置
  15. namespace: public

然后咱们启动这两个服务

 通过日志,咱们可以看到服务已经注册到nacos中了,那么咱们访问下nacos

 可以看到服务已经注册到nacos中了。

点击操作列的“详情”,可以看到详细的元数据信息

 如果将服务停止,15s左右健康状况改成false,如果20s-30s左右检测不到心跳,会将这个服务剔除掉。

2、代码中对nacos的使用

通过order中调用stock库存的原先的代码

  1. package com.chinasofti.order.controller;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.RestController;
  5. import org.springframework.web.client.RestTemplate;
  6. /**
  7. * @Author mxx
  8. * @Date 2023/6/12 16:44
  9. * @Version 1.0
  10. */
  11. @RestController
  12. @RequestMapping("/order")
  13. public class OrderController {
  14. @Autowired
  15. RestTemplate restTemplate;
  16. @RequestMapping("/add")
  17. public String add(){
  18. System.out.println("下单成功");
  19. String msg=restTemplate.getForObject("http://localhost:8011/stock/reduct",String.class);
  20. return "Hello World!"+msg;
  21. }
  22. }

引入nacos之后的代码:

  1. package com.chinasofti.order.controller;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.RestController;
  5. import org.springframework.web.client.RestTemplate;
  6. /**
  7. * @Author mxx
  8. * @Date 2023/6/12 16:44
  9. * @Version 1.0
  10. */
  11. @RestController
  12. @RequestMapping("/order")
  13. public class OrderController {
  14. @Autowired
  15. RestTemplate restTemplate;
  16. @RequestMapping("/add")
  17. public String add(){
  18. System.out.println("下单成功");
  19. String msg=restTemplate.getForObject("http://stock-service/stock/reduct",String.class);
  20. return "Hello World!"+msg;
  21. }
  22. }

重启下order的服务,调用下add方法看看

访问失败了,这是为啥呢,原因是nacos解析不了ip端口这些东西,它需要负载均衡器进行调用,负载均衡器默认采用轮询的方式调用库存服务,nacos默认采用的负载均衡是Ribbon

怎么引入负载均衡器呢,咱们在咱的RestTemplate中加一个注解 @LoadBalanced,如下:

  1. package com.chinasofti.order;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.boot.web.client.RestTemplateBuilder;
  5. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.web.client.RestTemplate;
  8. /**
  9. * @Author mxx
  10. * @Date 2023/6/12 16:55
  11. * @Version 1.0
  12. */
  13. @SpringBootApplication
  14. public class OrderApplication {
  15. public static void main(String[] args) {
  16. SpringApplication.run(OrderApplication.class,args);
  17. }
  18. @Bean
  19. @LoadBalanced
  20. public RestTemplate restTemplate(RestTemplateBuilder builder){
  21. RestTemplate restTemplate = builder.build();
  22. return restTemplate;
  23. }
  24. }

然后重启order服务再次访问,成功了,如下:

咱们如何测试nacos的负载均衡器的轮询的方式呢,咱们通过将stock复制一份出来

将复制出来的server.port 端口修改为8022

 

 为了方便查看咱们到底请求的是哪个stock,那么咱们修改下stock的代码,加上访问的端口

  1. package com.chinasofti.stock.controller;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.RestController;
  5. /**
  6. * @Author mxx
  7. * @Date 2023/6/12 16:48
  8. * @Version 1.0
  9. */
  10. @RestController
  11. @RequestMapping("/stock")
  12. public class StockController {
  13. @Value("${server.port}")
  14. String port;
  15. @RequestMapping("/reduct")
  16. public String reduct(){
  17. System.out.println("扣减库存");
  18. return "扣减库存:"+port;
  19. }
  20. }

 然后咱们将这三个服务都启动起来,再访问下订单的地址

多次刷新,发现一会访问的是8021,一会访问的是8022,这样咱们就实现轮询了 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/315293
推荐阅读
相关标签
  

闽ICP备14008679号