nacos服务发现注册

服务发现数据模型

  • 命名空间(Namespace)

    用于进行租户粒度的配置隔离,命名空间不仅适用于nacos的配置管理,同样适用于服务发现。Namespace 的常 用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

  • 服务

    提供给客户端的软件功能,通过预定义接口网络访问。

  • 服务名

    服务提供的标识,通过该标识可以唯一确定其指代的服务。

  • 实例

    提供一个或多个服务的具有可访问网络地址(IP:Port)的进程,启动一个服务,就产生了一个服务实例

  • 元信息

    Nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签 (label),从作用范围来看,分为服务级别的元信息、集群的元信息及实例的元信息。

  • 集群

    服务实例的集合,服务实例组成一个默认集群, 集群可以被进一步按需求划分,划分的单位可以是虚拟集群,相同集群下的实例才能相互感知。

SpringCloud+Nacos+Feign

父工程nacos-discovery

依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.13.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.example</groupId>
    <artifactId>nacos-discovery</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>nacos-discovery</name>
    <description>nacos-discovery</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>

    <modules>
        <module>provider</module>
        <module>consumer</module>
    </modules>

    <packaging>pom</packaging>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--nacos-discovery-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
服务提供者

依赖

直接用父工程里的就行

application.yml

这里不用读取nacos配置文件,所以就不用bootstrap.yml

server:
  port: 56010

spring:
  application:
    name: provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

启动类

启动类注解!

@SpringBootApplication
@EnableDiscoveryClient//服务发信
@EnableFeignClients//feign
public class ProviderApplication {

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

}

服务

@RestController
public class ProviderController {

    @GetMapping("service")
    public String service() {
        return "provider invoke";
    }
}
服务消费者

依赖

直接用父工程中就行

application.yml

server:
  port: 56011

spring:
  application:
    name: consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

启动类

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {

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

}

重点:服务提供的接口

@FeignClient(value = "provider")//value:服务提供方服务名(提供方yml选中spring.application.name)
public interface ProviderClient {

    @GetMapping("service")
    public String service();

}

调用

@RestController
public class ConsumerController {

    @Autowired
    private ProviderClient providerClient;

    @GetMapping("service")
    public String service() {
        String providerResult = providerClient.service();
        return "consumer invoke==>" + providerResult;
    }
}
测试
  • 先启动nacos,再启动服务提供者和消费者,在nacos界面服务列表中可以看到

测试负载均衡

修该服务提供者yml配置,动态获取端口

server:
  port: ${port:56010} # 启动端口,根据启动时传参动态配置端口,模拟多个服务提供,传了参用传的,不穿用56010

spring:
  application:
    name: provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        #namespace: 2d108db1-4b7b-4175-8012-be00d735ea8a # 不配置此项,默认注册到public里
        #cluster-name: DEFAULT # 不配置此项,默认default

idea传参 -Dporg=xxx

复制一个providerApplication,修该vm options参数如下,然后启动

nacos后台看到provider有两个实例了

测试负载均衡

在服务提供方代码中加入标记日志语句,浏览器访问:http://localhost:56011/service,多次请求

可以看到ProvidrApplication和ProvidrApplication2中循环打印,说明默认轮询的负载均衡策略

posted @   jpy  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2021-01-25 MQ概述
2021-01-25 缓存穿透,击穿,雪崩
2021-01-25 Redis操作数据命令
点击右上角即可分享
微信分享提示