Etcd
注册中心应该有什么核心能力?
服务注册:服务提供者上报服务信息到注册中心。
服务发现:服务消费者从注册中心获取服务提供者信息。
心跳检测:定期检查服务提供者存活状态,如果服务提供者挂了,则从注册中心删除服务提供者信息。
服务注销:手动剔除节点、或者自动剔除失效节点。
数据分布式存储:集中的服务注册信息数据存储、读取和共享。
更多的优点:比如注册中心本身的容错、服务消费者缓存等。
Etcd官方网站:https://github.com/etcd-io/etcd
### Etcd 介绍
Etcd 是一个 Go 语言实现的、开源的、分布式的键值存储系统,他主要用于分布式系统中的服务发现、配置管理和分布式锁等场景。
当提到 Go 语言实现,我们就可以想得到,Etcd 的性能是非常高的,而且它和云原生有密切的关系,通常被作为云原生应用的配置中心、基础设施,存储一些元信息。
比如经典的容器管理平台 K8s 就是使用了Etcd 来存储集群配置信息、集群状态信息、节点信息等。
除了性能高外,Etcd 采用 Raft 一致性算法,确保了在分布式环境中的数据强一致性和可靠性,具有高可用性、强一致性、 ...
SPI
SPI(Service Provider Interface)服务提供接口是Java提供的一种用于服务发现和扩展的标准机制,主要用于实现模块化开发和插件化扩展。
SPI 机制允许服务提供者通过特定的配置文件将自己的实现注册到系统中,然后系统通过反射机制动态加载这些实现,而不需要修改原始框架的代码,从而实现了系统的解耦、提高了可扩展性。
这样的设计极大地增强了软件系统的可扩展性和灵活性。
应用场景一个典型的 SPI 应用场景是 JDBC(Java 数据库连接库),不同的数据库驱动程序开发者可以使用 JDBC 库,然后定制自己的数据库驱动程序。
框架扩展许多Java框架利用SPI机制来支持可插拔的组件和服务,例如JDBC驱动加载、Dubbo的扩展点加载、Spring Boot的自动配置等。
我们使用的主流 Java 开发框架中,几乎都使用到了 SPI 机制,比如 Servlet 容器、日志框架、ORM 框架、Spring 框架。
所以这是 Java 开发者必须掌握的一个重要特性!
SPI 实现系统配置文件实现Java 内已经提供了 SPI 机制相关的 API 接口,可以直接使用,这种方 ...
序列化
序列化器在编写处理请求的逻辑前,我们要先实现序列化器。因为无论是请求或响应,都会涉及参数的传输。
而 Java 对象是存活在 JVM 虚拟机中的,如果想在其他位置存储并访问、或者在网络中进行传输,就需要进行序列化和反序列化。
序列化和反序列化
序列化:将 Java 对象转换为字节序列的过程。
反序列化:将字节序列转换为 Java 对象的过程。
序列化方式
Java 序列化:Java 提供的序列化方式,将 Java 对象转换为字节序列,然后通过网络传输。
JSON 序列化:将 Java 对象转换为 JSON 字符串,然后通过网络传输。
XML 序列化:将 Java 对象转换为 XML 字符串,然后通过网络传输。
Protobuf 序列化:将 Java 对象转换为 Protobuf 字节序列,然后通过网络传输。
Hessian 序列化:将 Java 对象转换为 Hessian 字节序列,然后通过网络传输。
Kryo 序列化:将 Java 对象转换为 Kryo 字节序列,然后通过网络传输。
序列化的作用无论是请求或响应,都会涉及参数的传输。
而 Java 对象是存活在 JVM ...
Spring Boot+FastDFS 前后端分离文件上传
在Spring Boot前后端分离环境下做文件上传, 在生产环境中, 我们可以搭建独立的文件服务器, 结合FastDFS还可以搭建独立的分布式文件服务系统, 这样文件管理服务器不仅方便管理还易于扩展, 可以解决临时目录丢失的问题.如果网络请求使用Axios, 那么文件上传有两种不同的实现方式:
后端配置上传的准备工作, 其实本质就是在后端提供一个文件上传接口
单文件上传12345678910111213141516171819202122232425262728293031323334@RestControllerpublic class FileUploadController { /** * 日期格式 作为目录拼接 */ SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/dd/"); @PostMapping("/upload") public String upload(MultipartFile file, HttpServ ...
RabbitMQ
RabbitMQRabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。
消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。
在分布式的系统中,消息队列也会被用在很多其它的方面,比如:分布式事务的支持,RPC 的调用等等。
Eureka
Eureka 集群
使用了注册中心之后,所有的服务都要通过服务注册中心来进行信息交换。
那么服务注册中心的稳定性就变得非常重要了,一旦服务注册中心掉线,那么就会影响到整个系统的稳定性。
所以,在实际开发中,Eureka一般都是以集群的形式出现。
Eureka集群,实际上就是启动多个Eureka示例,多个Eureka实例之间,相互注册,相互同步数据,共同组成一个Eureka集群。
Eureka 集群搭建
首先需要修改电脑的 hosts文件
127.0.0.1 eureka-a eureka-b
在resources中添加两个环境模拟集群:
application-a.yml
application-b.yml
打成jar包流程:跳过test测试,package打包
启动Eureka实例
打包完成后,在命令行启动实例
打开term终端
cd target/
启动实例:
12java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=ajava -jar eureka-0.0.1-SNAPSHOT.ja ...
Java 远程开发
使用 IDEA 自带的远程开发功能,可以直接将本地的编译、构建、调试、运行等工作全部都放在远程服务器上执行!
而本地仅运行客户端软件连接服务器,像之前一样编写代码、进行其他开发操作即可。
适合本地电脑性能差(服务器性能强)、开发环境多人协作开发、需要统一开发环境的场景。
网络连通要确保我们本地的 Windows 电脑能够连接到 Linux 虚拟机。
首先在设置中搜索网络,点击查看网络设置:
获取到虚拟机的 IPv4 地址:
在自己的 Windows 电脑上打开 CMD ping 这个 IP 地址,测试能否 ping 通。
如下图,表示网络正常连通:
开启 SSH 服务在 Linux 虚拟机中,我们需要开启 SSH 服务,这样我们才能通过 SSH 协议连接到虚拟机。
很多远程开发工具都是通过 SSH 协议连接远程服务器的,所以我们要在 Linux 虚拟机上开启 SSH。
在 Linux 虚拟机上打开终端,输入下列命令安装 SSH 服务器:
1sudo apt-get install openssh-server
安装完成后,我们可以通过下列命令查看 SSH 服务是否已经开启:
...
VMware Workstation 安装 Ubuntu
虚拟机安装下载首先我们要下载虚拟机软件,这里比较推荐 VMware Workstation Player,个人不商业使用是 免费 的。
直接到 VMware 官网下载:https://www.vmware.com/cn/products/workstation-player.html
在官网点击免费下载后,即可进入安装流程。这里要注意勾选 “自动安装 Windows Hypervisor Platform” 和 “将 VMware Workstation 控制台工具添加到系统 PATH” 两个选项:
选择免费、非商用版本:
然后就安装成功了
安装 Ubuntu这里我们选择 Linux Ubuntu 18.04 LTS 版本来给大家演示,有图形界面。
Ubuntu 镜像下载:https://releases.ubuntu.com/18.04/
拉到底部,找到 .iso 后缀的文件下载即可:
创建虚拟机虚拟机软件安装完成后,我们打开软件,接下来要先新建虚拟机来安装一个 Linux 操作系统:
点击创建新虚拟机,然后它让我们提供一个 Linux 操作系统的镜像:
我们可以根据实际的 ...
一键部署 Spring Boot 项目到 Docker
容器化部署应该是目前的主流方案。
不同于传统的单体应用,微服务由于服务数量众多,在部署的时候出问题的可能性更大,这个时候,结合 Docker 来部署,就可以很好的解决这个问题,这也是目前使用较多的方案之一。
将 Spring Boot 项目打包到 Docker 容器中部署,有很多不同的方法,主要将 Spring Boot 项目一键打包到远程 Docker 容器,然后通过运行一个镜像的方式来启动一个 Spring Boot 项目。
安装 Docker参考文章:https://blog.csdn.net/m0_59196543/article/details/124749175
配置 Docker 远程访问Docker 安装成功之后,我们首先需要修改 Docker 配置,开启允许远程访问 Docker 的功能,开启方式很简单,修改 /usr/lib/systemd/system/docker.service 文件,修改如下内容:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H u ...
Spring Boot Actuator
在 Spring Boot 项目中,我们使用的信息采集器主要就是 Spring Boot Actuator,这个模块由 Spring Boot 官方提供。
它包含了许多生产级别的功能,例如健康检查、审计、指标收集、HTTP 请求追踪等,Spring Boot Actuator 将这些信息收集起来后,通过 HTTP 和 JMX 两种方式暴露给外部模块。
例如 Spring Boot Actuator 通过 /health 端点(endpoints)提供了应用的健康信息,开发者只需要访问该端点就可以看到应用的健康信息,但是这些端点返回的数据是 JSON 格式的,不方便查看,也不方便分析,所以一般情况下,Spring Boot Actuator 都是和一些外部模块一起使用。
Actuator 端点
首先创建一个 Spring Boot 项目,添加上 Actuator 依赖。
项目创建成功后,直接运行项目,可以在 Actuator 的 Mappings 看见端点信息。
可以通过配置文件来暴露可使用的端点。
也可以通过配置文件来打开远程暂停 Spring Boot 项目端点。发起 ...