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应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
5月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
4301 87
|
5月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
6567 92
|
6月前
|
XML Java Nacos
Spring Boot 整合Nacos 版本兼容适配 史上最详细文档
本文介绍SpringBoot整合Nacos的完整流程,涵盖Nacos下载安装、配置中心与服务发现集成、版本兼容性问题及实战配置。重点解决SpringBoot 3.3.0与Nacos版本适配难题,推荐使用Spring Cloud Alibaba方案,并提供项目开源地址供参考学习。
|
7月前
|
监控 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注册中心服务 构建商品
1162 3
|
6月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
5510 2
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
|
5月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
5月前
|
人工智能 监控 Java
Spring AI Alibaba实践|后台定时Agent
基于Spring AI Alibaba框架,可构建自主运行的AI Agent,突破传统Chat模式限制,支持定时任务、事件响应与人工协同,实现数据采集、分析到决策的自动化闭环,提升企业智能化效率。
Spring AI Alibaba实践|后台定时Agent
|
7月前
|
人工智能 Java 开发者
邀您参与 “直通乌镇” Spring AI Alibaba 开源竞技挑战赛!
邀您参与 “直通乌镇” Spring AI Alibaba 开源竞技挑战赛!
|
8月前
|
人工智能 数据可视化 Java
性能提升 10 倍, DIFY 模式迁移至 Spring AI Alibaba 模式 零改造实现
将 Dify 应用迁移至 Spring AI Alibaba,可兼顾可视化开发效率与代码工程灵活性,显著提升系统性能与扩展能力,适用于复杂 AI 业务场景。
1162 0

热门文章

最新文章