springcloud+nacos服务注册与发现

快速开始 | Spring Cloud Alibaba

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

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

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

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

服务提供者

创建项目

nacos-discovery-provider-example

添加依赖

XML 复制代码
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.13</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2022.0.0.0-RC2</version>
        </dependency>
    </dependencies>

修改配置文件

application.properties

如果nacos没有开启鉴权,则不需要配置账号密码

spring.cloud.nacos.discovery.namespace=local是用来做多环境配置的(本地、开发、测试、生产),此处可以不配置,添加到启动参数里面。

XML 复制代码
spring.application.name=service-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.namespace=local
server.port=18082

核心代码

java 复制代码
@SpringBootApplication
@EnableDiscoveryClient
public class NacosDiscoveryProviderExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosDiscoveryProviderExampleApplication.class, args);
    }

}
java 复制代码
@RestController
public class EchoController {
    @GetMapping(value = "/echo/{string}")
    public String echo(@PathVariable String string) {
        return string;
    }
}

启动项目

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

查看nacos注册的服务

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

服务消费者

创建项目

nacos-discovery-consumer-example

添加依赖

XML 复制代码
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.13</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
            <version>4.0.5</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2022.0.0.0-RC2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>4.0.6</version>
        </dependency>

    </dependencies>

修改配置文件

application.properties

如果nacos没有开启鉴权,则不需要配置账号密码

spring.cloud.nacos.discovery.namespace=local是用来做多环境配置的(本地、开发、测试、生产),此处可以不配置,添加到启动参数里面。

XML 复制代码
spring.application.name=service-consumer
server.port=18083
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.namespace=local
spring.cloud.loadbalancer.ribbon.enabled=false
spring.cloud.loadbalancer.nacos.enabled=true

核心代码

java 复制代码
@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class NacosDiscoveryConsumerExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosDiscoveryConsumerExampleApplication.class, args);
    }
}
java 复制代码
@FeignClient(name = "service-provider")
public interface EchoService {
    @GetMapping(value = "/echo/{str}")
    String echo(@PathVariable("str") String str);
}
java 复制代码
@Configuration
public class BeanInit {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

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

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

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

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

java 复制代码
@RestController
public class TestController {

    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private EchoService echoService;

    @GetMapping(value = "/echo-rest/{str}")
    public String rest(@PathVariable String str) {
        return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
    }
    @GetMapping(value = "/echo-feign/{str}")
    public String feign(@PathVariable String str) {
        return echoService.echo(str);
    }
}

启动项目

可以添加-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

相关推荐
都叫我大帅哥8 小时前
Java JJWT 完全指南:从入门到生产级实践
java
前端开发张小七10 小时前
Java 学习笔记 · 第一课:基础语法与核心概念
java·后端
ThsPool10 小时前
【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发
java·前端·javascript
赤壁小虾11 小时前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
java·前端·数据库
青山木12 小时前
Hot 100 --- 搜索插入位置
java·数据结构·算法·leetcode
Jul1en_12 小时前
【Claude Code Compact】源码级别的学习上下文压缩
java·前端·学习·github·ai编程
摇滚侠12 小时前
《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 管理 Spring Boot 应用 阅读笔记
java·spring boot·笔记
XWalnut12 小时前
SpringBoot快速入门
java·spring boot·后端
前端 贾公子12 小时前
第06章:结构化输出 (上)
java·服务器·前端
念何架构之路13 小时前
restartmanager-重启管理子系统
java·开发语言