SpringCloud详解02-分布式架构
创始人
2025-05-30 01:57:04
0

系列文章目录

SpringCloud详解01


文章目录

  • 系列文章目录
  • 前言
  • 一、入门案例
    • 1.创建maven父工程
    • 2.创建子工程 springcloudalibaba-micro-service-commons
    • 3.创建子工程 springcloudalibaba-micro-service-provider-7070
    • 4.创建子工程 springcloudalibaba-micro-service-consumer-8080
  • 二、测试
  • 总结


前言

接着上篇的详解01继续


一、入门案例

因为最新版的某些组件已经不再更新了,此次案例使用的版本是

  • Spring Boot Version: 2.3.2.RELEASE

  • Spring Cloud Version:Spring Cloud Hoxton.SR9

  • Spring Cloud Alibaba Version:2.2.6.RELEASE

接下来,创建分布式模拟案例,我会在一个父工程下创建三个子工程,充当三个服务

1.创建maven父工程

使用IDEA创建一个maven项目,命名为:springcloudalibaba-micro-service-manager,然后导入以下依赖:

pomorg.springframework.bootspring-boot-starter-parent2.3.2.RELEASE com.alibaba.cloudspring-cloud-alibaba-dependencies2.2.6.RELEASEpomimportorg.springframework.cloudspring-cloud-dependenciesSpring Cloud Hoxton.SR9

需要注意的是,要修改父工程的打包方式为pom,并且父工程不要留src文件目录,只留一个pom.xml文件即可,第二个依赖会爆红,不过无所谓,不影响代码运行
整体文件内容如下:

4.0.0com.lzlspringcloudalibaba-micro-service-manager1.0-SNAPSHOTspringcloudalibaba-micro-service-commonsspringcloudalibaba-micro-service-provider-7070springcloudalibaba-micro-service-consumer-8080pomorg.springframework.bootspring-boot-starter-parent2.3.2.RELEASE com.alibaba.cloudspring-cloud-alibaba-dependencies2.2.6.RELEASEpomimportorg.springframework.cloudspring-cloud-dependenciesSpring Cloud Hoxton.SR9

2.创建子工程 springcloudalibaba-micro-service-commons

在父工程下创建maven子工程springcloudalibaba-micro-service-commons,pom.xml文件如下:

springcloudalibaba-micro-service-managercom.lzl1.0-SNAPSHOT4.0.0springcloudalibaba-micro-service-commonsorg.projectlomboklombok1.18.24

这个子工程用来充当基本服务组件的提供,所以我们在该工程下创建实体类和工具类,并填入相关内容,此处我初始化一个UserDto实体类,并copy了一个返回值的工具类过来,内容如下:

UserDto:

package com.lzl.dto;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** --效率,是成功的核心关键--** @Author lzl* @Date 2023/3/15 15:00*/@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {private Integer id;private String name;}

JsonResult:

package com.lzl.utils;
import lombok.Data;
/*** --效率,是成功的核心关键--** @Author lzl* @Date 2023/3/15 15:01*/@Data
public class JsonResult {private Integer code;//状态码private String msg;//返回消息说明private T data;/*** 成功返回方法* @return*/public static JsonResult ok(){JsonResult jsonResult = new JsonResult<>();jsonResult.setCode(200);jsonResult.setMsg("success");return jsonResult;}/*** 失败返回方法* @return*/public static JsonResult error(){JsonResult jsonResult = new JsonResult<>();jsonResult.setCode(-1);jsonResult.setMsg("fail");return jsonResult;}}

目录如下:
在这里插入图片描述

3.创建子工程 springcloudalibaba-micro-service-provider-7070

在父工程下创建子工程springcloudalibaba-micro-service-provider-7070,pom.xml文件如下:

springcloudalibaba-micro-service-managercom.lzl1.0-SNAPSHOT4.0.0springcloudalibaba-micro-service-provider-7070org.springframework.bootspring-boot-starter-webcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoverycom.lzlspringcloudalibaba-micro-service-commons1.0-SNAPSHOT

配置yml文件:

spring:application:name: providercloud:nacos:discovery:register-enabled: trueserver-addr: 127.0.0.1:8848
server:port: 7070

作为服务提供方,需要提供功能方法的具体实现,这里我简化一下,不再编写service层,直接在controller层模拟数据库查询功能

package com.lzl.controller;import com.lzl.dto.UserDto;
import com.lzl.utils.JsonResult;
import org.springframework.web.bind.annotation.*;import java.util.Arrays;
import java.util.List;
/*** --效率,是成功的核心关键--** @Author lzl* @Date 2023/3/15 15:19*/@RestController
@RequestMapping("user-provider")
public class UserController {@RequestMapping("findAll")public JsonResult findAll(){//模拟数据库中的数据List userList = Arrays.asList(new UserDto(1001, "张三"),new UserDto(1002, "李四"),new UserDto(1003, "王五"));JsonResult jsonResult = JsonResult.ok();jsonResult.setData(userList);return jsonResult;}}

创建启动类,开启服务扫描

package com.lzl;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/*** --效率,是成功的核心关键--** @Author lzl* @Date 2023/3/15 15:20*/@SpringBootApplication
@EnableDiscoveryClient//发现服务
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class,args);}
}

目录结构如下:
在这里插入图片描述

4.创建子工程 springcloudalibaba-micro-service-consumer-8080

在父工程下创建子工程 springcloudalibaba-micro-service-consumer-8080作为服务消费,pom.xml文件如下:

springcloudalibaba-micro-service-managercom.lzl1.0-SNAPSHOT4.0.0springcloudalibaba-micro-service-consumer-8080org.springframework.bootspring-boot-starter-webcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoverycom.lzlspringcloudalibaba-micro-service-commons1.0-SNAPSHOTorg.springframework.cloudspring-cloud-starter-openfeign2.2.6.RELEASE

yml配置文件

spring:application:name: consumercloud:nacos:discovery:register-enabled: trueserver-addr: 127.0.0.1:8848
server:port: 8081

添加配置类WebConfig

package com.lzl.config;import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;/*** --效率,是成功的核心关键--** @Author lzl* @Date 2023/3/15 15:11*/
@Configuration
public class WebConfig {@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}}

controller

package com.lzl.controller;import com.lzl.utils.JsonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import java.util.List;
/*** --效率,是成功的核心关键--** @Author lzl* @Date 2023/3/15 15:12*/@RestController
@RequestMapping("user-consumer")
public class UserController {@Autowiredprivate RestTemplate restTemplate;//调用服务@Autowiredprivate DiscoveryClient discoveryClient;//获取服务参数//消费方应该调用生产方的服务@RequestMapping("findAll")public JsonResult findAll(){//获取服务提供方的ip,端口//通过名称去获取List provider = discoveryClient.getInstances("provider");//服务提供方对象ServiceInstance serviceInstance = provider.get(0);//拿ipString host = serviceInstance.getHost();//拿端口int port = serviceInstance.getPort();//访问地址String url = "http://" + host + ":" + port + "/user-provider/findAll";//调用服务JsonResult jsonResult = restTemplate.getForObject(url, JsonResult.class);return jsonResult;}}

设置启动类

package com.lzl;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;/*** --效率,是成功的核心关键--** @Author lzl* @Date 2023/3/15 15:16*/
@SpringBootApplication
@EnableDiscoveryClient//服务扫描注解
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class,args);}
}

整体的目录结构如下

在这里插入图片描述

ps:马赛克部分是其它的功能

二、测试

首先打开我们的nacos,出现运行成功界面,然后在浏览器访问http://localhost:8848/nacos/#/login,输入默认的帐号密码,进入,

在这里插入图片描述

然后在IDEA启动提供服务方springcloudalibaba-micro-service-provider-7070,接着启动服务消费方springcloudalibaba-micro-service-consumer-8080

启动成功后访问http://localhost:8081/user-consumer/findAll

在这里插入图片描述

成功


总结

本篇主要记录了nacos和分布式架构的模拟案例,接下来的内容会在下一篇更新

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...