微服务使用步骤
Maven的依赖冲突解决方案:
- 路径最短原则
- 配置优先原则
- 破坏规则则使用排除
SpringBoot场景启动器starter的开发流程
c3p0-spring-boot-starter自定义场景启动器test-c3p0调用自定义场景启动器
- SpringBoot自动装配
- SpringBoot应用启动原理
- nacos服务治理
安装
启动bin/startup -m standalone
webUI地址为localhost:8848/nacos,其中用 户nacos/nacos
关闭bin/shutdown
微服务
将应用划分为若干个体量更小的服务,每个服务可以独立开发、独立部署、独立运行,服务之间可以通过轻量级通信机制进行相互调用
用户管理系统
用户微服务
create database test1;
use test1;create table tbl_users(id bigint primary key auto_increment,name varchar(32) not null,role_id bigint
)
角色微服务
create database test2;
use test2;create table tbl_role(id bigint primary key auto_increment,name varchar(32) not null
)
针对不同的服务当作一个独立的应用进行开发
下面来写Controller里的具体实现
@RestController // 轻量级通信机制 http+json
public class UserController{@Autowired private RestTemplate restTemplate; //可以当作浏览器对待@Autowired private IUserServ userService;@RequestMapping("/get")public String getUser(){//当前应用内部业务User user=userService.load(1); //从当前应用中加载对应的1号用户信息Role role=restTemplate.getForObject("role服务的地址",Role.class);....}
}
role服务的地址的问题:
方法1:使用绝对路径,例如http://localhost:7081/roles/1。问题是role服务的地址可能会出现调整,或者role服务由于频繁访问需要多节点部署
针对方法1的缺陷引入中间件nacos作为注册中心。当所有的服务提供者,例如role服务,启动时都会自动向nacos注册自己的信息,例如服务的名称,自己的地址和自己对外提供服务的端口号等当服务消费者需要调用服务时,可以向nacos查询对应服务名称的提供者地址列表,例如通过role-service服务名获取到所有的role服务的地址列表
Nacos应用步骤
服务提供者
1、添加依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2、添加配置
spring.application.name=role-service 定义的服务名称,服务消费者是通过服务名称查找地址
spring.cloud.nacos.discovery.server-addr=localhost:8848 Nacos的地址
3、在配置类上添加注解以启动Nacos客户端
@EnableDiscoveryClient 也可以直接定义在主类
@SpringBootConfiguration
public class NacosConfig {
}
Nacos
1、安装
2、 启动nacos命令startup -m standalone
3、启动服务提供者
4、在nacos的webUI可以查看localhost:8848/nacos
服务消费者
1、依赖
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery2、配置
spring.application.name=user-service 定义的服务名称,服务消费者是通过服务名称查找地址
spring.cloud.nacos.discovery.server-addr=localhost:8848 Nacos的地址
3、通过注解启动nacos client
@EnableDiscoveryClient
4、可以通过nacos client查询注册在nacos中的所有对应的服务提供者
@RestController
public class TestController {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate DiscoveryClient discoveryClient;@GetMapping("/test")public String test(String name){
// String url="http://localhost:8070/hello?name=zhangsan"//从nacos根据服务名称获取对应的服务提供方的地址端口号等信息List<ServiceInstance> serviceInstances = discoveryClient.getInstances("hello-service");//从nacos种获取服务列表后需要根据某种策略获取某一个具体的服务实例---负载均衡Random r=new Random();ServiceInstance instance = serviceInstances.get(r.nextInt(serviceInstances.size()));System.out.println("远程服务的主机地址:"+instance.getHost());System.out.println("远程服务的端口号:"+instance.getPort());//拼接访问的URL地址String url=instance.getUri()+"/say?name="+name;System.out.println("远程服务地址:"+url);String res = restTemplate.getForObject(url, String.class);return "Consumer:["+res+"]";}
}
相关文章:
微服务使用步骤
Maven的依赖冲突解决方案: 路径最短原则配置优先原则破坏规则则使用排除 SpringBoot场景启动器starter的开发流程 c3p0-spring-boot-starter自定义场景启动器test-c3p0调用自定义场景启动器SpringBoot自动装配SpringBoot应用启动原理nacos服务治理 安装 启动bin/s…...
Ubuntu 23.04 作为系统盘的体验和使用感受
1.为啥主系统装了Ubuntu 由于公司发电脑了,我自己也有一台台式电脑,然后也想去折腾一下Ubuntu,就把自己的笔记本装成Ubuntu系统了, 我使用的是23.04的桌面版,带图形化界面的。我准备换回Windows 11了(因为…...
百分点科技跻身中国智慧应急人工智能解决方案市场前三
近日, 全球领先的IT市场研究和咨询公司IDC发布了《中国智慧应急解决方案市场份额,2022》报告,数据显示,2022年中国智慧应急整体市场为104亿元人民币。其中,智慧应急人工智能解决方案子市场备受关注,百分点科…...
vscode如何退出/切换 github 账号
退出/切换 github 账号 左下角点击头像按钮,选择注销,然后再重新登录...
maven发布到中央仓库
创建账号 https://issues.sonatype.org 【第二步】登录申请新项目 右上角点击Create,Project选择第一项,有的时候带不出来第二个New Project,可以再选一次Project的选项。...
C#IEnumberable<>
在C#中,IEnumerable<>是一个泛型接口,用于表示一个可枚举的集合。它定义了一个用于遍历集合元素的枚举器(enumerator)。通过实现IEnumerable<>接口,我们可以使用foreach语句或LINQ查询等方式来迭代访问集合…...
Flink非对齐checkpoint原理(Flink Unaligned Checkpoint)
Flink非对齐checkpoint原理(Flink Unaligned Checkpoint) 为什么提出Unaligned Checkpoint(UC)? 因为反压严重时会导致Checkpoint失败,可能导致如下问题 恢复时间长-服务效率低非幂等和非事务会导致数据…...
Linux crontab命令:循环执行定时任务(详解)
crontab 命令的基本格式如下: [rootlocalhost ~]# crontab [选项] [file] file 指的是命令文件的名字,表示将 file 作为 crontab 的任务列表文件并载入 crontab,若在命令行中未指定文件名,则此命令将接受标准输入(键盘…...
Linux系统jenkins+newman+postman持续集成环境搭建
1、首先安装nodejs 下载nodejs压缩包,下载地址:nodejs官网下载 建议不用下载最新的,我这里用的是推荐的v12.18版本 下载和解压命令 wget https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-x64.tar.xz解压安装包(记得没有z&…...
flutter:Future、Stream、RxDart
Future 在Flutter中,Future是Dart语言中的一个类,用于表示异步操作的结果。与Future相关的的重要关键字包括async和await。 async:这个关键字用于在方法或函数声明前添加,以指示该方法为异步方法。在异步方法中,执行…...
Jenkins安装、配置、自动化构建前(nodejs)后端(maven)项目
文章目录 0、Jenkins卸载安装1、Jenkins配置2、后台启动脚本startup.sh3、后台关闭脚本stop.sh4、实时数据启动脚本startup.sh5、实时数据关闭脚本stop.sh6、jenkins制定完任务后,点击立即构建,控制台报错(...无法生成父级目录)7、…...
【网络基础进阶之路】设计网络划分的实战详解
PS:本要求基于华为的eNSP模拟软件进行 具体要求: 完成步骤: 1、对192.168.1.0/24进行子网划分 2、对每一个路由器进行IP的配置 3、开始静态路由的书写,在写之前,我们可以先对每一个路由器写一条通向右边的缺省路由&…...
艺术二维码 API 申请及使用
艺术二维码是一种创新的技术产品,它将二维码与美观的背景图像相结合,创造出既实用又美观的作品。它们不仅具有传统二维码的功能性,能被智能设备快速扫描识别,还加入了艺术元素,增强了视觉吸引力和品牌识别度。其中&…...
JVM GC ROOT分析
GC root原理:通过对枚举GCroot对象做引用可达性分析,即从GC root对象开始,向下搜索,形成的路径称之为 引用链。如果一个对象到GC roots对象没有任何引用,没有形成引用链,那么该对象等待GC回收,换而言之,如果减少内存泄漏,也就是切断引用链,常见的GCRoot对象如下: 1、…...
记一道有趣的sql题
有一张运单表:dwd_biz_waybill_td,该表的主键是way_bill_id,并且有如下字段: way_bill_id(运单表主键),shiping_date(下单日期,时间格式为yyyy-MM-dd)&#…...
C高级【day2】
思维导图: 递归实现,输入一个数,输出这个数的每一位: #include<myhead.h>//递归函数 void fun(int num){//num没值不再递归if(0 num){return;}//输出数的最后一位printf("%d\t", num%10);//递归fun(num/10);}…...
认识Webpack插件Plugin;CleanWebpackPlugin插件;HtmlWebpackPlugin;DefinePlugin;Mode模式
目录 1_认识插件Plugin2_CleanWebpackPlugin3_HtmlWebpackPlugin4_DefinePlugin4.1_介绍4.2_DefinePlugin的使用 5_Mode模式 1_认识插件Plugin Webpack的另一个核心是Plugin,官方有这样一段对Plugin的描述: While loaders are used to transform certai…...
Redis 6.0的新特性:多线程、客户端缓存与安全
2020年5月份,6.0版本。 面向网络处理的多IO线程可以提高网络请求处理的速度,而客户端缓存可以让应用直接在客户端本地读取数据,这两个特性可以提升Redis的性能。 细粒度权限控制让Redis可以按照命令粒度控制不同用户的访问权限,…...
【雕爷学编程】MicroPython动手做(37)——驱动LCD与图文显示3
MixPY——让爱(AI)触手可及 MixPY布局 主控芯片:K210(64位双核带硬件FPU和卷积加速器的 RISC-V CPU) 显示屏:LCD_2.8寸 320*240分辨率,支持电阻触摸 摄像头:OV2640,200W像素 扬声器&#…...
自然语言处理从入门到应用——LangChain:提示(Prompts)-[提示模板:序列化提示信息]
分类目录:《自然语言处理从入门到应用》总目录 将提示信息存储为文件而不是Python代码通常更好。这样可以方便共享、存储和版本控制提示信息。本文介绍了如何在LangChain中进行提示信息的序列化,包括不同类型的提示信息和不同的序列化选项。 在高层次上…...
html标签怎么关联标签与控件_label for用法详解【方法】
label 的 for 属性必须严格匹配控件的 id(而非 name),大小写敏感且不可含空格;若未设 for 或未包裹控件,则 label 丧失交互与可访问性功能。label for 属性必须匹配控件的 id,不是 name很多人以为 for 属性…...
AI工具爱毕业(aibiye)帮助用户高效复现数学建模论文,并优化排版效果
还在为论文写作头痛?特别是数学建模的优秀论文复现与排版,时间紧、任务重,AI工具能帮上大忙吗?今天,我们评测10款热门AI论文写作工具,帮你精准筛选最适合的助手。 aibiye:专注于语法润色与结构…...
Linux系统下BricsCAD:从零部署到高效运行的完整指南
1. Linux系统下为什么选择BricsCAD 对于长期使用Linux系统的工程师和设计师来说,处理DWG格式的CAD图纸一直是个头疼的问题。虽然市面上有不少CAD软件,但真正能在Linux环境下稳定运行且完美兼容DWG格式的却寥寥无几。这就是为什么BricsCAD会成为很多专业人…...
如何快速掌握炉石传说自动化工具:面向新手的完整使用指南
如何快速掌握炉石传说自动化工具:面向新手的完整使用指南 【免费下载链接】Hearthstone-Script Hearthstone script(炉石传说脚本) 项目地址: https://gitcode.com/gh_mirrors/he/Hearthstone-Script 想要轻松完成炉石传说日常任务&am…...
番茄小说下载器完全指南:从零开始打造个人离线图书馆
番茄小说下载器完全指南:从零开始打造个人离线图书馆 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 你是否曾经想在通勤路上、旅行途中或网络不佳时阅读番茄小说&…...
RANSAC平面拟合避坑指南:为什么你的点云总拟合出奇怪平面?参数调优实战
RANSAC平面拟合避坑指南:为什么你的点云总拟合出奇怪平面?参数调优实战 当你在处理三维点云数据时,是否遇到过这样的情况:明明场景中有一个明显的平面,但RANSAC算法却拟合出了一个完全错误的平面?或者拟合出…...
TI F28P65 使用 ePWM 模块模拟 SPI 时钟的详细方法
引言 在嵌入式开发中,当芯片自带的硬件SPI接口数量不足,或者需要适配非标准时钟极性与相位的SPI从设备时,利用TI C2000系列芯片(如F28P65x)强大的ePWM(增强型脉宽调制)模块来模拟SPI时钟是一种…...
保姆级教程:在Ubuntu 16.04上从零搭建复旦微FMQL芯片的Linux开发环境(含IAR/Procise/Petalinux)
复旦微FMQL芯片Linux开发环境搭建全指南:从零构建到实战部署 引言:为什么选择FMQL芯片进行嵌入式开发? 在当今嵌入式系统开发领域,国产芯片正逐渐崭露头角,复旦微电子推出的FMQL系列芯片凭借其高性能、低功耗和丰富的外…...
SARScape实战:高效DEM数据获取与预处理全攻略
1. 为什么需要手动获取DEM数据? 很多刚接触SARScape的朋友可能会疑惑:软件明明自带DEM下载功能,为什么还要费劲手动下载?这个问题我刚开始也纠结过,直到在实际项目中踩过几次坑才明白其中缘由。 SARScape内置的DEM下载…...
5大特性解析:Fast-GitHub浏览器扩展如何实现GitHub访问速度飞跃
5大特性解析:Fast-GitHub浏览器扩展如何实现GitHub访问速度飞跃 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 国内开…...
