当前位置:   article > 正文

springcloud+nacos服务注册与发现

springcloud+nacos服务注册与发现

快速开始 | Spring Cloud Alibaba

参考官方快速开始教程写的,主要注意引用的包是否正确。

这里是用的2022.0.0.0-RC2版本的springCloud,所以需要安装jdk21,参考上一个文章自行安装。

nacos-config实现配置中心功能-CSDN博客

将nacos-config和服务提供者、消费消费者整合起来就是一个完整的分布式项目了。

服务提供者

创建项目

nacos-discovery-provider-example

添加依赖

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>3.0.13</version>
  5. <relativePath/> <!-- lookup parent from repository -->
  6. </parent>
  7. <dependencies>
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-web</artifactId>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.projectlombok</groupId>
  14. <artifactId>lombok</artifactId>
  15. <optional>true</optional>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-test</artifactId>
  20. <scope>test</scope>
  21. </dependency>
  22. <dependency>
  23. <groupId>com.alibaba.cloud</groupId>
  24. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  25. <version>2022.0.0.0-RC2</version>
  26. </dependency>
  27. </dependencies>

修改配置文件

application.properties

如果nacos没有开启鉴权,则不需要配置账号密码
spring.cloud.nacos.discovery.namespace=local是用来做多环境配置的(本地、开发、测试、生产),此处可以不配置,添加到启动参数里面。

  1. spring.application.name=service-provider
  2. spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  3. spring.cloud.nacos.discovery.username=nacos
  4. spring.cloud.nacos.discovery.password=nacos
  5. spring.cloud.nacos.discovery.namespace=local
  6. server.port=18082

核心代码

  1. @SpringBootApplication
  2. @EnableDiscoveryClient
  3. public class NacosDiscoveryProviderExampleApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(NacosDiscoveryProviderExampleApplication.class, args);
  6. }
  7. }
  1. @RestController
  2. public class EchoController {
  3. @GetMapping(value = "/echo/{string}")
  4. public String echo(@PathVariable String string) {
  5. return string;
  6. }
  7. }

启动项目 

可以添加-Dspring.cloud.nacos.config.namespace=local参数指定启动的环境

查看nacos注册的服务 

查看服务列表,显示服务已经注册成功。

服务消费者 

创建项目

nacos-discovery-consumer-example 

添加依赖

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>3.0.13</version>
  5. <relativePath/> <!-- lookup parent from repository -->
  6. </parent>
  7. <dependencies>
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-web</artifactId>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.projectlombok</groupId>
  14. <artifactId>lombok</artifactId>
  15. <optional>true</optional>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-test</artifactId>
  20. <scope>test</scope>
  21. </dependency>
  22. <dependency>
  23. <groupId>org.springframework.cloud</groupId>
  24. <artifactId>spring-cloud-loadbalancer</artifactId>
  25. <version>4.0.5</version>
  26. </dependency>
  27. <dependency>
  28. <groupId>com.alibaba.cloud</groupId>
  29. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  30. <version>2022.0.0.0-RC2</version>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework.cloud</groupId>
  34. <artifactId>spring-cloud-starter-openfeign</artifactId>
  35. <version>4.0.6</version>
  36. </dependency>
  37. </dependencies>

修改配置文件

application.properties

如果nacos没有开启鉴权,则不需要配置账号密码
spring.cloud.nacos.discovery.namespace=local是用来做多环境配置的(本地、开发、测试、生产),此处可以不配置,添加到启动参数里面。

  1. spring.application.name=service-consumer
  2. server.port=18083
  3. spring.cloud.nacos.discovery.username=nacos
  4. spring.cloud.nacos.discovery.password=nacos
  5. spring.cloud.nacos.discovery.namespace=local
  6. spring.cloud.loadbalancer.ribbon.enabled=false
  7. spring.cloud.loadbalancer.nacos.enabled=true

核心代码

  1. @SpringBootApplication
  2. @EnableFeignClients
  3. @EnableDiscoveryClient
  4. public class NacosDiscoveryConsumerExampleApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(NacosDiscoveryConsumerExampleApplication.class, args);
  7. }
  8. }
  1. @FeignClient(name = "service-provider")
  2. public interface EchoService {
  3. @GetMapping(value = "/echo/{str}")
  4. String echo(@PathVariable("str") String str);
  5. }
  1. @Configuration
  2. public class BeanInit {
  3. @Bean
  4. @LoadBalanced
  5. public RestTemplate restTemplate() {
  6. return new RestTemplate();
  7. }
  8. }

这里的rest和feign是接口的两种调用方式。

rest直接通过服务名和url,使用http的方式调用。

feign使用service封装服务,然后以service的方式调用服务。

我们自己在生产中使用的rest的方式调用。 

  1. @RestController
  2. public class TestController {
  3. @Autowired
  4. private RestTemplate restTemplate;
  5. @Autowired
  6. private EchoService echoService;
  7. @GetMapping(value = "/echo-rest/{str}")
  8. public String rest(@PathVariable String str) {
  9. return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
  10. }
  11. @GetMapping(value = "/echo-feign/{str}")
  12. public String feign(@PathVariable String str) {
  13. return echoService.echo(str);
  14. }
  15. }

启动项目 

可以添加-Dspring.cloud.nacos.config.namespace=local参数指定启动的环境

调用接口

http://localhost:18083/echo-rest/abcede

http://localhost:18083/echo-feign/abcd

查看nacos注册的服务

总结 

看了下官方的demo,直接使用的话有很多jar包缺失或者版本号没有指明。

可以参考他的demo代码。比较全。

spring-cloud-alibaba/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example at 2022.x · alibaba/spring-cloud-alibaba · GitHub

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

闽ICP备14008679号