JavaEE
selt791
这个作者很懒,什么都没留下…
展开
-
那些年你不能错过的之【Redis】
1) 什么是 RedisRedis(Remote Dictionary Server)是一个使用C语言 编写的,开源的(BSD许可)高性能非关系型(NoSQL) 的键值对数据库Redis可以存储键和五种不同类型的值之间的映射。Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。所以读写速度非常快,因此Redis被广泛应用于缓存方向,每秒可以...转载 2020-04-29 23:48:04 · 470 阅读 · 0 评论 -
解决org.apache.zookeeper.KeeperException$UnimplementedException:KeeperErrorCode = Unimplemented for /S
主要原因是SpringCloud hoxton整合Zookerper3.5.3-beta作为注册中心的时候,与服务器版本不一致导致的,解决办法:这是我的Maven依赖:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spr...原创 2020-04-27 15:36:13 · 4028 阅读 · 1 评论 -
/apache-tomcat-9.0.33/bin/bootstrap.jar:/usr/local/apache-tomcat-9.0.33/bin/tomcat-juli.jar /usr/loc
解决方案:source /etc/profile原创 2020-04-09 18:15:30 · 930 阅读 · 0 评论 -
Kafka集群环境搭建
Kafka集群环境搭建服务器环境准备使用vm虚拟三个linux主机192.168.212.xxx192.168.212.xxx192.168.212.xxxZookeeper集群环境搭建1.每台服务器节点上安装jdk1.8环境 使用java-v命令测试2.每台服务器节点上安装Zookeeper1.下载并且安装zookeeper安装包wget https://mirrors...原创 2020-03-19 20:49:58 · 159 阅读 · 0 评论 -
RabbitMQ解决分布式事务问题
SpringBoot消息重试机制消息重试机制幂等性如何合适选择重试机制情况1: 消费者获取到消息后,调用第三方接口,但接口暂时无法访问,是否需要重试? 需要重试情况2: 消费者获取到消息后,抛出数据转换异常,是否需要重试? 不需要重试总结:对于情况2,如果消费者代码抛出异常是需要发布新版本才能解决的问...原创 2020-03-15 21:58:52 · 2147 阅读 · 1 评论 -
RabbitMQ消息确认机制
生产者发送消息出去之后,不知道到底有没有发送到RabbitMQ服务器, 默认是不知道的。而且有的时候我们在发送消息之后,后面的逻辑出问题了,我们不想要发送之前的消息了,需要撤回该怎么做。 解决方案: 1.AMQP 事务机制 2.Confirm 模式 事务模式: txSelect 将当前channel设置为transaction模式 txCommit 提交当前事务 txRoll...原创 2020-03-15 21:49:50 · 142 阅读 · 0 评论 -
RabbitMQ发布/订阅模式
发布订阅生产者public class ProducerFanout { private static final String EXCHANGE_NAME = "fanout_exchange"; public static void main(String[] args) throws IOException, TimeoutException { // 1.创建新的连接 ...原创 2020-03-15 21:17:16 · 245 阅读 · 0 评论 -
Java操作RabbitMQ
简单队列功能:一个生产者P发送消息到队列Q,一个消费者C接收P表示为生产者 、C表示为消费者 红色表示队列。Maven<dependencies> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId>...原创 2020-03-15 20:58:45 · 143 阅读 · 0 评论 -
分布式事务
分布式事务产生的背景在微服务环境下,因为会根据不同的业务会拆分成不同的服务,比如会员服务、订单服务、商品服务等,让专业的人做专业的事情,每个服务都有自己独立的数据库,并且是独立运行,互不影响。服务与服务之间通讯采用RPC远程调用技术,但是每个服务中都有自己独立的数据源,即自己独立的本地事务。两个服务相互通讯的时候,两个本地事务互不影响,从而出现分布式事务产生的原因。解决分布式事务基本思路A...原创 2020-03-15 19:34:09 · 286 阅读 · 0 评论 -
Dubbo
Dubbo产生的背景什么是Dubbo一款分布式服务框架高性能和透明化的RPC远程服务调用方案SOA服务治理方案每天为2千多个服务提供大于30亿次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点以及别的公司的业务中。Dubbo注册中心对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀;对于服务消费方,它最关心如何获取到它所需要的服务,而面对复杂的应...原创 2020-03-15 12:03:57 · 180 阅读 · 0 评论 -
SpringCloud
SpringCloud微服务课程说明网站架构演变过程传统架构传统的SSH架构,分为三层架构 web控制层、业务逻辑层、数据库访问层。传统架构也就是单点应用,就是大家在刚开始初学JavaEE技术的时候SSH架构或者SSM架构,业务没有进行拆分,都写同一个项目工程里面,一般是适合于个人或者是小团队开发。这种架构模式,一旦有一个模块导致服务不可用,可能会影响整个项目。分布式架构分布式架构基...原创 2020-03-13 22:31:14 · 149 阅读 · 0 评论 -
分布式锁解决方案
分布式锁一般有三种实现方式:数据库乐观锁;基于Redis的分布式锁;基于ZooKeeper的分布式锁基于zookeeper瞬时有序节点实现的分布式锁,其主要逻辑如下。大致思想即为:每个客户端对某个功能加锁时,在zookeeper上的与该功能对应的指定节点的目录下,生成一个唯一的瞬时有序节点。判断是否获取锁的方式很简单,只需要判断有序节点中序号最小的一个。当释放锁的时候,只需将这个瞬时节...原创 2020-03-10 18:48:54 · 300 阅读 · 0 评论 -
分布式任务调度平台
什么是定时任务指定时间去执行任务Java实现定时任务方式Threadpublic class Demo01 {static long count = 0;public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { w...原创 2020-03-10 18:42:06 · 439 阅读 · 0 评论 -
Zookeeper实现哨兵机制
master选举使用场景及结构 现在很多时候我们的服务需要7*24小时工作,假如一台机器挂了,我们希望能有其它机器顶替它继续工作。此类问题现在多采用master-salve模式,也就是常说的主从模式,正常情况下主机提供服务,备机负责监听主机状态,当主机异常时,可以自动切换到备机继续提供服务(这里有点儿类似于数据库主库跟备库,备机正常情况下只监听,不工作),这个切换过程中选出下一个主机的过程就是m...原创 2020-03-08 14:28:16 · 700 阅读 · 0 评论 -
网站跨域解决方案
什么是网站跨域跨域原因产生:在当前域名请求网站中,默认不允许通过ajax请求发送其他域名。网站跨域报错案例jquery-1.7.2.min.js?t=2017-07-27:4 Failed to load http://b.test.com:8081/ajaxB: No ‘Access-Control-Allow-Origin’ header is present on the reques...原创 2020-03-08 14:12:05 · 286 阅读 · 0 评论 -
分布式Session一致性问题
什么是SessionSession 是客户端与服务器通讯会话技术, 比如浏览器登陆、记录整个浏览会话信息Session实现原理客户对向服务器端发送请求后,Session 创建在服务器端,返回Sessionid给客户端浏览器保存在本地,当下次发送请求的时候,在请求头中传递sessionId获取对应的从服务器上获取对应的SesisonSession常见问题Session 保证在那里?答案:...原创 2020-03-08 13:54:57 · 120 阅读 · 0 评论 -
Zookeeper
什么是ZookeeperZookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过...原创 2020-03-07 11:35:31 · 145 阅读 · 0 评论 -
Redis
为什么要使用缓存缓存的分类客户端缓存页面缓存浏览器缓存App客户端缓存 网络缓存代理缓存CDN缓存服务器缓存数据库缓存平台缓存级缓存缓存最终的目的是为减轻服务端压力,减少网络传输请求基于Map集合实现本地缓存定义Map缓存工具类@Componentpublic class MapEhcaChe<K, V> {private Map<K, V>...原创 2020-03-07 11:17:59 · 199 阅读 · 1 评论 -
常见Web安全漏洞
XSS攻击什么是XSS攻击手段XSS攻击使用Javascript脚本注入进行攻击例如在提交表单后,展示到另一个页面,可能会受到XSS脚本注入,读取本地cookie远程发送给黑客服务器端。对应html源代码: <script>alert(‘sss’)</script>最好使用火狐浏览器演示效果如何防御XSS攻击将脚本特殊字符,转换成html源代码进行展示。...原创 2020-03-07 10:49:55 · 1030 阅读 · 1 评论 -
Web前端优化
使用网站动静分离架构减少Http请求的传输,CSS/JS合并传输,压缩JS、CSS技术使用浏览器缓存静态资源,减少服务器端压力使用CDN内容分发,减少宽带传输,获取用户Ip,分配到最近的服务器访问实战CDN内容分发DNS域名解析过程DNS即Domain Name System,是域名解析服务的意思。它在互联网的作用是:把域名转换成为网络可以识别的ip地址。人们习惯记忆域名,但机器间...原创 2020-03-07 10:05:12 · 139 阅读 · 0 评论 -
高并发服务降级
背景在今天,基于SOA的架构已经大行其道。伴随着架构的SOA化,相关联的服务熔断、降级、限流等思想,也在各种技术讲座中频繁出现。本文将结合Netflix开源的Hystrix框架,对这些思想做一个梳理。伴随着业务复杂性的提高,系统的不断拆分,一个面向用户端的API,其内部的RPC调用层层嵌套,调用链条可能会非常长。这会造成以下几个问题:API接口可用性降低引用Hystrix官方的一个例子,假...原创 2020-03-07 09:32:54 · 941 阅读 · 0 评论 -
高性能Nginx服务器
高并发与高可用实战补充基础知识DNS域名解析整个过程大体描述如下,其中前两个步骤是在本机完成的,后8个步骤涉及到真正的域名解析服务器:1、浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就结束。浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等,域名被缓存的时间限制可以通过TTL属性来设置。这个缓存时...原创 2020-03-02 21:52:40 · 1191 阅读 · 0 评论 -
SpringBoot热部署原理
spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间。其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的...原创 2020-03-02 21:34:57 · 2982 阅读 · 0 评论 -
RocketMQ学习笔记(十二)
样例1 基本样例在基本样例中我们提供如下的功能场景:使用RocketMQ发送三种类型的消息:同步消息、异步消息和单向消息。其中前两种消息是可靠的,因为会有发送是否成功的应答。使用RocketMQ来消费接收到的消息。1.1 加入依赖:maven:<dependency> <groupId>org.apache.rocketmq</groupI...转载 2020-02-29 15:40:38 · 672 阅读 · 0 评论 -
RocketMQ学习笔记(十一)
运维管理1 集群搭建1.1 单Master模式这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用。不建议线上环境使用,可以用于本地测试。1)启动 NameServer### 首先启动Name Server$ nohup sh mqnamesrv & ### 验证Name Server 是否启动成功$ tail -f ~/logs/rocketmq...转载 2020-02-29 15:39:15 · 495 阅读 · 0 评论 -
RocketMQ学习笔记(十)
特性(features)1 订阅与发布消息的发布是指某个生产者向某个topic发送消息;消息的订阅是指某个消费者关注了某个topic中带有某些tag的消息,进而从该topic消费数据。2 消息顺序消息有序指的是一类消息消费时,能按照发送的顺序来消费。例如:一个订单产生了三条消息分别是订单创建、订单付款、订单完成。消费时要按照这个顺序消费才能有意义,但是同时订单之间是可以并行消费的。Roc...转载 2020-02-29 15:38:05 · 164 阅读 · 0 评论 -
RocketMQ学习笔记(九)
设计(design)1 消息存储消息存储是RocketMQ中最为复杂和最为重要的一部分,本节将分别从RocketMQ的消息存储整体架构、PageCache与Mmap内存映射以及RocketMQ中两种不同的刷盘方式三方面来分别展开叙述。1.1 消息存储整体架构消息存储架构图中主要有下面三个跟消息存储相关的文件构成。(1) CommitLog:消息主体以及元数据的存储主体,存储Produ...转载 2020-02-29 15:36:53 · 269 阅读 · 0 评论 -
RocketMQ学习笔记(八)
基本概念1 消息模型(Message Model)RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Mess...转载 2020-02-29 15:31:26 · 198 阅读 · 0 评论 -
RocketMQ学习笔记(七)
最佳实践1 生产者1.1 发送消息注意事项1 Tags的使用一个应用尽可能用一个Topic,而消息子类型则可以用tags来标识。tags可以由应用自由设置,只有生产者在发送消息设置了tags,消费方在订阅消息时才可以利用tags通过broker做消息过滤:message.setTags(“TagA”)。2 Keys的使用每个消息在业务层面的唯一标识码要设置到keys字段,方便将...转载 2020-02-29 13:45:33 · 779 阅读 · 0 评论 -
RocketMQ学习笔记(六)
架构设计1 技术架构RocketMQ架构上主要分为四部分,如上图所示:Producer:消息发布的角色,支持分布式集群方式部署。Producer通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败并且低延迟。Consumer:消息消费的角色,支持分布式集群方式部署。支持以push推,pull拉两种模式对消息进行消费。同时也支持集群方式和广播方式...转载 2020-02-29 13:42:50 · 265 阅读 · 0 评论 -
RocketMQ学习笔记(五)
消息轨迹1. 消息轨迹数据关键属性Producer端Consumer端Broker端生产实例信息消费实例信息消息的Topic发送消息时间投递时间,投递轮次消息存储位置消息是否发送成功消息是否消费成功消息的Key值发送耗时消费耗时消息的Tag值2. 支持消息轨迹集群部署2.1 Broker端配置文件这里贴出Broker端开启消息...转载 2020-02-29 13:36:01 · 299 阅读 · 0 评论 -
基于SpringBoot2.0版本框架-引入&Web开发组件
一、 Spring介绍1.1、SpringBoot简介在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot来让你更易上手,更简单快捷地构建Spring应用!Spring Boot让我们的Spring应用变的更轻量化。比如:你可以仅仅依靠一个Java类来...原创 2020-02-27 20:16:45 · 490 阅读 · 0 评论 -
HashMap
创建Map接口public interface ExtMap<K, V> {// 向集合中插入数据public V put(K k, V v);// 根据k 从Map集合中查询元素public V get(K k);// 获取集合元素个数public int size();interface Entry<K, V> { K getKey(); V...原创 2020-02-27 19:54:24 · 105 阅读 · 0 评论 -
Map框架
HashMap的介绍HashMap的实现原理从底层结构、put和get方法、hash数组索引、扩容机制等几个方面来分析HashMap的实现原理:底层结构HashMap的底层结构是由数组+链表构成的。数组(紫色):hash数组(桶),数组元素是每个链表的头节点链表(绿色):解决hash冲突,不同的key映射到了数组的同一索引处,则形成链表。put和get方法put()方法大概过程如...原创 2020-02-27 19:51:22 · 420 阅读 · 0 评论 -
List框架
List集合代表一个有序集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List接口继承于Collection接口,它可以定义一个允许重复的有序集合。因为List中的元素是有序的,所以我们可以通过使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。List接口为Collection直接接...原创 2020-02-27 19:42:40 · 249 阅读 · 0 评论 -
Java集合框架
集合框架介绍说明:对于以上的框架图有如下几点说明1.所有集合类都位于java.util包下。Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。2. 集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。3. 抽象类:5个抽象类(长虚线表示),对集合接口的部分...原创 2020-02-27 19:32:09 · 101 阅读 · 0 评论 -
Mybatis框架
接口层-和数据库交互的方式MyBatis和数据库的交互有两种方式:使用传统的MyBatis提供的API;使用Mapper接口;使用Mapper接口MyBatis 将配置文件中的每一个 节点抽象为一个 Mapper 接口:这个接口中声明的方法和 节点中的<select|update|delete|insert> 节点项对应,即<select|update|delete|...原创 2020-02-27 19:25:55 · 127 阅读 · 0 评论 -
数据库连接池原理
基本原理在内部对象池中,维护一定数量的数据库连接,并对外暴露数据库连接的获取和返回方法。如外部使用者可通过getConnection方法获取数据库连接,使用完毕后再通过releaseConnection方法将连接返回,注意此时的连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。线程池作用①资源重用由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统...原创 2020-02-26 10:12:24 · 175 阅读 · 0 评论 -
SpringMVC原理
SpringMVC原理SpringMVC的运行流程⑴ 用户发送请求至前端控制器DispatcherServlet⑵ DispatcherServlet收到请求调用HandlerMapping处理器映射器。⑶ 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。⑷ DispatcherServlet通过Ha...原创 2020-02-26 10:07:17 · 167 阅读 · 0 评论 -
SpringIOC原理
XML技术什么是XML它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言。XML 全称为可扩展的标记语言。主要用于描述数据和用作配置文件。XML 文档在逻辑上主要由一下 5 个部分组成:XML 声明:指明所用 XML 的版本、文档的编码、文档的独立性信息文档类型声明:指出 XML 文档所用的 DTD元素:由开始标签、元素内容和结束标...原创 2020-02-26 09:57:42 · 108 阅读 · 0 评论