(面试官问我微服务与naocs的使用我回答了如下,面试官让我回去等通知)微服务拆分与nacos的配置使用

微服务架构

正常的小项目就是所有的功能集成在一个模块中,这样代码之间不仅非常耦合,而且修改处理的时候也非常的麻烦,应对高并发时也不好处理,所以 我们可以使用微服务架构,对项目进行模块之间的拆分,每一个微服务负责一部分的业务功能,处理也比较方便。

springcolud 集成了微服务的很多组件,可以达到我们对微服务的使用

微服务拆分原则

我们对项目拆分是有原则的,比如一个小项目,我们前期可以先写出来,然后后期慢慢拆分,但是如果是大项目刚开始就设计好了微服务,那么我们就可以在项目开始进行微服务的拆分

微服务拆分的时候各个模块需要 高内聚,低耦合  

拆分方法

拆分的时候 可以 使用完全解耦的拆分,就是每个微服务项目都是一个独立的工程,项目完全解耦,但是管理比较麻烦

还可以使用maven聚合的拆分,维护方便,但是服务之间耦合,编译比较耗时

maven聚合形式如何拆分  就是把不同功能模块的代码抽取到一个新模块中去 例如如下情况

服务之间调用

假如说 我们现在有一个购物车接口,访问路径是 /cart/search ,那么我们微服务之间进行调用,就可以 在调用方配置resttemplate 配置,然后进行远程调用

具体代码实现如下

package com.hmall.cart.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class RemoteCallConfig {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}

private void handleCartItems(List<CartVO> vos) {// TODO 1.获取商品idSet<Long> itemIds = vos.stream().map(CartVO::getItemId).collect(Collectors.toSet());// 2.查询商品// List<ItemDTO> items = itemService.queryItemByIds(itemIds);// 2.1.利用RestTemplate发起http请求,得到http的响应ResponseEntity<List<ItemDTO>> response = restTemplate.exchange("http://localhost:8081/items?ids={ids}",HttpMethod.GET,null,new ParameterizedTypeReference<List<ItemDTO>>() {},Map.of("ids", CollUtil.join(itemIds, ",")));// 2.2.解析响应if(!response.getStatusCode().is2xxSuccessful()){// 查询失败,直接结束return;}List<ItemDTO> items = response.getBody();if (CollUtils.isEmpty(items)) {return;}// 3.转为 id 到 item的mapMap<Long, ItemDTO> itemMap = items.stream().collect(Collectors.toMap(ItemDTO::getId, Function.identity()));// 4.写入vofor (CartVO v : vos) {ItemDTO item = itemMap.get(v.getItemId());if (item == null) {continue;}v.setNewPrice(item.getPrice());v.setStatus(item.getStatus());v.setStock(item.getStock());}
}

但是你每次这样调用 都要写一遍,这是不是显的太过冗余,太过麻烦,所以我们引用了接下来的组件 nacos

nacos

nacos是alibaba的一个组件,具体的下载配置流程就不再赘述,

下面我们进行一个场景的分析,现在有一个购物车服务 cartservice ,然后还有一个商品服务 itemservice,我们是查看购物车的时候需要访问商品服务,当我们的用户一多,并发量上来的时候商品服务这个 模块有可能就会承受不住崩溃,所以我们可以多开几个启动实例,进行负载均衡的配置,可是当我们访问的这几个不同的实例的时候,我们该怎么访问这些实例呢?

于是就有了nacos

nacos注册中心原理

当我们配置好nacos之后,我们的实例的端口号 就会发送给nacos注册中心 ,当我们服务的调用者进行调用的时候,具体的服务端口号就从nacos中进行拉取。但是当我们注册到几个实例到nacos中,假如有一些实例变更了,上传错误怎么办,nacos会有一个心跳检测,服务会定期像nacos中发送自己状态也就是心跳请求证明自己健康,当nacos长时间收不到服务提供者的心跳的时候,会认为该实例宕机,从实例列表中剔除,而服务列表变更,nacos主动通知服务调用着,更新本地服务列表

nacos使用

我们下载好nacos之后,在数据库配置好nacos的对应数据表,在nacos的custom.env文件中配置好自己ip地址,然后访问http://xxxxxx:8848/nacos/  这个xxx如果是虚拟机填虚拟机的ip如果是本机就填本机ip就可以。

然后就会有如下页面

然后我们在商品服务 itemservice中引入pom依赖

<!--nacos 服务注册发现-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

在商品服务的yml文件中配置

spring:application:name: item-service # 服务名称cloud:nacos:server-addr:xxxxx:8848 # nacos地址

xxxx为IP地址,

然后我们拷贝多个实例

点击复制,然后 

配置好不同的端口,启动实例,就可以在nacos中看到服务上传的实例

服务发现

而我们想调用上传的服务,也就是说购物车服务调用商品服务上传的实例

我们需要在购物车服务配置服务发现在购物车服务中yml文件中添加

spring:cloud:nacos:server-addr: xxx:8848

引入依赖

<!--nacos 服务注册发现-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

这个配置好,也就是说购物车服务也会被注册为nacos服务,既可以被调用,也可以被调用

我们在service注册该bean ,然后使用如下方法调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端传参数后端变量类型能够接受到List却无法接收到值

问题描述 今天写了个接口&#xff0c;下图所示 ReqVO里是这样的&#xff1a; 然后前端去请求&#xff0c;从请求结果中看发现这里值是在的&#xff08;有经验的可能就看出来了otherInfo.id: 这样以参数后端是接收不到的&#xff0c;但是当时没发现&#xff09; 传进来后端…

GAT1399协议分析(8)--批量图像查询

一、请求消息定义 视频图像包含视频片段、 图像、 文件、 人员、 人脸、 机动车、 非机动车、 物品、 场景和视频案事件、 视频图像标签等对象 在消息体中,可以包含其中一种类,加上Data字段即可。 ImageInfo对象 二、请求消息实例 wireshark 抓包实例 请求: 文本化: /V…

制造执行MES系统在光伏行业的应用

全球对可再生能源的需求不断增长&#xff0c;光伏能源作为一种清洁、可持续的能源形式&#xff0c;已经在广泛应用中受到了广泛关注。为满足工业领域的光伏能源需求&#xff0c;光伏制造执行系统(MES)作为一种集成化的技术解决方案&#xff0c;提供了更高效、更可靠的解决方案。…

WPS的JSA算国产编程语言,IDE,脚本工具吗?javascript代替VBA

现在wps用javascript代替VBA&#xff0c;应该算很成功了吧。 如果可以独立出来变成一个脚本语言&#xff0c;简单的IDE(本身也有类似VBA&#xff0c;不要寄宿在WPS里面运行&#xff0c;这样就可以变成VBS一样执行脚本了&#xff0c;用来开发按键精灵,LUA一样的脚本很不错 以下…

Activity->Activity中动态添加Fragment->Fragment回退栈BackStack

Fragment回退栈 Fragment回退栈用于管理Fragment的导航历史(添加、删除、替换)。每个Activity都有一个包含其所有Fragment的FragmentManager&#xff0c;调用其addToBackStack方法时&#xff0c;这个事务就会被添加到FragmentManager的回退栈中当用户按下返回键时&#xff0c;…

MySQL报ERROR 2002 (HY000)解决

今天在连接客户服务器时MySQL的时候报: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql/mysql.sock’ (2) [rootXXX ~]# mysql -uroot -p Enter password: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket…

rman恢复后,少部分数据文件状态为MISSING000**

客户有套一体机&#xff0c;每天晚上21点开始做rman完全备份&#xff0c;大约第2天上午9点多完成备份&#xff0c;rman备份保留策略保留一份完全备份 6月1日晚21点自动发起备份&#xff0c;6月2日上午10点15分完成备份&#xff0c;并生成了一个控制文件备份 c-4063271871-2024…

前端图片在切换暗黑模式时太亮该怎么办?

通过css中的filter属性来实现&#xff0c;进行图片的色系反转、亮度、对比度调整等 1、invert 反转输入图像&#xff0c;值为 100% 则图像完全反转&#xff0c;值为 0% 则图像无变化 filter: invert(1); 2、blur 给元素应用高斯模糊效果。 filter: blur(5px); 3、brightnes…

如何解决网络问题?

组织和 IT 管理员尽其所能完善他们的网络&#xff0c;但是&#xff0c;不同程度的网络问题仍然可能出现&#xff0c;这些网络问题需要立即响应和解决&#xff0c;如果这些问题在不合理的时间内得不到解决&#xff0c;网络和组织的损害可能会付出高昂的代价。这就是为什么 IT 管…

【漏洞复现】锐捷校园网自助服务系统 login_judge.jsf 任意文件读取漏洞(XVE-2024-2116)

0x01 产品简介 锐捷校园网自助服务系统是锐捷网络推出的一款面向学校和校园网络管理的解决方案。该系统旨在提供便捷的网络自助服务&#xff0c;使学生、教职员工和网络管理员能够更好地管理和利用校园网络资源。 0x02 漏洞概述 校园网自助服务系统/selfservice/selfservice…

《大道平渊》· 玖 —— 把高深的道理讲的通俗,这是一门艺术。

《平渊》 玖 "化繁为简, 点石成金。" 把高深的道理讲得通俗&#xff0c;这是一门艺术&#xff01; 讲述者能够站在群众的角度&#xff0c;用尽可能简单通俗的语言来解释复杂的概念。 讲述者需要对概念有深刻的理解&#xff0c;还要有灵活的表达能力。 群众愿意接受…

从当当网批量获取图书信息

爬取当当网图书数据并保存到本地&#xff0c;使用request、lxml的etree模块、pandas保存数据为excel到本地。 爬取网页的url为&#xff1a; http://search.dangdang.com/?key{}&actinput&page_index{} 其中key为搜索关键字&#xff0c;page_index为页码。 爬取的数据…

15- Redis 中的 整数集合 数据结构

整数集合是 Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素&#xff0c;并且元素数量不大时&#xff0c;就会使用整数集合这个数据结构作为底层实现。 1. 整数集合结构设计 整数集合本质上是一块连续内存空间&#xff0c;它的结构定义如下&#xff1a; typedef s…

集成学习笔记

集成学习 简介 决策树 GBDT 拟合残差 一般 GBDT XGBOOST 弓 1 能表达样本落入的子节点&#xff0c;但是不能把表示结构 2 3.正则项 – 惩罚 防止过拟合&#xff0c;比如一个值总共有10颗树都是由同一颗树决定的&#xff0c;过拟合 5 找到一种方式不依赖于损失函数 …

python的优势有哪些?

python的优点很多&#xff0c;下面简单地列举一些&#xff1a; 简单 Python的语法非常优雅&#xff0c;甚至没有像其他语言的大括号&#xff0c;分号等特殊符号&#xff0c;代表了一种极简主义的设计思想。阅读Python程序像是在读英语。 易学 Python入手非常快&#xff0c;学习…

Linux——内存管理代码分析

虚空间管理 页框和页的关系 页框 将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个页框&#xff0c;也叫页帧&#xff0c;即物理页面&#xff0c;是linux划分内存空间的结果。 每个页框都有一个页框号&#xff0c;即内存块号、物理块号。 页 将用户…

完整指南:远程管理 Linux 服务器的 Xshell6 和 Xftp6 使用方法(Xshell无法启动:要继续使用此程序........,的解决方法)

&#x1f600;前言 在当今软件开发领域&#xff0c;远程管理 Linux 服务器已成为日常工作的重要组成部分。随着团队成员分布在不同的地理位置&#xff0c;远程登录工具的使用变得至关重要&#xff0c;它们为开发人员提供了访问和管理服务器的便捷方式。本文将介绍两款功能强大的…

Linux高级进阶-ssh配置

Ubuntu-system 允许使用root远程登陆 apt install ssh -y在/etc/ssh/sshd_config 文件修改PermitRootLogin yes systemctl restart ssh远程连接软件用户名为root

Ubuntu系统中Apache Web服务器的配置与实战

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Educational Codeforces Round 166(Div.2) A~D

A.Verify Password&#xff08;字符串&#xff09; 题意&#xff1a; Monocarp正在开发他的新网站&#xff0c;目前面临的挑战是如何让用户选择强密码。 Monocarp认为&#xff0c;强密码应满足以下条件&#xff1a; 密码只能由小写拉丁字母和数字组成&#xff1b;字母后面不…