SpringCloud | Dubbo 微服务实战——注册中心详解

前言

在这里插入图片描述

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家https://www.captainbed.cn/z
请添加图片描述

chatgpt体验地址

请添加图片描述

引言

在项目开发过程中,随着项目不断扩大,也就是业务的不断增多,我们将采用集群,微服务的形式去降低配置,集群是指将一个项目部署到多个服务器当中,而微服务是指将业务拆分为一个一个服务去进行,那么我们想要去实现一个业务的时候,我们就需要调用多个服务,那么每个服务的调用,我们都需要知道它的URL,若是有成千上万的URL该如何维护呢?
这时就需要注册中心功能
其实我们可以把注册中心类比与通讯录

设计思路

程序是数据结构和算法的组合,那么我们若是想要设计一个注册中心,我们就要从两个方面去考虑

  • 存储结构
  • 提供的操作

存储结构

我们类比一下通讯录,通讯录的每一个内容都包括姓名和电话,那么注册中心每一个保存的是服务名和服务信息,这个结构我们不难想象到map结构
则注册表的存储结构如下:
在这里插入图片描述

两层map结构: 在微服务系统中,为了避免单点故障,通常使用的是服务集群,一个服务名会对应多个服务实例

注册中心的操作

  • 接收服务
  • 接收服务心跳
  • 接收服务下线
  • 服务剔除
  • 查询注册表中服务信息
  • 注册中心集群中的信息同步

注册中心的使用

注册中心的使用主要分为两步

  1. 搭建注册中心服务端
  2. 启动业务服务,让服务和注册中心连通
    在这里插入图片描述

本文的核心内容就是具体的注册中心配置使用

Dubbo和Zookeeper的使用

Zookeeper

  1. zookeeper的安装
    安装地址
    在这里插入图片描述

  2. 将conf目录下的zoo_sample.cfg文件,复制一份,重命名为zoo.cfg
    在这里插入图片描述

  3. 在步骤2的基础上,修改zoo.cfg配置文件中zookeeper的数据文件存储位置及添加zookeeper日志文件位置(方法查错),(数据日志配置需另加),具体步骤如下

  • 在zookeeper目录下新建tmp文件夹,在分别tmp文件夹下面新建data文件夹与log文件夹,用于存放data(数据存储)和log(数据日志)
  • 修改conf下zoo.cfg配置中数据存储和数据日志路径
dataDir=../tmp/data
dataLogDir=../tmp/log
# 添加此配置项
admin.serverPort=8888

zoo.cfg配置文件参数说明

# tickTime       客户端与服务器或者服务器与服务器之间维持心跳,也就是每个tickTime时间就会发送一次心跳。通过心跳不仅能够用来监听机器的工作状态,还可以通过心跳来控制FlowerLeader的通信时间
 
# initLimit	       集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数
 
#syncLimit         集群中flower服务器(F)跟leader(L)服务器之间的请求和答应最多能容忍的心跳数
  
# dataDir          用来存放myid信息跟一些版本,日志,跟服务器唯一的ID信息等。
 
# dataLogDir       存放事务日志的文件夹
 
# clientPort       客户端连接的接口,客户端连接zookeeper服务器的端口,zookeeper会监听这个端口,接收客户端的请求访问!这个端口默认是2181。
 
# maxClientCnxns    允许连接的客户端数目,0为不限制,通过IP来区分不同的客户端

  1. 判断zookeeper安装十分成功
    bin目录
  • zkCli.cmd 验证是否安装成功
  • zkServer.cmd 启动zookeeper服务
  1. 可以通过连接工具判断是否连接成功
    在这里插入图片描述

下载地址——prettyzoo
在这里插入图片描述

dubbo-admin

  1. dubbo-admin下载
    安装地址

后端启动打包

  1. 踩坑经过:一定要确定运行环境是jdk1.8
    在这里插入图片描述
    成功启动并打包
    在这里插入图片描述

前端启动打包

  1. 首先找到前端文件夹ui
    执行命令
npm install

打包即可,注意要检查是否完成node.js的安装

Eureka的使用

搭建eureka-server步骤

1.引入SpringCloud为eureka提供的starter依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2. 编写一个application.yml文件,内容如下:

server:
  port: 10086
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka

3. @EnableEurekaServer注解

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

4.启动微服务,然后在浏览器访问:http://127.0.0.1:10086

Nacos的使用

1. 下载安装

下载地址——Nacos下载

Nacos安装:

在这里插入图片描述

  • 解压安装包

  • 打开配置文件(nacos安装目录 -> conf -> application.properties)

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC

db.user=root
db.password=123456

  • 修改端口号
\### Default web context path:
server.servlet.contextPath=/nacos
\### Default web server port:
server.port=8848

  1. 执行sql文件(nacos安装目录 -> conf ->nacos-mysql.sql)

  2. 通过修改nacos.core.auth.enabled为true,就可以开启nacos认证。开启后客户端必须配置username、password。

单机模式启动

在nacs安装目录下的bin目录中运行命令,默认是集群模式启动,单机模式启动需要指定模式。

Windows命令:startup.cmd -m standalone

Linux命令:sh startup.sh -m standalone

命令运行成功后直接访问:http://localhost:8848/nacos
默认账号密码都是:nacos

Consul的使用

在这里插入图片描述

下载与安装

下载地址——Consul

1)下载

wget https://releases.hashicorp.com/consul/1.3.0/consul_1.3.0_linux_amd64.zip

2)解压

unzip  consul_1.3.0_linux_amd64.zip

3)拷贝到usr目录下

mv consul   /usr

4)查看是否安装成功

./consul

小结

本文内容主要在单机模式下下载安装注册中心,更详细的内容我推荐在下面这本书中去获取

京东链接购买地址

  • 🎁本次送书1~3本【取决于阅读量,阅读量越多,送的越多】👈
  • ⌛️活动时间:截止到2023-12月9号
  • ✳️参与方式:关注博主+三连(点赞、收藏、评论)
    在这里插入图片描述

内容简介

《Spring Cloud 微服务快速上手》介绍了当下*主流的属于Spring生态的微服务框架,它继承了Spring Boot的优点,开发部署都非常简单。本书内容全面,介绍了微服务架构的发展历程,包含Spring Cloud Netflix 和 Spring Cloud Alibaba的组件,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。在解读核心组件的实现原理的同时,配以案例进行实践。本书内容包含微服务架构和云原生架构,读者在掌握微服务之后,可以进一步掌握云原生知识。
在这里插入图片描述
在这里插入图片描述

### Nacos 注册中心与配置管理的最佳实践 #### 一、Nacos 注册中心的使用方法 Nacos 的注册中心功能主要用于微服务架构中的服务发现和服务治理。以下是其主要特性和使用方法: 1. **服务注册** 应用程序在启动时会向 Nacos 注册自己的服务信息,包括 IP 地址和端口号等。例如,在 Spring Boot 中可以通过 `spring.cloud.nacos.discovery.server-addr` 配置项指定 Nacos Server 的地址[^2]。 ```yaml spring: cloud: nacos: discovery: server-addr: localhost:8848 ``` 2. **服务健康检查** Nacos 支持两种类型的实例:临时实例和非临时实例。对于临时实例,通过心跳机制来检测服务的状态;如果心跳超时,则认为该实例不可用并将其从服务列表中移除。而对于非临时实例,即使心跳丢失也不会立即剔除,而是依赖于主动检测模式[^3]。 3. **服务发现** 当消费者需要调用某个服务时,可以从 Nacos 获取最新的服务实例列表。相比 Eureka 的定时拉取(Pull)模式,Nacos 增加了基于消息推送的服务列表变更通知(Push),从而提高了服务更新的实时性[^4]。 4. **高可用性设计** 默认情况下,Nacos 集群遵循 AP(Availability and Partition tolerance)原则,即优先保证系统的可用性和分区容忍度。然而,当涉及非临时实例时,它能够切换到 CP(Consistency and Partition tolerance)模式以确保数据的一致性[^4]。 --- #### 二、Nacos 配置管理的功能介绍 随着项目规模的增长,手动维护多个环境下的配置变得越来越困难。因此,利用 Nacos 进行集中化配置管理成为了一种高效的选择。 1. **创建配置文件** 用户可以在 Nacos 控制台或者 API 接口上传配置文件,并为其分配唯一的 Data ID 和 Group 名称。这些参数共同决定了某份配置的作用范围[^1]。 2. **动态刷新配置** 如果某些业务逻辑依赖外部变量调整行为,那么无需重启应用程序即可完成更改操作——只需修改对应的键值对内容,随后触发监听事件让目标模块感知变化并重新加载最新设置[^1]。 3. **分层命名空间隔离** 不同团队之间可能共享同一套基础设施资源却互不影响彼此的工作成果。借助 Namespace 功能划分独立区域后便可轻松达成此目的[^5]。 4. **版本控制与回滚能力** 每次保存新修订版都会保留历史记录以便查询对比差异之处以及必要时候快速恢复至先前稳定状态之一[^5]。 --- #### 三、实际案例分析 假设我们正在开发一款电商系统,其中订单服务(order-service)分别部署到了三个不同的服务器节点上(分别为A,B,C),此时就可以按照如下步骤集成 Nacos: 1. 修改 pom.xml 文件引入必要的依赖库; ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> ``` 2. 编辑 application.yml 添加连接详情及相关属性定义; ```yaml spring: application: name: order-service cloud: nacos: discovery: server-addr: 192.168.x.y:8848 management: endpoints: web: exposure: include: "*" ``` 3. 启动类上方标注@EnableDiscoveryClient 开启自动扫描功能; ```java @SpringBootApplication @EnableDiscoveryClient public class OrderApplication { public static void main(String[] args){ SpringApplication.run(OrderApplication.class,args); } } ``` 4. 测试阶段观察日志确认成功加入集群情况; ``` 2023-xx-yy hh:mm:ss INFO org.springframework.cloud.alicloud.nacos.registry.NacosServiceRegistry : nacos registry, order-service xx.xxx.xx.yy:port register finished. ``` 与此同时还可以把数据库链接字符串之类的敏感资料存放到远程存储位置并通过编码形式保护起来减少泄露风险几率。 --- ###
评论 239
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪碧有白泡泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值