Nacos如何整合SpringCloud ?| 带你读《Spring Cloud Alibaba(2019)》之四

简介: 本节介绍Maven依赖信息,会员服务(生产者),订单服务(消费者)

上一篇:详解Nacos的产生与应用 | 带你读《Spring Cloud Alibaba(2019)》之三
下一篇:如何实现客户端负载均衡? | 带你读《Spring Cloud Alibaba(2019)》之五

本文来自于《精通Spring Cloud Alibaba》课程的整理,讲师为余胜军,点击查看视频内容
本文系志愿者整理,供配合学习中心课程使用,不做商业用途。

Nacos整合SpringCloud

创建工程,需要选择1.8
image.png
image.png

模块名称:然后Finish。
image.png
Nacos整合SpringCloud,我们需要引入依赖。

Maven依赖信息

<parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>2.0.0.RELEASE</version>
 </parent>
<dependencies>
    <!--  springboot 整合web组件-->
    <dependency>
       <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>0.2.2.RELEASE</version>
    </dependency>
</dependencies>

如何实现服务的注册?

会员服务(生产者)

服务接口

5.png
接口完成后,对会员进行注册。
拿到配置文件,对项目命名

配置文件

application.yml文件

spring:
  cloud:
    nacos:
      discovery:
        ###服务注册地址
        server-addr: 127.0.0.1:8848
  application:
    name: mayikt-member
server:
  port: 8081

6.png
再进行代码测试,自动实现对服务进行注册

image.png

image.png
详情页面:
image.png

订单服务(消费者)

按照之前的步骤,建立消费者:
image.png

新建项目之后,第一步,根据服务名称从 注册中心 获取集群列表地址。
第二步,根据列表任意选择一个 实现本地rpc调用rest
image.png
模拟运行:
image.png
配置文件:
image.png
执行结果:
image.png

注意:RestTeanmlate它不是SpringCloud写的,本身Spring支持Http协议调用
image.png

订单调用会员服务

image.png
执行结果:
image.png
此时这个程序是不完善的,我们需要去修改:
服务接口:

@RestController
public class MemberService {
    @Value("${server.port}")
    private String serverPort;

    /**
     * 会员服务提供的接口
     *
     * @param userId
     * @return
     */
    @RequestMapping("/getUser")
    public String getUser(Integer userId) {
        return "每特教育,端口号:" + serverPort;
    }
}

订单调用会员服务

@RestController
public class OrderService {

    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private DiscoveryClient discoveryClient;
    @Autowired
    private LoadBalancer loadBalancer;

    /**
     * 订单调用会员服务
     *
     * @return
     */
//    @RequestMapping("/orderToMember")
//    public String orderToMember() {
//        // 从注册中心上获取该注册服务列表
//        List<ServiceInstance> serviceInstanceList = discoveryClient.getInstances("mayikt-member");
//        ServiceInstance serviceInstance = serviceInstanceList.get(0);
//        URI rpcMemberUrl = serviceInstance.getUri();
//        // 使用本地rest形式实现rpc调用
//        String result = restTemplate.getForObject(rpcMemberUrl + "/getUser", String.class);
//        return "订单调用会员获取结果:" + result;
//    }
    @RequestMapping("/orderToMember")
    public String orderToMember() {
        // 从注册中心上获取该注册服务列表
        List<ServiceInstance> serviceInstanceList = discoveryClient.getInstances("mayikt-member");
        ServiceInstance serviceInstance = loadBalancer.getSingleAddres(serviceInstanceList);
        URI rpcMemberUrl = serviceInstance.getUri();
        // 使用本地rest形式实现rpc调用
        String result = restTemplate.getForObject(rpcMemberUrl + "/getUser", String.class);
        return "订单调用会员获取结果:" + result;
    }
}

执行结果:
image.png
Rpc远程调用设计到本地负载均衡算法。
1、从注册中心获取服务集群的列表
2、从列表选择一个

负载均衡算法有哪些
A、一致性hash计算
B、轮训、权重
C、随机

我们以轮训为例,采用策略设计模式
访问次数%集群size。

负载均衡算法

12.png

public interface LoadBalancer {


    /**
     * 根据多个不同的地址 返回单个调用rpc地址
     *
     * @param serviceInstances
     * @return
     */
    ServiceInstance getSingleAddres(List<ServiceInstance> serviceInstances);
}

@Component
public class RotationLoadBalancer implements LoadBalancer {
    private AtomicInteger atomicInteger = new AtomicInteger(0);

    @Override
    public ServiceInstance getSingleAddres(List<ServiceInstance> serviceInstances) {
        int index = atomicInteger.incrementAndGet() % serviceInstances.size();
        ServiceInstance serviceInstance = serviceInstances.get(index);
        return serviceInstance;
    }
}

Nacos与其他注册对比分析

访问之后在 服务列表中发现有两个集群。下线原理是在它的集合中移除
image.png
通过算法实时,实现中心获取地址。
14.png
15.png
手写RPC负载均衡五种算法。
权重需要对数据实现重新排序。
16.png
一致性hash:
image.png
随机数从集合中随机寻找。

故障转移:利用for循环,集合中取下一个值。
编程思维能力:举一反三

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
2月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
2116 65
|
3月前
|
XML Java Nacos
Spring Boot 整合Nacos 版本兼容适配 史上最详细文档
本文介绍SpringBoot整合Nacos的完整流程,涵盖Nacos下载安装、配置中心与服务发现集成、版本兼容性问题及实战配置。重点解决SpringBoot 3.3.0与Nacos版本适配难题,推荐使用Spring Cloud Alibaba方案,并提供项目开源地址供参考学习。
|
4月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
787 3
|
5月前
|
Dubbo 数据可视化 Java
整合SpringBoot、Dubbo与Nacos:一个快速入门教程
经过上述步骤,消费者模块成功引用了生产者提供的服务,并通过Spring Web将服务映射到了特定的URL路径上。消费者模块成功地调用并展示了生产者提供的数据,并在不移除特定依赖项的情况下确保了系统的正常运行。
|
2月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
9月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
10月前
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
4161 14
|
10月前
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
3451 2

热门文章

最新文章