搭建Eureka服务注册中心
写在前面在前面学习了Eureka相关的基础知识,接下来将通过一些简单的示例,来学习如何使用Eureka构建注册中心以及进行注册与发现服务。
搭建服务注册中心为了更好的学习,此处提供两种方式,第一种是基于一个基础的SpringBoot工程来构建,另一种则是直接构建Eureka项目。
基于普通的SpringBoot工程第一步,创建一个普通的Spring Boot工程。首先需要创建一个普通的SpringBoot工程,工程名称为eureka-server,注意里面一个starter都不需要添加,这样创建成功后pom文件中只引用了一个父starter。
第二步,添加Eureka依赖。工程创建成功之后,需要向pom.xml文件中添加eureka-server依赖,笔者使用的SpringBoot版本是2.3.3,因此所对应的Eureka版本为Hoxton.SR7,请注意SpringBoot版本和Eureka的版本必须一一对应,开发者可以点击 这里进行查阅:
当然了,如果想查阅更为详细的版本对应信息,可以点击 这里:
注意此时pom.xml依赖文件中的依赖信息添加,可以参考Spring Cl ...
Spring Cloud Eureka介绍
SpringCloud Eureka是SpringCloud Netflix微服务套件中的一部分,它基于Netflix Eureka进行了二次封装,不是重复造轮子,主要负责完成微服务架构中的服务治理功能。SpringCloud通过为Eureka增加了SpringBoot风格的自动化配置,我们只需要通过简单引入依赖和注解配置就能让SpringBoot构建的微服务应用轻松的与Eureka服务治理体系进行整合。
服务治理服务治理是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册与发现。你可能要问了,在微服务架构中为什么需要服务治理模块呢?往下看你就知道了。
在最开始构建微服务系统的时候可能服务并不多,我们可以通过做一些静态配置来完成服务的调用。比如这里有两个服务A和B,其中服务A需要调用服务B来完成一个业务操作,为了实现服务B的高可用,开发者可能采用服务端的负载均衡或者客户端的负载均衡,但是无论怎样还需要手工来维护服务B的具体实例清单。
但是随着业务的发展,系统功能越来越复杂,相应的微服务应用也越来越多,此时依赖采用静态配置这种方式就显得捉襟见肘了。并且面对不断发展 ...
整合单机版FastDFS
FastDFSFastDFS简介FastDFS是一个开源的高性能分布式文件系统(Distributed File System)。 它的主要功能包括文件存储、文件同步、文件访问,以及高容量和负载平衡。主要解决了海量数据的存储问题,非常适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
FastDFS支持Linux、FreeBSD等UNIX系统,很类似于Google FS(GFS),但不是通用的文件系统,只能通过专有的API进行访问,目前提供了C、Java和PHP等语言的API。FastDFS不仅可以解决大容量文件的存储问题,还对追求高性能和高扩展性的互联网行业提供了一种可行的解决方案。
FastDFS架构下面是一张来自FastDFS官网的系统架构图:
从图中可以知道FastDFS架构包括Tracker Server和Storage Server两部分,其中Tracker Server是跟踪服务器,用来追踪文件,可以理解为文件的一个索引,而 Storage Server是存储服务器,用来保存文件。
开发者上传文件的文件最终保存在Sto ...
项目构建与部署
其实按照正常的学习顺序,项目的构建与部署应当安排在第一章,但是放在后面则说明本套学习笔记差不多应该结束了,一个项目到了不部署的阶段。
JAR项目打包本篇就不再新建SpringBoot项目了,而是使用第一个hellospringboot项目作为例子进行介绍。使用spring-boot-maven-plugin插件可以创建一个可执行的JAR应用程序,前提是应用程序的parent为spring-boot-starter-parent。在pom.xml文件中新增打包插件的build:
1234<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId></plugin>
配置完成后,在当前项目的根目录(与pom.xml文件同级目录)下执行如下的Maven命令进行打包操作:
1mvn package
如果你使用的开发工具为I ...
应用监控
当一个SpringBoot项目在运行时,开发者需要对SpringBoot项目进行实时监控,获取项目的运行情况,在项目出错时能够实现自动报警等。SpringBoot提供了actuator(读作[ˈæktjuˌeɪtər])来帮助开发者获取应用程序的实时运行数据。开发者可以选择使用HTTP端点或JMX来管理和监控应用程序,获取应用程序的运行数据,包括健康状况、应用信息、内存使用情况等。
端点配置开启端点在SpringBoot中开启应用监控非常容易,只需要添加actuator依赖即可,actuator(执行器)是制造业术语,指一个用于移动或控制机械装置的工具,一个很小的变化就能让执行器产生大量的运动。
第一步,创建项目。使用spring Initializr构建工具构建一个SpringBoot的Web应用,名称为actuatorspringboot,然后在pom.xml文件中添加如下依赖:
123456789<!--添加actuator依赖--><dependency> <groupId>org.springframework.boot</gr ...
企业开发常用功能(下)
本篇继续学习在企业开发过程中经常会使用到的一些功能,主要是批处理、Swagger2和数据校验等。
批处理Spring Batch简介 Spring Batch是一个开源的、全面的、轻量级的批处理框架,通过Spring Batch可以实现强大的批处理应用程序的开发。Spring Batch还提供记录/跟踪、事务管理、作业处理统计、作业重启以及资源管理等功能。Spring Batch结合定时任务可以发挥更大的作用。 Spring Batch提供了ItemReader、ItemProcessor和ItemWriter来完成数据的读取、处理以及写出操作,并且可以将批处理的执行状态持久化到数据库中。接下来通过一个简单的数据复制来学习如何在SpringBoot中如何使用Spring Batch。
整合SpringBoot案例说明,现在有一个data.csv文件,该文件保存了5条用户数据,现要求通过批处理框架来读取data.csv文件,进而将其插入到数据表中。data.csv文件的内容为:
123456id username address gender1 张三 深圳 男2 李四 广州 男3 王 ...
企业开发常用功能(上)
本篇来学习在企业开发过程中经常会使用到的一些功能,如邮件发送、定时任务等功能。
邮件发送邮件发送是一个非常常见的功能,注册时的身份认证、重要通知发送等都会使用到邮件来发送。Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐, Spring中提供了JavaMailSender用来简化邮件配置,而SpringBoot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。接来下就来看看如何在SpringBoot中发送邮件。
发送前的准备注意本篇以QQ邮箱为例,向读者介绍邮件的发送过程。使用QQ邮件发送邮件,首先要申请开通POP3/SMTP服务或者IMAP/SMTP服务。可以看到无论是哪种都需要使用SMTP协议,SMTP全称Simple Mail Transfer Protocol,也就是简单邮件传输协议,它定义了邮件客户端软件与SMTP服务器之间,以及SMTP服务器与SMTP服务器之间的通信规则。举个例子,用户(test@qq.com)先将邮件投递到腾讯的SMTP服务器,这个过程就使用了SMTP协议,然后腾讯的SMTP服务器将邮件投递到网易的S ...
消息服务
本篇来学习消息服务相关的知识,消息服务在一些大型的项目架构中才会使用,但是对于小项目也是可以使用的。
消息队列(Message Queue)是一种进程间或者线程间的异步通信方式,使用消息队列,消息生产者在产生消息后,会将消息保存在消息队列中 ,直到消息消费者来取走它,即消息的发送者和接收者不需要同时与消息队列交互。使用消息队列可以有效实现服务的解耦,并提供系统的可靠性以及扩展性。目前开源的消息队列服务非常多,如Apache ActiveMQ、RabbitMQ等,这些产品也就是常说的消息中间件。
JMSJMS简介JMS(Java Message Service)即Java消息服务,它通过统一Java API层面的标准,使得多个客户端可以通过JMS进行交互,大部分的消息中间件提供商都对JMS提供支持。JMS和ActiveMQ的关系就像是JDBC和JDBC驱动一样的关系。JMS包括两种消息模型:点对点和发布者/订阅者,同时JMS仅仅支持Java平台。
SpringBoot整合JMS由于JMS只是一套标准,因此SpringBoot整合JMS必然是整合JMS的某一个实现,本例子以ActiveMQ ...
整合WebSocket
本篇来学习如何在SpringBoot中整合WebSocket,如果你之前没有使用过WebSocket,那么就有一个疑问,为什么需要使用WebSocket,以及它能做什么事情,这些当你阅读完本篇文章后,都会有一个较为清晰的答案。
为什么需要WebSocket在HTTP协议中,所有的请求都是由客户端发起的,由服务端进行响应,服务端无法向客户端推送消息,但是在一些需要即时通信的应用中,又不可避免的需要服务端向客户端推送消息,传统的解决方案主要有如下几种:
1、轮询。轮询是最简单的一种解决方案,所谓轮询就是客户端在固定的时候间隔下不停地向服务端发送请求,查看服务段是否有最新的数据,若服务端有最新的数据,则返回给客户端;若服务端没有最新数据,则返回一个空的JSON或者XML文档。轮询对于开发人员而言实现起来非常方便,但是弊端也很明显:客户端每次都要新建HTTP请求,服务端要处理大量的无效请求,在高并发场景下会严重拖慢服务端的运行效率,同时服务端的资源被极大的浪费了,因此这种方式在实际开发中并不可取,不到万不得已不会使用这种方式。2、长轮询。长轮询是对传统轮询的升级,开发人员看到传统轮询存在的弊端 ...
安全管理之Shiro
本篇来学习OAuth2和Shiro相关知识以如何在SpringBoot框架中使用它们。
OAuth2OAuth2简介OAuth是一个开放标准,该标准允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如头像、照片、视频等〉,而在这个过程中无须将用户名和密码提供给第三方应用。实现这一功能是通过提供一个令牌(token),而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站在特定的时段内访问特定的资源。这样,OAuth让用户可以授权第三方网站灵活地访问存储在另外一些资源服务器的特定信息,而非所有内容。例如,用户想通过QQ登录知乎,这时知乎就是一个第三方应用,知乎要访问用户的一些基本信息就需要得到用户的授权,如果用户把自己的QQ用户名和密码告诉知乎,那么知乎就能访问用户的所有数据,并且只有用户修改密码才能收回授权,这种授权方式安全隐患很大,如果使用OAuth,就能很好地解决这一问题。
采用令牌的方式可以让用户灵活地对第三方应用授权或者收回权限。OAuth2是OAuth协议的下一版本,但不向下兼容OAuth1.0 。OAuth2关注客户端开发者的简易性,同 ...
