nacos入门案例Demo

本文介绍了如何使用Spring Boot 2.3.2.RELEASE、Spring Cloud Hoxton.SR8和Spring Cloud Alibaba 2.2.5 RELEASE创建一个名为cloud-demo的父工程,并配置Nacos作为服务注册与发现中心。创建了cloud-goods服务提供者,包含了商品实体类和RESTful API。接着创建了cloud-order服务消费者,使用了@LoadBalanced的RestTemplate实现对cloud-goods的负载均衡调用。最后,通过集群部署,展示了如何在Nacos中实现服务间的负载均衡轮询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建父工程cloud-demo(maven)

版本确定:
nacos:1.4.1
springcloud-alibaba:2.2.5 RELEASE
springcloud: Hoxton.SR8
springboot: 2.3.2.RELEASE

在pom.xml添加相关版本管理

  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath></relativePath>
    </parent>
    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>

    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR8</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

服务提供者

在父工程中创建一个模块cloud-goods(maven)
添加依赖:

 <dependencies>
<!--       web场景依赖-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>

       </dependency>
<!--       端点控制依赖-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-actuator</artifactId>
       </dependency>
       <!--nacos场景依赖-->
       <dependency>
           <groupId>com.alibaba.cloud</groupId>
           <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

       </dependency>
   </dependencies>

创建核心配置文件:src/main/resources/application.yml

spring:
  application:
    name: cloud-goods   #服务名称 必须有 保证唯一
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #指定nocas-server的地址
        username: nacos
        password: nacos
server:
  port: 9001


在java文件夹中创建springboot入口类com.qf.GoodsApp
一定要加@EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient //开启服务注册与发现功能
public class GoodsApp {
    public static void main(String[] args) {
        SpringApplication.run(GoodsApp.class,args);
    }
}

在这里插入图片描述
启动springboot后,会在nacos发现这个服务
在这里插入图片描述

创建实体类
创建新module cloud-entity(maven) 实体类
依赖:

<dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

创建实体类Goods
在这里插入图片描述
在cloud-goods中引入实体类依赖:
在这里插入图片描述
写一个简单的controller
在这里插入图片描述

服务消费者

在父工程创建新的module cloud-order(maven) 订单

pom.xml

 <parent>
        <artifactId>cloud-demo</artifactId>
        <groupId>com.qf</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-goods</artifactId>
   <dependencies>
<!--       web场景依赖-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>

       </dependency>
<!--       端点控制依赖-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-actuator</artifactId>
       </dependency>
       <!--nacos场景依赖-->
       <dependency>
           <groupId>com.alibaba.cloud</groupId>
           <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

       </dependency>
       <dependency>
           <groupId>com.qf</groupId>
           <artifactId>cloud-entity</artifactId>
           <version>1.0-SNAPSHOT</version>
       </dependency>
       <dependency>
           <groupId>com.qf</groupId>
           <artifactId>cloud-entity</artifactId>
           <version>1.0-SNAPSHOT</version>
           <scope>compile</scope>
       </dependency>
   </dependencies>


</project>

application.yml:

spring:
  application:
    name: cloud-order   #服务名称 必须有 保证唯一
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #指定nocas-server的地址
        username: nacos
        password: nacos
server:
  port: 9002


OrderApp:
在这里插入图片描述
controller:
在这里插入图片描述
controller中save保存订单方法 需要发送http请求获取cloud-goods的服务 故需要resttemplate
在OrderApp中初始化restTemplate:
在这里插入图片描述
完成controller:
在这里插入图片描述
浏览器发送http请求,可以得到结果:
在这里插入图片描述
后端控制台也有响应数据:

在这里插入图片描述
此时还有一个问题,localhost:9002是硬编码 不利于修改维护
应该采用服务名的形式
在这里插入图片描述
但是此时直接用服务名是不被承认的,需要在启动类初始化restTemplate的地方添加注解:@LoadBalanced
在这里插入图片描述
该注解可以开启ribbon
resttemplate发送请求通过ribbon去获取服务实例列表,从而让cloud-goods被映射成localhost:9002

集群演示

搭建GoodsApp集群
在这里插入图片描述
此时application.yml里的端口需要修改 获取port参数 如果没有就用8080
在这里插入图片描述
controller里获取一下端口号
然后调用请求的时候打印一下
在这里插入图片描述
此时9001 9003是同一个集群

9002发送10次请求;
在这里插入图片描述
发现9001 9003轮换(轮询) @LoadBalanced开启了负载均衡

nacos领域模型

nacos的服务由三元组唯一确定 (namespace、group、servicename)
namespace:默认值为public
group:默认值为DEFAULT_GROUP
不同的namespace是相互隔离的,相同namespace但是不同group也是相互隔离的

微服务发现另外一个微服务,通过三元组去找服务
在这里插入图片描述
1.新建命名空间:
在这里插入图片描述
在这里插入图片描述
2.发布服务到指定命名空间
要想发布服务 首先要在application.yml里添加配置
cloud-goods的
在这里插入图片描述
cloud-order的
在这里插入图片描述
goods在测试环境 order在生产环境
在这里插入图片描述
再次发送save请求 发现报错 说明namespace生效 两个服务相互隔离
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值