SpringCloud Ablibab之Nacos

本文详细介绍了如何使用SpringCloud Alibaba的Nacos实现微服务架构中的服务发现和配置管理,包括环境搭建、配置中心集成、服务注册与消费以及分布式配置更新。通过实例演示,展示了Nacos在敏捷开发和现代应用架构中的关键作用。

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

SpringCloud Ablibab之Nacos

Nacos简介

Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理

Nacos 帮助可以帮助我们更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

搭建环境

Dcoker安装Nacos

首先添加配置到配置中心
在这里插入图片描述添加配置
在这里插入图片描述

这里我是用的是 alibaba 2.1.2

创建父项目
父项目导入依赖

<!--依赖管理-->
 <dependencyManagement>
     <dependencies>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-dependencies</artifactId>
             <version>Hoxton.SR11</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-dependencies</artifactId>
             <version>2.3.10.RELEASE</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-alibaba-dependencies</artifactId>
             <version>2.1.2.RELEASE</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>
     </dependencies>
 </dependencyManagement>
 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>true</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

创建goods子项目
导入依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

application.tml配置文件

server:
  port: 8801
spring:
  application:
    name: goods-service
  cloud:
    nacos:
      discovery:
        server-addr: 47.100.68.143:8848

bootstrap.yml

spring:
  cloud:
    nacos:
      config:
        server-addr: 47.100.68.143:8848
        prefix: goods-service
        file-extension: yaml
  profiles:
    active: dev

主启动类

@EnableDiscoveryClient
@SpringBootApplication
public class GoodsServiceMain8801 {
    public static void main(String[] args) {
        SpringApplication.run(GoodsServiceMain8801.class,args);
    }
}

实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Goods {
    private Long id;
    private String name;
    private Double price;
}

service层

@Service
public class GoodsService {
    public Goods findGoods(){
        return new Goods(1L,"MI笔记本5400",5555.0);
    }
}

GoodsController

@RestController
@RequestMapping("provider")
public class GoodsController {

    @Autowired
    private GoodsService goodsService;

    @GetMapping("goods")
    public Goods findGoods(){
        return goodsService.findGoods();
    }
}

nacos分布式配置controller

@RefreshScope
@RestController
public class ConfigController {
    @Value("${spring.datasource.driver-class-name}")
    private String driver;
    @Value("${spring.datasource.url}")
    private String url;
    @Value("${spring.datasource.username}")
    private String username;
    @Value("${spring.datasource.password}")
    private String password;

    @GetMapping("config")
    public String config(){
        return "{driver='" + driver + '\'' +
                ", url='" + url + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

创建订单模块
导入依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

配置文件:

server:
  port: 8802
spring:
  application:
    name: order-service
  cloud:
    nacos:
      discovery:
        server-addr: 47.100.68.143:8848

主启动类

@EnableDiscoveryClient
@SpringBootApplication
public class OrdersServiceMain8802 {
    public static void main(String[] args) {
        SpringApplication.run(OrdersServiceMain8802.class,args);
    }
}

实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Order {
    private Long id;
    private String name;
    private Goods goods;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Goods {
    private Long id;
    private String name;
    private Double price;
}

RestTemplateConfig

@Configuration
public class RestTemplateConfig {

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

OrderController

@RestController
@RequestMapping("consumer")
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("order")
    public ResponseEntity<Order> findGoods(){
        //通过服务id调用服务提供者
        Goods goods = restTemplate.getForObject("http://goods-service/provider/goods", Goods.class);
        Order order = new Order(100L,"xxx订单",goods);
        return ResponseEntity.ok(order);
    }
}

启动这两个服务,访问Nacos,出现下面界面说明注册成功
在这里插入图片描述

访问8802看远程调用是否成功,出现下面情况则为成功
在这里插入图片描述
访问8801服务,测试配置中心是否成功
在这里插入图片描述当我们修改nacos中的配置时,服务中的配置也会同步修改。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记或往

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值