Eureka、LoadBalance和Nacos

Eureka、LoadBalance和Nacos

  • 一.Eureka引入
    • 1.注册中心
    • 2.CAP理论
    • 3.常见的注册中心
  • 二.Eureka介绍
    • 1.搭建Eureka Server 注册中心
    • 2.搭建服务注册
    • 3.服务发现
  • 三.负载均衡LoadBalance
    • 1.问题引入
    • 2.服务端负载均衡
    • 3.客户端负载均衡
    • 4.Spring Cloud LoadBalancer
      • 1).快速上手
      • 2)负载均衡策略
      • 3)自定义负载均衡策略
      • 4)LoadBalancer 原理
      • 5)服务部署
  • 四.Nacos
    • 1.安装
      • 1)window环境
      • 2)Linux环境
    • 2.快速上手
  • 五.Nacos负载均衡
    • 1.服务器下线
      • 修改权重报错
    • 2.同集群优先访问
      • 配置集群的名称
    • 3.健康检查
      • nacos服务器实例
    • 4.环境隔离
      • 创建环境
  • 六.Nacos的配置中心
    • 1.配置中心的需求
    • 2.快速上手
    • 3.配置中心详解
      • data id说明
    • 4.部署nacos
  • 七.Nacos与Eureka的区别
    • 1.共同点
    • 2.区别

一.Eureka引入

在环境搭建中,远程调用使用的url是写死的,当更换机器,或者新增机器时,这个URL就需要跟着变更,就需要去通知所有的相关服务去修改。随之而来的就是各个项目的配置文件反复更新,各个项目的频繁部署。

此时就引入了注册中心和服务发现,服务启动/变更时,向注册中心报道。注册中心记录应用和IP的关系。调用方调用时,先去注册中心获取服务方的IP,再去服务方进行调用。

1.注册中心

在最初的架构体系中,集群的概念还不那么流行,且机器数量也比较少,此时直接使用DNS+Nginx就可以满足几乎所有服务的发现。相关的注册信息直接配置在Nginx。

但是随着微服务的流行与流量的激增,机器规模逐渐变大,并且机器会有频繁的上下线行为,这种时候需要运维⼿动地去维护这个配置信息是⼀个很麻烦的操作。

所以开发者们开始希望有这么⼀个东西,它能维护⼀个服务列表,哪个机器上线了,哪个机器宕机了,这些信息都会自动更新到服务列表上,客户端拿到这个列表,直接进行服务调用即可。这个就是注册中心。

注册中心主要有三种角色:

  • 服务提供者(Server):一次业务中,被其它微服务调用的服务。也就是提供接口给其它微服务.
  • 服务消费者(Client):一次业务中,调用其它微服务的服务。也就是调⽤其它微服务提供的接口.
  • 服务注册中心(Registry):用于保存Server 的注册信息,当Server 节点发生变更时,Registry 会同步变更。服务与注册中心使用⼀定机制通信,如果注册中心与某服务长时间无法通信,就会注销该实例。

他们之间的关系以及工作内容,可以通过两个概念来描述:

服务注册:服务提供者在启动时,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状
态。
服务发现: 服务消费者从注册中心查询服务提供者的地址,并通过该地址调⽤服务提供者的接口。服务发现的⼀个重要作用就是提供给服务消费者⼀个可用的服务列表。
在这里插入图片描述

2.CAP理论

CAP理论是分布式系统设计中的核心原则,由计算机科学家Eric Brewer于2000年提出,用于描述分布式数据存储系统在面临网络分区时需做出的权衡。其核心观点为:在一致性(Consistency)、可用性(Availability)、分区容忍性(Partition Tolerance)三者中,最多只能同时满足两项。

  • 一致性(Consistency) :CAP理论中的一致性,指的是强一致性。所有节点在同一时间具有相同的数据
  • 可用性(Availability):保证每个请求都有响应(响应结果可能不对)
  • 分区容错性(Partition Tolerance):当出现网络分区后,系统仍然能够对外提供服务

举一个栗子:一个部门全国各地都有岗位,这时候,总部下发了⼀个通知,由于通知需要开会周知全员,当有客户咨询时:

  1. 所有成员对客户的回应结果都是一致的(一致性)
  2. 客户咨询时,⼀定有回应(可用性)
  3. 当其中⼀个成员休假时,这个部门的其他成员也可以对客户提供咨询服务(分区容错性)

CAP 理论告诉我们:
一个分布式系统不可能同时满足数据⼀致性。服务可用性和分区容错性这三个基本需求,最多只能同时满足其中的两个.

CP架构:为了保证分布式系统对外的数据⼀致性,于是选择不返回任何数据
AP架构:为了保证分布式系统的可用性,节点2返回V0版本的数据(即使这个数据不正确)
更多参考

在这里插入图片描述

在分布式系统中,系统间的网络不能100%保证健康,服务⼜必须对外保证服务。因此Partition Tolerance不可避免。那就只能在C和A中选择⼀个。也就是CP或者AP架构。

正常情况下:在这里插入图片描述

网络异常:

在这里插入图片描述

3.常见的注册中心

  1. Zookeeper
    Zookeeper的官方并没有说它是一个注册中心,但是国内Java体系,大部分的集群环境都是依赖
    Zookeeper来完成注册中心的功能。
  2. Eureka
    Eureka是Netflix开发的基于REST的服务发现框架,主要用于服务注册,管理,负载均衡和服务故障
    转移。
    官方声明在Eureka2.0版本停止维护,不建议使用。但是Eureka是SpringCloud服务注册/发现的默认
    实现,所以目前还是有很多公司在使用。
  3. Nacos
    Nacos是Spring Cloud Alibaba架构中重要的组件,除了服务注册,服务发现功能之外,Nacos还支持
    配置管理,流量管理,DNS,动态DNS等多种特性。

在这里插入图片描述

Eureka 和Zookeeper区别
Eureka和Zookeeper都是用于服务注册和发现的工具,区别如下:

  1. Eureka是Netflix开源的项目,而Zookeeper是Apache开源的项目。
  2. Eureka 基于AP原则,保证高可用,Zookeeper基于CP原则,保证数据⼀致性。
  3. Eureka 每个节点 都是均等的,Zookeeper的节点区分Leader 和Followe 或 Observer,也正因为这
    个原因,如果Zookeeper的Leader发生故障时,需要重新选举,选举过程集群会有短暂时间的不可用

二.Eureka介绍

Eureka是Netflix OSS套件中关于服务注册和发现的解决方案。Spring Cloud对Eureka进行了集成,并
作为优先推荐方案进行宣传,虽然目前Eureka 2.0已经停止维护,新的微服务架构设计中,也不再建议使用,但是目前依然有大量公司的微服务系统使用Eureka作为注册中心。官方文档

Eureka主要分为两个部分:

  • Eureka Server:作为注册中心Server端向微服务应用程序提供服务注册,发现,健康检查等能力.
  • Eureka Client:服务提供者,服务启动时,会向Eureka Server 注册自己的信息(IP,端口,服务信息等),Eureka Server 会存储这些信息

1.搭建Eureka Server 注册中心

环境搭建和之前类似,就继续使用上次的文件进行搭建Eureka Server:
在这里插入图片描述
*在这里插入图片描述手动添加依赖:在这里插入图片描述
添加配置文件:

server:port: 10010
spring:application:name: eureka-server
eureka:instance:hostname: localhostclient:fetch-registry: false # 表⽰是否从Eureka Server获取注册信息,默认为true.因为这是  ⼀个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这⾥设置为falseregister-with-eureka: false # 表⽰是否将⾃⼰注册到Eureka Server,默认为true.由于当前应⽤就是Eureka Server,故⽽设置为false.service-url:# 设置与Eureka Server的地址,查询服务和注册服务都需要依赖这个地址.defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

写启动类:
在这里插入图片描述

查看Erueka
在这里插入图片描述

2.搭建服务注册

  1. 加入依赖:在这里插入图片描述

  2. 修改配置文件:
    在这里插入图片描述

  3. 成功后:在这里插入图片描述

3.服务发现

服务发现和服务注册是一样配置的,只讲述不同的地方:在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三.负载均衡LoadBalance

1.问题引入

  1. 点开services:
    在这里插入图片描述

  2. 添加SpringBoot:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 重命名和设置Modify options:
    在这里插入图片描述
    在这里插入图片描述

  4. 设置VM:
    在这里插入图片描述
    在这里插入图片描述

  5. 再复制一个9092后将两个都启动:
    在这里插入图片描述
    在这里插入图片描述

发请了多次请求后,只有9090product被使用,其他两个并没有参与使用:在这里插入图片描述

此时为了解决这个问题,将代码重新组织后,就会只有一个product被使用了,这就是负责均衡的作用:在这里插入图片描述
在这里插入图片描述

负载均衡:
负载均衡(Load Balance,简称 LB), 是高并发,高可用系统必不可少的关键组件。当服务流量增大时,通常会采用增加机器的方式进行扩容,负载均衡就是用来在多个机器或者其他资源中,按照⼀定的规则合理分配负载。

上面的例子中,我们只是简单的对实例进行了轮询,但真实的业务场景会更加复杂。比如根据机器的配置进行负载分配,配置高的分配的流量高,配置低的分配流量低等。

服务多机部署时,开发⼈员都需要考虑负载均衡的实现,所以也出现了一些负载均衡器,来帮助我们实现负载均衡。

2.服务端负载均衡

在服务端进行负载均衡的算法分配。比较有名的服务端负载均衡器是Nginx。请求先到达Nginx负载均衡器,然后通过负载均衡算法,在多个服务器之间选择⼀个进行访问。

在这里插入图片描述

3.客户端负载均衡

在客户端进行负载均衡的算法分配。把负载均衡的功能以库的方式集成到客户端,而不再是由一台指定的负载均衡设备集中提供。

比如Spring Cloud的Ribbon,请求发送到客户端,客户端从注册中心(比如Eureka)获取服务列表,在发
送请求前通过负载均衡算法选择⼀个服务器,然后进行访问。

Ribbon是Spring Cloud早期的默认实现,由于不维护了,所以最新版本的Spring Cloud负载均衡集成的
是Spring Cloud LoadBalancer(Spring Cloud官方维护)

在这里插入图片描述

4.Spring Cloud LoadBalancer

1).快速上手

  1. 添加注解:
    在这里插入图片描述
  2. 修改远程调用代码:在这里插入图片描述

2)负载均衡策略

负载均衡策略是⼀种思想,无论是哪种负载均衡器,它们的负载均衡策略都是相似的。Spring Cloud
LoadBalancer 仅支持两种负载均衡策略:轮询策略 和 随机策略

  1. 轮询(Round Robin):轮询策略是指服务器轮流处理用户的请求。这是⼀种实现最简单,也最常⽤的
    策略。
  2. 随机选择(Random):随机选择策略是指随机选择⼀个后端服务器来处理新的请求。

3)自定义负载均衡策略

Spring Cloud LoadBalancer 默认负载均衡策略是 轮询策略,实现是 RoundRobinLoadBalancer,如果
服务的消费者如果想采用随机的负载均衡策略,也非常简单。(参考官网地址)
在这里插入图片描述

在这里插入图片描述

4)LoadBalancer 原理

LoadBalancer 的实现,主要是 LoadBalancerInterceptor,这个类会对 RestTemplate 的请求进行拦截,然后从Eureka根据服务id获取服务列表,随后利用负载均衡算法得到真实的服务地址信息,替换服务id。

通过intercept方法进行拦截:
在这里插入图片描述
进入execute方法:在这里插入图片描述
进入choose:
在这里插入图片描述
继续进入choose:
在这里插入图片描述
随机实现:在这里插入图片描述
getInstanceResponse方法:
在这里插入图片描述

随机下标:
在这里插入图片描述

轮询:
在这里插入图片描述

5)服务部署

  1. 部署MySQL
  2. 数据初始化
  3. 修改配置文件(dev和prod环境)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 打包(每一个都要打包Erueka、order、product)
    在这里插入图片描述
    在这里插入图片描述
  2. 上传jar包,三个都要上传,第一次上传需要安装Lrzsz,命令:apt install lrzsz
  3. 启动实例:在这里插入图片描述
    在这里插入图片描述
  4. 在云服务器 的安全组或者防火墙上开通端口号
  5. 通过公网访问Erueka和之前的order

四.Nacos

1.安装

下载地址

二选一即可:在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1)window环境

Nacos的启动模式是默认的集群模式,需要通过startup.cmd文件来改成单机模式:在这里插入图片描述
在这里插入图片描述
改完后启动startup.cmd文件:在这里插入图片描述
通过127.0.0.1:8848:nacos进入:在这里插入图片描述
如果此时8848的端口号被占用,使用cmd命令框进行查找该端口号的进程并且杀死该进程,或者通过修改Nacos的端口号:

35436就是进程ID:
在这里插入图片描述

通过红框命令杀死进程:
在这里插入图片描述

修改端口号的话,先进入conf的文件:在这里插入图片描述

打开properties的这个文件:在这里插入图片描述
修改此处的端口号即可:在这里插入图片描述

2)Linux环境

  1. 在Linux上创建自己的目录:在这里插入图片描述

  2. 直接将下载好的zip文件拖到Linux中后,在输入:unzip 压缩文件名进行解压,但是在第一次进行压缩时需要先安装unzip安装的命令:apt-get install unzip:
    在这里插入图片描述
    在这里插入图片描述

  3. 修改端口号:
    在这里插入图片描述
    在这里插入图片描述

  4. 后续就是将nacos设置成单机模式,通过命令:bash startup.sh -m standalone进入后,修改为单机模式,如果能进入nacos的页面,则代表成功了:
    在这里插入图片描述
    在这里插入图片描述

2.快速上手

  1. 在父项目中引入Spring-Cloud- Alibaba依赖
<properties>
<spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
</properties>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
  1. 子项目加上nacos和LoadBalance的依赖:
		<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
  1. 修改配置,使用nacos服务器地址
spring:application:name: cloud:nacos:discovery:server-addr: 110.41.51.65:10020
  1. 启动之前的订单和产品类(需将之前Erueka的配置和依赖删去,不然会和nacos冲突),启动后nacos的网页服务列表中就会出现信息
    n/direct/a5d901ce25284f47b371cf007da7d25a.png)

  2. 测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五.Nacos负载均衡

1.服务器下线

点击下方红色框进入服务器详情:在这里插入图片描述
其中有下线操作,直接点击下线操作后,这个服务器之后就不会接收请求了,请求被其他两个服务器进行接收:
在这里插入图片描述
通过编辑修改服务器的权重:
在这里插入图片描述
想使用到这个权重,需要订单order的项目在配置文件中配置nacos的负载均衡策略:

  cloud:loadbalancer:nacos:enabled: true

测试:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改权重报错

windows环境下直接删除data下的protocol文件,Linux环境的话,也是找到对应的文件删除即可:在这里插入图片描述

2.同集群优先访问

Nacos把同一个机房内的实例,划分为一个集群。所以同集群优先访问,在一定程度上也可以理解为同机房优先访问。

微服务架构中,一个服务通常有多个实例共同提供服务,这些实例可以部署在不同的机器上,这些机器可以分布在不同的机房,比如product-service:
实例1:分布在上海机房
实例2:分布在上海机房
实例3:分布在北京机房
实例4:分布在北京机房

在这里插入图片描述
微服务访问时,应尽量访问同机房的实例。当本机房内实例不可用时,才访问其他机房的实例。比如order-service 在上海机房,product-service 在北京和上海机房都有实例,那我们希望可以优先访问上海机房,如果上海机房没有实例,或者实例不可用,再访问北京机房的实例。通常情况下,因为同一个机房的机器属于一个局域网,局域网访问速度更快一点.在这里插入图片描述

配置集群的名称

  cloud:nacos:discovery:server-addr: 1.95.194.117:8848cluster-name: BJ

其他端口号的Product服务器也需要更改:
复制后,再粘贴上去
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

此时只有9090的Product的服务器才能接收,其他都接收不到:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果此时9090下线后,其他另一个集群的机器就能够接收了:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.健康检查

两种健康检查机制:

Nacos作为注册中心,需要感知服务的健康状态,才能为服务调用方提供良好的服务。Nacos 中提供了两种健康检查机制:

客户端主动上报机制:

  • 客户端通过心跳上报方式告知服务端(nacos注册中心)健康状态,默认心跳间隔5秒;
  • nacos会在超过15秒未收到心跳后将实例设置为不健康状态,超过30秒将实例删除
    服务器端反向探测机制:
  • nacos主动探知客户端健康状态,默认间隔为20秒
  • 健康检查失败后实例会被标记为不健康,不会被立即删除

在这里插入图片描述

nacos服务器实例

Nacos的服务实例(注册的节点)分为临时实例和非临时实例

  • 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认类型.
  • 非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例
    Nacos对临时实例,采取的是 客户端主动上报机制,对非临时实例,采取服务器端反向探测机制。

在这里插入图片描述

配置⼀个服务实例为永久实例

spring:cloud:nacos:discovery:ephemeral: false # 设置为⾮临时实例

修改实例是永久性还是非永久性,无法在原先的基础上进行修改,只能将之前的protocol文件中的raft删除后,进行修改:

先进入nacos文件中:在这里插入图片描述
再找到nacos的进程ID,杀死后,才能进行修改,修改后再重新启动nacos进程:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时才能够成功重启Order项目:在这里插入图片描述

关闭Order项目的启动类后,健康状态为false,但是不会立刻删除实例:在这里插入图片描述

4.环境隔离

企业开发中,一个服务会分为开发环境,测试环境和生产环境。

  1. 开发环境:开发⼈员用于开发的服务器,是最基础的环境。一般日志级别设置较低,可能会开启⼀些
    调试信息。
  2. 测试环境:测试人员用来进行测试的服务器,是开发环境到生产环境的过渡环境。
  3. 生产环境:正式提供对外服务的环境,通常关掉调试信息。
    通常情况下,这几个环境是不能互相通信的。Nacos提供了namespace(命名空间)来实现环境的隔离。不同的namaspace的服务不可见。

创建环境

  1. 在nacos的页面上的命名空间中进行新建:
    在这里插入图片描述
    在这里插入图片描述

  2. 通过命名空间的id来加入到项目的配置文件中即可:在这里插入图片描述

spring:cloud:nacos:discovery:namespace: 51152a13-7911-49e3-bbdc-16fd5670a257
  1. 重启order项目(在重启之前将实例永久性的配置删去,并按照上述的方法删除对应的文件后,重启nacos,再进行重启order项目):在这里插入图片描述
    在这里插入图片描述
  2. 环境不同是没办法进行远程调用的:在这里插入图片描述
  3. 将prodcut也放入同样的环境当中就可以使用了:在这里插入图片描述
    在这里插入图片描述

六.Nacos的配置中心

除了注册中心和负载均衡之外,Nacos还是⼀个配置中心,具备配置管理的功能。Namespace 的常用场景之一是不同环境的配置区分隔离。例如开发测试环境和生产环境的配置隔离.

1.配置中心的需求

当前项目的配置都在代码中,会存在以下问题:

  1. 配置文件修改时,服务需要重新部署。微服务架构中,一个服务可能有成百个实例,挨个部署比较麻烦,且容易出错。
  2. 多人开发时,配置文件可能需要经常修改,使用同一个配置文件容易冲突。配置中心就是对这些配置项进行统一管理。通过配置中心,可以集中查看,修改和删除配置,无需再逐个修改配置问件。提高效率的同时,也降低了出错的风险

在这里插入图片描述
3. 服务启动时,从配置中心读取配置项的内容,进行初始化。
4. 配置项修改时,通知微服务,实现配置的更新加载。

2.快速上手

  1. 添加配置
    在这里插入图片描述
    在这里插入图片描述

  2. product-service中引入依赖

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud 2020.*之后版本需要引⼊bootstrap-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
  1. 在product-service的项目中添加一个bootstrap.properties配置文件
spring:application:name: product-servicecloud:nacos:config:server-addr: nacos网页URL
  1. 写一个Controller获取nacos配置项中的nacos.config值:
@RestController
public class NacosController {@Value("${nacos.config}")private String nacosConfig;@RequestMapping("/getConfig")public String getConfig() {return "从Nacos获取配置项nacos.config: " + nacosConfig;}
}

在这里插入图片描述

  1. 如果添加一个@RefreshScope注解,此时就会跟随nacos的配置文件里面的内容一起更新

在这里插入图片描述
在这里插入图片描述

3.配置中心详解

配置中心的配置都在bootstrap.yml文件中,此时再bootstrap中加入命名空间的id,就能获取对应配置的信息:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

data id说明

在这里插入图片描述
在这里插入图片描述
启动类时,增加了三个监听,此时可以通过nacos管理页面中添加三个配置来进行查看:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最先读取的是:在这里插入图片描述
此时删除这个配置项后观察其他两个的优先级:在这里插入图片描述
此时是product-service.properties:在这里插入图片描述
最后只剩下一个则是最低的优先级:在这里插入图片描述
在这里插入图片描述

4.部署nacos

Product-Service项目的POM文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>spring-cloud-nacos</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>product-service</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- SpringCloud 2020.*之后版本需要引⼊bootstrap--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency></dependencies><profiles><profile><id>dev</id><properties><profile.name>dev</profile.name></properties></profile><profile><id>prod</id><properties><profile.name>prod</profile.name></properties></profile></profiles><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><resources><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>**/**</include></includes></resource></resources></build></project>

Product-Service的yml配置文件:

dev环境:

server:port: 9090
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/cloud_product?characterEncoding=utf8&useSSL=falseusername: rootpassword: "071711"driver-class-name: com.mysql.cj.jdbc.Drivercloud:nacos:discovery:server-addr: 1.95.194.117:8848
#        cluster-name: BJ
#        namespace: 8a61ef37-2daa-402f-8b1d-5363629c5c87   #服务管理的命名空间# 设置 Mybatis 的 xml 保存路径
mybatis:configuration: # 配置打印 MyBatis 执行的 SQL
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true  #自动驼峰转换

prod环境:

server:port: 9090
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/cloud_product?characterEncoding=utf8&useSSL=falseusername: rootpassword: 云服务器上数据库密码driver-class-name: com.mysql.cj.jdbc.Drivercloud:nacos:discovery:server-addr: 1.95.194.117:8848
#        cluster-name: BJ
#        namespace: 8a61ef37-2daa-402f-8b1d-5363629c5c87   #服务管理的命名空间# 设置 Mybatis 的 xml 保存路径
mybatis:configuration: # 配置打印 MyBatis 执行的 SQL
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true  #自动驼峰转换

普通yml:

spring:application:name: product-serviceprofiles:active: @profile.name@cloud:nacos:config:server-addr: 1.95.194.117:8848
#        namespace: 8a61ef37-2daa-402f-8b1d-5363629c5c87   #配置中心的命名空间

Order-Service的pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>spring-cloud-nacos</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>order-service</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId></dependency></dependencies><profiles><profile><id>dev</id><properties><profile.name>dev</profile.name></properties></profile><profile><id>prod</id><properties><profile.name>prod</profile.name></properties></profile></profiles><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

dev的yml文件:

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/cloud_order?characterEncoding=utf8&useSSL=falseusername: rootpassword: "071711"driver-class-name: com.mysql.cj.jdbc.Driver

prod的yml文件:

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/cloud_order?characterEncoding=utf8&useSSL=falseusername: rootpassword: driver-class-name: com.mysql.cj.jdbc.Driver

普通的yml文件:

server:port: 8080
spring:application:name: order-serviceprofiles:active: @profile.name@cloud:nacos:discovery:server-addr: 1.95.194.117:8848
#        cluster-name: BJ
#        ephemeral: false #非临时实例
#        namespace: 8a61ef37-2daa-402f-8b1d-5363629c5c87loadbalancer:nacos:enabled: true
# 设置 Mybatis 的 xml 保存路径
mybatis:configuration: # 配置打印 MyBatis 执行的 SQL
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true  #自动驼峰转换

打包上传云服务器:

在这里插入图片描述
在这里插入图片描述
后台启动:
在这里插入图片描述
成功:在这里插入图片描述

七.Nacos与Eureka的区别

1.共同点

都支持服务注册和服务拉取

2.区别

  1. 功能
    Nacos除了服务发现和注册之外,还提供了配置中心,流量管理和DNS服务等功能。
  2. CAP理论
    Eureka遵循AP原则,Nacos可以切换AP和CP模式,默认AP。
    Nacos 根据配置识别CP或者AP模式。如果注册Nacos的Client的节点是临时节点,那么Nacos对这个
    Client节点的效果就是AP,反之是CP。AP和CP可以同时混合存在。
  3. 服务发现
    Eureka:基于拉模式。Eureka Client会定期从Server拉取服务信息,有缓存,默认每30秒拉取⼀次。
    Nacos:基于推送模式。服务列表有变化时实时推送给订阅者,服务端和客户端保持心跳连接.

Nacos:在这里插入图片描述在这里插入图片描述

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

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

相关文章

【开关电源】关于GaN反激电源开关噪声

文章目录 0 前言1 设计信息1.1 设计需求1.2 原理图1.3 电源表现 2 原因分析3 横向对比TI UCG28826 &#xff08;GaN&#xff09;采购的普通QR反激变换器 4 总结 0 前言 笔者原计划设计一款省电的&#xff0c;效率尚可的&#xff0c;稳定的2路输出反激电源&#xff0c;用于系统…

DOCA介绍

本文分为两个部分&#xff1a; DOCA及BlueField介绍如何运行DOCA应用&#xff0c;这里以DNS_Filter为例子做大致介绍。 DOCA及BlueField介绍&#xff1a; 现代企业数据中心是软件定义的、完全可编程的基础设施&#xff0c;旨在服务于跨云、核心和边缘环境的高度分布式应用工作…

mybatis mapper.xml中使用枚举

重点&#xff1a;application.propertis配置类 #TypeEnumHandler 这个类的包名&#xff0c;不是全路径 mybatis.type-handlers-packagecom.fan.test.handler两个枚举类&#xff1a; public enum StatusEnum {DELETED(0),ACTIVE(1);private final int code;StatusEnum(int cod…

鸿蒙生态:鸿蒙生态校园行心得

&#xff08;个人观点&#xff0c;仅供参考&#xff09; 兄弟们&#xff0c;今天来浅浅聊一聊这次的设立在长沙的鸿蒙生态行活动。 老样子&#xff0c;我们先来了解一下这个活动&#xff1a; &#xff28;&#xff41;&#xff52;&#xff4d;&#xff4f;&#xff4e;&#x…

【速写】多LoRA并行衍生的一些思考

迁移学习上的一个老问题&#xff0c;怎么做多领域的迁移&#xff1f;以前的逻辑认为领域迁移属于是对参数做方向性的调整&#xff0c;如果两个领域方向相左&#xff0c;实际上不管怎么加权相加都是不合理的。 目前一些做法想着去观察LoRA权重矩阵中的稠密块与稀疏块&#xff0…

【Delphi 基础知识 44】接口interface的应用

目录 1. 前言2. 接口有哪些优势2.1. 实现多态性2.2 实现多重(解决单继承限制)2.3 解耦代码(依赖注入)2.4 便于测试(模拟接口)2.5 跨语言互操作性(COM支持)1. 前言 总结为一句话就是:接口只告诉你要做什么,而类会告诉你应该怎么做 下面是最简单的接口实现 typeIMyIn…

09.传输层协议 ——— TCP协议

文章目录 TCP协议 谈谈可靠性TCP协议格式 序号与确认序号窗口大小六个标志位 确认应答机制&#xff08;ACK&#xff09;超时重传机制连接管理机制 三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP的应用层协议 TCP协…

NLP高频面试题(五十一)——LSTM详解

长短期记忆网络(LSTM)相较于传统循环神经网络(RNN)的核心改进在于通过引入记忆单元(cell state)和门机制(gating mechanism)来有效缓解梯度消失与梯度爆炸问题,从而更好地捕捉长距离依赖关系 。在其网络结构中,信息通过输入门(input gate)、遗忘门(forget gate)和…

SpringCloud组件—Eureka

一.背景 1.问题提出 我们在一个父项目下写了两个子项目&#xff0c;需要两个子项目之间相互调用。我们可以发送HTTP请求来获取我们想要的资源&#xff0c;具体实现的方法有很多&#xff0c;可以用HttpURLConnection、HttpClient、Okhttp、 RestTemplate等。 举个例子&#x…

无需花钱购买域名服务器!使用 VuePress + Github 30分钟搭建属于自己的博客网站(保姆级教程)

前言 GitHub Pages 提供免费全球加速的服务器资源&#xff0c;VuePress 将 Markdown 变成艺术品级的网页&#xff0c;仅需 30 分钟&#xff0c;你便可以像提交代码一样发布文章&#xff0c;过程完全免费。 博客搭建好的效果如下&#xff1a;https://honorsong.github.io/exam…

提交到Gitee仓库

文章目录 注册配置公钥创建空白的码云仓库把本地项目上传到码云对应的空白仓库中 注册 注册并激活码云账号&#xff08; 注册页面地址&#xff1a;https://gitee.com/signup &#xff09; 可以在自己C盘/用户/用户名/.ssh 可以看到 有id_rsa.pub 以前在GitHub注册时搞过&…

如何在 Java 中从 PDF 文件中删除页面(教程)

由于 PDF 文件格式不是 Java 原生支持的&#xff0c;因此要从 PDF 中删除页面&#xff0c;你需要使用外部库。 本教程介绍如何使用 JPedal 来实现这一功能。 开始使用 • 将 JPedal 添加到你的类路径或模块路径中&#xff08;可从官网下载安装试用版 JAR 文件&#xff09; •…

机器学习第二篇 多变量线性回归

数据集&#xff1a;世界幸福指数数据集中的变量有幸福指数排名、国家/地区、幸福指数得分、人均国内生产总值、健康预期寿命、自由权、社会支持、慷慨程度、清廉指数。我们选择GDP per Capita和Freedom&#xff0c;来预测幸福指数得分。 文件一&#xff1a;linear&#xff0c;…

位运算,状态压缩dp(算法竞赛进阶指南学习笔记)

目录 移位运算一些位运算的操作最短 Hamilton 路径&#xff08;状态压缩dp模板&#xff0c;位运算&#xff09; 0x是十六进制常数的开头&#xff1b;本身是声明进制&#xff0c;后面是对应具体的数&#xff1b; 数组初始化最大值时用0x3f赋值&#xff1b; 移位运算 左移 把二…

Java高频面试之并发编程-05

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;线程有哪些调度方法&#xff1f; 在Java中&#xff0c;线程的调用方法主要包括以下几种方式&#xff0c;每种方式适用于…

进程的同步和互斥

进程同步&#xff08;synchronous&#xff09; ✅通俗理解&#xff1a; 就像在排队买饭&#xff0c;一个一个来&#xff0c;前面的人不走&#xff0c;后面的人就不能干事。 进程同步就是&#xff1a;多个进程之间需要协调&#xff0c;有先后顺序&#xff0c;一个进程要等另一…

PDF处理控件Aspose.PDF指南:使用 Python 将 EPUB 转换为 PDF

EPUB是一种流行的电子书格式&#xff0c;用于可重排内容&#xff0c;而PDF则广泛用于固定版式文档&#xff0c;非常适合共享和打印。如果您想使用 Python 将 EPUB 转换为 PDF&#xff0c;Aspose.PDF for Python 提供了一个简单可靠的解决方案。在本教程中&#xff0c;我们将向您…

day4-小白学习JAVA---开发软件_Scanner键盘录入_Random随机数_流程控制语句

开发软件_Scanner键盘录入_Random随机数_流程控制语句 一、开发软件idea&#xff08;MAC版&#xff09;1、软件安装-安装社区版2、中英文设置3、保存时格式化配置4、注释和代码对不齐5、idea快捷键 二、键盘录入--Scanner1、next和nextInt2、next和nextLine区别 三、Random随机…

MySQL基本查询与数据操作全面解析

目录 1. CRUD操作概述 2. Create操作详解 2.1 表的创建 2.2 单行数据插入 2.3 多行数据插入 2.4 插入冲突处理 3. Retrieve操作详解 3.1 基础查询 全列查询&#xff08;慎用&#xff09; 指定列查询 表达式查询 结果去重 3.2 条件查询&#xff08;WHERE子句&#…

01.Python代码Pandas是什么?pandas的简介

01.Python代码Pandas是什么&#xff1f;pandas的简介 提示&#xff1a;帮帮志会陆续更新非常多的IT技术知识&#xff0c;希望分享的内容对您有用。本章分享的是pandas的使用语法。前后每一小节的内容是存在的有&#xff1a;学习and理解的关联性&#xff0c;希望对您有用~ pyth…