用Nacos搭建微服务操作
Nacos服务搭建
我们首先在Nacos的GitHub中下载相关的安装文件。https://github.com/alibaba/nacos/releases
但是因为服务器在国外,所以我们直接给大家提供了对应的安装文件。直接解压缩到非中文的目录下,然后启动即可
服务访问的地址是:http://localhost:8848/nacos
Nacos服务注册
引入相关的依赖文件:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
放开注册中心:@EnableDiscoveryClient
// 放开注册中心
@EnableDiscoveryClient
@SpringBootApplication
// 指定Mapper接口对应的路径
@MapperScan("com.msb.mall.product.dao")
public class MallProducetApplication {public static void main(String[] args) {SpringApplication.run(MallProducetApplication.class, args);}}
然后需要在配置问中配置注册中心的相关信息
然后重启服务,我们就可以在注册中心中发现对应的服务注册信息了
那么安装相同的步骤,完成其他几个微服务的注册
Nacos容器中安装
为了使用的方便,我们将Nacos安装到Docker容器中
首先我们需要拉取对应的镜像文件
docker pull nacos/nacos-server:1.4.2
通过镜像文件运行nacos容器
docker run -d --env MODE=standalone --name nacos -v /mydata/nacos/conf:/home/nacos/conf -p 8848:8848 nacos/nacos-server:1.4.2
安装中如果出现了如下的提示
那么就把windows中的安装文件中的conf目录的文件上传到虚拟机中,目前测试下来无论有没有报错都最好把windows的conf下内容上传一下,不然可能nacos不能访问
服务启动时间比较长,耐心等待一会
启动容器后,测试访问:
http://192.168.56.100:8848/nacos 默认的账号密码:nacos nacos
设置nacos服务自启动
docker update --restart=always nacos
然后将众多的微服务的注册中心地址修改为docker容器中的注册中心地址:
看到注册信息就表示操作成功了
OpenFegin服务调用
OpenFegin是一个声明式的服务调用组件。本质上是封装的Ribbon实现的。
商品服务定义接口
我们在商品服务中定义一个对外提供功能的接口
订单服务中调用
我们在订单服务中集成OpenFegin,完成对应的商品服务调用
引入相关的依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
然后创建对应的Fegin接口
/*** @FeignClient 指明我们要从注册中心中发现的服务的名称*/
@FeignClient(name = "mall-product")
public interface ProductService {/*** 需要访问的远程方法* @return*/@GetMapping("/product/brand/all")public R queryAllBrand();
}
还需要在启动类中开启远程调用
/*** basePackages 制定Fegin接口的路径*/
@EnableFeignClients(basePackages = "com.msb.mall.order.fegin")
@EnableDiscoveryClient
@SpringBootApplication
@MapperScan("com.msb.mall.order.dao")
public class MallOrderApplication {public static void main(String[] args) {SpringApplication.run(MallOrderApplication.class, args);}}
然后在Order的控制期中完成商品服务的调用
@AutowiredProductService productService;@GetMapping("/products")public R queryProduct(){// OpenFegin 远程调用服务return R.ok().put("products",productService.queryAllBrand());}
启动服务报错
然后就把相关的依赖添加上就可以了
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>
如果请求的时候,发现还报错
在nacos的依赖中需要过滤netflix-ribbon
<exclusions><exclusion><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></exclusion>
</exclusions>
通过@RefreshScope来动态的刷新配置数据,注解的位置写在Controller中
最后我们通过@Value(“#{}”) 来获取配置中心中的数据,配置中心的数据优先于application.yml中的属性信息
在对应的命名空间下创建对应的配置文件
默认使用的public命名空间,如果要使用特定的命名空间的话,我们需要在bootstrap.properties中显示的指定使用的命名空间
然后通过配置分组来区分不同的开发环境【开发环境dev,测试环境test,生产环境prod】
也就在具体的命名空间下我们创建的多个环境对应的配置文件
Nacos配置中心
配置中心的基本使用
首先添加对应的依赖,因为其他的微服务也需要向配置中心中获取配置信息,所以对应的依赖我们添加在了commons模块中
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.0.3</version></dependency>
创建bootsrap.properties文件,这个文件会优先于application.yml文件加载
spring.application.name=mall-order
spring.cloud.nacos.config.server-addr=192.168.56.100:8848
在nacos服务中创建对应的数据集,名称是应用名称.properties ,mall-order.properties
命名空间和配置分组
我们在Nacos配置中心中是通过命名空间和配置分组来管理我们众多的配置信息
首先我们通过命名空间来隔离服务,给每一个服务创建一个对应的命名空间
如果我们需要加载对应的配置组中的信息,那么同样的需要在bootstrap.properties中设置对应的配置组信息
配置拆分
我们现在是将某个服务中的所有的配置都写在了同一个配置文件中。为了方便管理,我们可以将配置信息拆分到配置中心中。
我们可以将配置文件中的数据源,mybatis的配置信息以及其他的信息拆分开来
然后在bootstrap.properties中的指定
```properties
spring.application.name=mall-order
spring.cloud.nacos.config.server-addr=192.168.56.100:8848
# 指定使用的命名空间
spring.cloud.nacos.config.namespace=638a5c2f-488f-4fa4-b7d3-1533d772e715
# 指定对应的配置组
spring.cloud.nacos.config.group=prod# 配置多个配置集
spring.cloud.nacos.config.ext-config[0].data-id=mybats.yml
spring.cloud.nacos.config.ext-config[0].group=prod
spring.cloud.nacos.config.ext-config[0].refresh=falsespring.cloud.nacos.config.ext-config[1].data-id=datasourc.yml
spring.cloud.nacos.config.ext-config[1].group=prod
spring.cloud.nacos.config.ext-config[1].refresh=falsespring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=prod
spring.cloud.nacos.config.ext-config[2].refresh=false
网关Gateway
网关基本介绍
在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测试、部署和管理。这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计,这就要求必须使用一种语言和平台无关的服务协议作为各个单元间的通讯方式。
本系统中我们选择的是Gateway作为我们的网关组件,Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。
网关有几个非常重要的概念:
- Route(路由):这是网关的基本构建块,它由一个ID,一个目标URI,一组断言和一组过滤器定义,如果断言为真,则路由匹配
- Predicate(断言):是Java8中提供的函数式接口,用来判断是否路由匹配的
- Filter(过滤器):对断言匹配的请求和响应进行修改处理
网关应用
创建网关API服务,修改SpringBoot和SpringCloud相关版本和其他的微服务保持一致。
然后添加对应的依赖
<dependency><groupId>com.msb.mall</groupId><artifactId>mall-commons</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>
因为网关服务路由的时候需要去注册中心中发现相关的服务所以需要完成Nacos注册中心的配置
# 注册中心的配置
spring.application.name=mall-gateway
spring.cloud.nacos.discovery.server-addr=192.168.56.100:8848# 指定注册中心的服务端口
server.port=8070
放开注解
同样的网关中的相关配置我们也需要添加到Nacos的配置中心中,所以也需要整合Nacos配置中心
然后我们测试路由规则是否可行
spring:application:name: mall-gatewaycloud:nacos:discovery:server-addr: 192.168.56.100:8848gateway:routes: - id: route1uri: http://www.baidu.compredicates:- Query=url,baidu- id: route2uri: http://www.jd.compredicates: - Query=url,jd
启动时候因为依赖的commons服务中有MyBatis的依赖,那么在网关API服务中也需要数据源的相关配置,那么没有就抛异常,这时我们可以在启动类的SpringBootApplication注解中排除DataSourceAutoConfiguration的自动注入。
然后根据对应的路由规则测试即可:
http://localhost:8070/?url=baidu
http://localhost:8070/?url=jd
相关文章:
用Nacos搭建微服务操作
Nacos服务搭建 我们首先在Nacos的GitHub中下载相关的安装文件。https://github.com/alibaba/nacos/releases 但是因为服务器在国外,所以我们直接给大家提供了对应的安装文件。直接解压缩到非中文的目录下,然后启动即可 服务访问的地址是:htt…...
ChatGPT模型采样算法详解
ChatGPT模型采样算法详解 ChatGPT所使用的模型——GPT(Generative Pre-trained Transformer)模型有几个参数,理解它们对文本生成任务至关重要。其中最重要的一组参数是temperature和top_p。二者控制两种不同的采样技术,用于因果…...
【Unity3d】Unity与iOS通信
在unity开发或者sdk开发经常需要用到unity与oc之间进行交互,这里把它们之间通信代码整理出来。 Unity调用Objective-C 主要分三个步骤: (一)、在xcode中定义要被unity调用的函数 新建一个类,名字可以任意,比如UnityBridge&…...
RDD的持久化【博学谷学习记录】
RDD的缓存缓存: 一般当一个RDD的计算非常的耗时|昂贵(计算规则比较复杂),或者说这个RDD需要被重复(多方)使用,此时可以将这个RDD计算完的结果缓存起来, 便于后续的使用, 从而提升效率通过缓存也可以提升RDD的容错能力, 当后续计算失败后, 尽量不让RDD进行回溯所有的依赖链条, 从…...
Python3 正则表达式
Python3 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。 compile 函数根…...
Qt-基础
Qt1. 概念其他概念对话框模态对话框与非模态对话框事件事件拦截/过滤事件例子鼠标/屏幕使用界面功能qt-designer工具debug目录结构mainwindow控件窗口QMainWindow事件2. 项目概览QOBJECT tree 对象树3. 信号和槽信号函数关联自定义信号和槽函数自定义信号和槽函数1自定义信号和…...
ABB机器人将实时坐标发送给西门子PLC的具体方法示例
ABB机器人将实时坐标发送给西门子PLC的具体方法示例 本次以PROFINET通信为例进行说明,演示ABB机器人将实时坐标发送给西门子PLC的具体方法。 首先,要保证ABB机器人和PLC的信号地址分配已经完成,具体的内容可参考以下链接: S7-1200PLC与ABB机器人进行PROFINET通信的具体方法…...
反向传播与梯度下降详解
一,前向传播与反向传播 1.1,神经网络训练过程 神经网络训练过程是: 先通过随机参数“猜“一个结果(模型前向传播过程),这里称为预测结果 a a a;然后计算 a a a 与样本标签值...
Skywalking ui页面功能介绍
菜单栏 仪表盘:查看被监控服务的运行状态; 拓扑图:以拓扑图的方式展现服务之间的关系,并以此为入口查看相关信息; 追踪:以接口列表的方式展现,追踪接口内部调用过程; 性能剖析&am…...
哪里可以找到免费的 PDF 阅读编辑器?7 个免费 PDF 阅读编辑器分享
如果您曾经需要编辑 PDF,您可能会发现很难找到免费的 PDF 编辑器。幸运的是,您可以使用在线资源来编辑该文档,而无需为软件付费。 在本文中,我将介绍七种不同的 PDF 编辑器,它们至少可以让您免费编辑几个文件。我通过…...
使用梯度下降的线性回归(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨💻4 Matlab代码 💥1 概述 梯度下降法,是一种基于搜索的最优化方法,最用是最小化一个损失函数。梯度下降是迭代法的一种,可以用于求…...
在Ubuntu上设置MySQL可以远程登录
在Ubuntu上设置MySQL可以远程登录一.设置数据库二.设置防火墙由于Ubuntu查看修改MySQL不是很方便,想着在虚拟机安装的Windows系统或者局域网中的其他电脑上去查看Ubuntu系统上的数据库,这样省事一些,我电脑安装的数据库是MySQL8。一.设置数据…...
清风1.层次分析法
一.流程1.建立评价体系2.建立判断矩阵2.1 A-C-C矩阵从准则层对目标层的特征向量上看,花费的权重最大算术平均法求权重的结果为:0.26230.47440.05450.09850.1103几何平均法求权重的结果为:0.26360.47730.05310.09880.1072特征值法求权重的结果…...
「首席架构师推荐」免费数据可视化软件你喜欢哪一个?
数据可视化,是关于数据视觉表现形式的科学技术研究。其中,这种数据的视觉表现形式被定义为,一种以某种概要形式抽提出来的信息,包括相应信息单位的各种属性和变量。它是一个处于不断演变之中的概念,其边界在不断地扩大…...
深度学习术语解释:backbone、head、neck,etc
backbone:翻译为主干网络的意思,既然说是主干网络,就代表其是网络的一部分,那么是哪部分呢?这个主干网络大多时候指的是提取特征的网络,其作用就是提取图片中的信息,共后面的网络使用。这些网络…...
基础篇—CSS margin(外边距)解析
什么是CSS margin(外边距)? CSS margin(外边距)属性定义元素周围的空间。 属性描述margin简写属性。在一个声明中设置所有外边距属性。margin-bottom设置元素的下外边距。margin-left设置元素的左外边距。margin-right设置元素的右外边距。margin-top设置元素的上外边距。mar…...
ChatGPT或将引发新一轮失业潮?是真的吗?
最近,要说有什么热度不减的话题,那ChatGPT必然榜上有名。据悉是这是由美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类…...
【Selenium学习】Selenium 中特殊元素操作
1.鼠标定位操作鼠标悬停,即当光标与其名称表示的元素重叠时触发的事件,在 Selenium 中将键盘鼠标操作封装在 Action Chains 类中。Action Chains 类的主要应用场景为单击鼠标、双击鼠标、鼠标拖曳等。部分常用的方法使用分类如下:• click(on…...
Spark相关的依赖冲突,后期持续更新总结
Spark相关的依赖冲突持续更新总结 Spark-Hive_2.11依赖报错 这个依赖是Spark开启支持hive SQL解析,其中2.11是Spark对应的Scala版本,如Spark2.4.7,对应的Scala版本是2.11.12;这个依赖会由于Spark内部调用的依赖guava的版本问题出…...
【每日一题Day122】LC1237找出给定方程的正整数解 | 双指针 二分查找
找出给定方程的正整数解【LC1237】 给你一个函数 f(x, y) 和一个目标结果 z,函数公式未知,请你计算方程 f(x,y) z 所有可能的正整数 数对 x 和 y。满足条件的结果数对可以按任意顺序返回。 尽管函数的具体式子未知,但它是单调递增函数&#…...
笔记本加装固态和内存条教程(超详细)
由于笔记本是几年前买的了,当时是4000,现在用起来感到卡顿,启动、运行速度特别慢,就决定换个固态硬盘,加个内存条,再给笔记本续命几年。先说一下加固态硬盘SSD的好处:1.启动快 2.读取延迟小 3.写…...
【Python】字典 - Dictionary
字典 - Dictionarykeys()values()items()get()获取文件中指定字符的个数进阶版:获取所有单词的频数进阶版:获取所有字符的频数函数内容keys()输出字典中的所有键values()输出字典中的所有值items()以元组的形式输出键值对get()获取字典中指定键的值 keys…...
LeetCode分类刷题----二叉树
二叉树1.二叉树的递归遍历144.二叉树的前序遍历145.二叉树的后序遍历94.二叉树的中序遍历2.二叉树的迭代遍历144.二叉树的前序遍历145.二叉树的后序遍历94.二叉树的中序遍历3.二叉树的层序遍历102.二叉树的层序遍历107.二叉树的层序遍历||199.二叉树的右视图637.二叉树的层平均…...
Zipkin : Golang 微服务全链路监控(三)
Zipkin : Golang 微服务全链路监控(三) Golang 微服务全链路监控实现 broker-service -> auth-service -> postgres dbzipkin 监控:需代码入侵 使用 zipkin 库的 serverMiddleware,其通过 Http 跟踪(trace&am…...
5.3 BGP路由黑洞
5.2.3实验3:BGP路由黑洞 1. 实验目的 熟悉BGP路由黑洞的应用场景掌握BGP水平分割的配置方法2. 实验拓扑 实验拓扑如图5-3所示: 图5-3:BGP路由黑洞 3. 实验步骤 配置IP地址 R1的配置 <Huawei>syst...
STM32 DFU模式烧录代码
什么是DFU? dfu的本质是isp,usb接口的isp,在系统编程,进入isp的方式我们先了解 如下图 boot0为高电平 boot1为低电平即可进入isp模式。 熟悉的场景 在我们使用flymcu软件下载代码时,本质也是isp 串口接口的isp。 傻瓜使用方式…...
松下PLC通过fpwin上传写入MRTC模块方法
目录 PLC程序上传方法 加密模块使用 PLC程序上传方法 手动将PLC模式设置为prog模式查看PLC是否设置为禁止上传查询指示灯是否变蓝,变蓝则需要将PLC禁止上传功能取消。 3.当上述动作操作完成后,将PLC程序导入到PLC中。为了配合加密程序使用,…...
就业大山之下的网络安全:安逸的安服仔
从去年开始,各个互联网大厂就接二连三的放出了裁员消息,整个互联网行业好像都处于寒冬状态。微博、小米、滴滴、知乎、拼多多等在内的一大批互联网知名企业,也相继传出“人员优化”的消息。 除了国内市场的萧条,国外市场也是不容…...
JavaWeb3-线程的3种创建方式7种写法
目录 1.方式一:继承Thread(2种写法) 写法①(常规): a.使用jconsole观察线程 b.启动线程——start方法 PS:(常见面试题)start 方法与 run 方法的区别: 写…...
驱动调试手段
文章目录 前言一、通过sysfs调试LCD查看电源:查看 pwm 信息查看管脚信息总结前言 本文记录在驱动中常用的调试手段 提示:以下是本篇文章正文内容,下面案例可供参考 一、通过sysfs 系统起来之后可以读取 sysfs 一些信息,来协助调试 示例: 调试LCD 输入如下命令 cat /…...
vps做网站/网络营销的优势
绍过了SOAP,让我们关注Web Service中另外一个重要的组成WSDL。 WSDL的主要文档元素 WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而…...
安徽地方政府网站建设情况/漳州seo建站
大数据是一项涉及不同业务和技术领域的技术和工具的集合,海量离线数据分析可以应用于多种商业系统环境,例如,电商海量日志分析、用户行为画像分析、科研行业的海量离线计算分析任务等场景。离线大数据分析概述主流的三大分布式计算框架系统分…...
视频网站设计论文/利用搜索引擎营销成功的案例
在Word文档中,对于有多条并列的信息内容或者段落时,我们常以添加项目标号的形式来使文档条理化,在阅读时,文档也更具美观性。另外,对于在逻辑上存在一定层级结构的内容时,也可以通过多级编号列表来标明文档…...
农场会员营销网站建设/百度站长seo
去中心化和幂律结合在一起,是一个很有意思的topic。 去中心化的动机在于大多数人不希望被第三方约束,只是因为他不信任第三方,然而一旦放开约束,便成就了他们所谓的去中心化,接下来的事情很有意思,他们会很…...
江桥网站建设/网站排名前十
虽然去年就自学过Java,也写过Android。但是最近又爆出很多问题,很多细节问题,很多基础问题。这让我再次意识到基础的重要性。问题一:子类何时调用父类的构造方法如果你之前问我,我肯定会说,super的时候。。…...
做一个网站一般需要多少钱/青岛网站排名提升
[转]POI大数据量Excel解决方案参考文章: (1)[转]POI大数据量Excel解决方案 (2)https://www.cnblogs.com/justbeginning/p/3833041.html 备忘一下。...