自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Spring中的设计模式

1 简单工厂模式用途 BeanFactory简单来说就是让工厂给我生产一个类,具体生产的是哪个子类实例,我并不不关心User user = (User) beanFactory.getBean("user");2 工厂方法模式用途 FactoryBean简单工厂模式是让工厂生产一个类,而工厂方法模式需要先建造一个工厂,然后用它来生产自己需要的类。class User...

2020-03-03 21:20:37 128 1

原创 写一个RPC框架弄懂Dubbo原理

首先看图我们希望在客户端中调用接口EchoService的echo方法,但是客户端项目并没有加入实现类EchoServiceImpl的依赖,接口甚至无法实例化,更别提调用方法了。那么第一步先解决客户端中接口实例化的问题...

2020-03-02 14:03:30 178

原创 重温设计模式之中介者模式

中介者模式 Mediator Pattern用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。生活中我们经常会需要中介,比如租房找房产中介要比自己找要方便的多。再如订外卖,如果没有外卖平台,就要保存很多的外卖菜单,即使这样也会因为消息不及时而错过一些新店开业的优惠。而对餐馆来说,想加几样新菜要么是等别人订餐...

2019-11-02 16:43:53 102

原创 重温设计模式之命令模式

命令模式 Command Pattern将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。小明的西餐店正式开业了,为了提高点餐体验和效率,他凭借程序员的经验,引入设计模式来设计点餐流程。这次,用到的是命令模式。看图:命令模式的优点是降低请求者(Waiter)和接收者(Chef)的耦合度,服务员知道菜单就可以了,...

2019-10-29 20:15:39 81

原创 重温设计模式之备忘录模式

备忘录模式 Memento Pattern在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。小明开披萨外卖店攒了一点钱,开始动心想开一家真正的西餐厅,不过这是一笔大投资,弄不好会赔掉全部积蓄,还要搭上时间。如果人生失败后能重来就好了。正在纠结的时候,忽然天上来了一位仙人,对他说:孩子,你尽管大胆的去尝试吧,如果失败了,我来帮你回到现在。嗯,让我先保...

2019-10-24 23:22:10 72

原创 重温设计模式之桥接模式

桥接模式 Bridge Pattern将抽象部分与实现部分分离,使它们都可以独立的变化。小明的披萨外卖店生意越来越好,制作披萨的速度已经赶不上订单的速度,小明决定买几台自动披萨机来代替人工。一番考察后,M品牌的披萨机和符合小明的需求。它有制作不同口味的多种机器,每种机器都可以更换大中小三种烤箱,分别烤出12寸、9寸和6寸的披萨。以后如果有新口味的要求,再买一台新披萨机就可以,原来的...

2019-10-24 20:06:15 60

原创 重温设计模式之状态模式

状态模式 State Pattern允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。在生产流水线上,每个岗位的工人完成自己的步骤后,产品状态发生变化,工人会交给下一环节处理。如果用代码来描述一条披萨生产流水线,可以用状态模式。Pizza类为Context角色,它封装了客户端感兴趣的处理和查看状态接口,并将与状态相关的操作委托给当前状态对象(Cook)来处理。...

2019-10-23 23:05:44 71

原创 重温设计模式之模板方法模式

模板方法模式 Template Pattern定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。回到小明的披萨店。见建造者模式经营一段时间后,小明开始思考如何降低人力成本,他意识到,如果能够通过规则保证每个步骤的正确执行,就不需要额外的监督员;而且制作披萨的加芝士和烘焙步骤,两种披萨是一样的,是否可以考虑合...

2019-10-21 11:07:30 69

原创 重温设计模式之适配器模式

适配器模式 Adapter Pattern将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。中国的标准电压是220V,但是很多国家如美国、日本是110V,去这些国家旅行时为了能给手机等设备充电,需要准备一个转换器,把110V电压转换为220V电压,这就是一种适配器模式。那么在外观模式中提到的万能读卡器算不算适配器模式呢?...

2019-10-20 12:14:19 55

原创 重温设计模式之组合模式

组合模式 Composite Pattern将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式用于构建树形结构,如文件目录、组织关系等。关键代码是继承父类并且包含一个父类的集合。UML图:代码:import java.util.ArrayList;import java.util.List;publ...

2019-10-19 20:41:52 64

原创 重温设计模式之代理模式

代理模式 Proxy Pattern为其他对象提供一种代理以控制对这个对象的访问。在部署Web应用时,通常都会使用Nginx作为反向代理,这种模式下,在浏览器看来把HTTP请求发给Nginx和Tomcat得到的结果是相同的。UML图:代码:public interface WebServer { String getHttp();}public clas...

2019-10-17 21:16:18 54

原创 重温设计模式之外观模式

外观模式 或称门面模式Facade Pattern为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。万能读卡器是一个外观模式在生活中的应用。便携存储卡有SD卡、CF卡、TF卡等多种类型,想让电脑支持所有的卡类型,需要预设一排各种各样的接口。使用万能读卡器后,只要设置USB接口就可以了。如果用代码来描述这一过程,就是标准的...

2019-10-17 20:29:40 51

原创 重温设计模式之原型模式

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。如果玩过魔兽争霸3都知道剑圣有一个技能叫镜像,分裂出两个和自身属性一样的假剑圣,只是没有攻击力。考虑一下创建假剑圣的过程,剑圣有等级、力量、敏捷、智力等可变属性,如果用new的方式创建,则需要把每个属性重新设置一遍。BladeMaster fake1 = new BladeMaster();fake1.setLeve...

2019-10-16 19:27:16 52

原创 重温设计模式之观察者模式

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。需求:在用户上线时,有各种各样的事情要处理:发一封欢迎信、增加登录积分、查询未读邮件数做提示、提醒修改密码,并且随时会增加新的需求或者删除过时功能。UML图:代码:public class LoginEvent extends EventObject { pub...

2019-10-15 21:15:24 49

原创 重温设计模式之建造者模式

将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。看做外卖生意赚钱容易,小明也开了一家披萨外卖店。做披萨通常需要制作面饼、加馅料、加调味酱、加芝士和烘焙5个步骤,为了提高效率,小明组建了“披萨流水线”,每条流水线5个人,分别负责5个步骤;两组流水线分别制作水果披萨和海鲜披萨。为了协调流水线的生成,保证每个步骤都被执行到位,小明又聘请了专门的监督员来监督整个制作过程。...

2019-10-14 20:49:40 65

原创 重温设计模式之策略模式

定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。假设需求是做数组排序,但是需求方并没有想好用哪种算法,为了应对自如,我们先写好冒泡、归并和快速三种算法,并且通过设计模式让客户端可以随意替换。UML图:代码:public interface Sorter { void sort(int[] numbers);}public class B...

2019-10-13 18:32:06 86

原创 重温设计模式之装饰(器)模式

动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。以用滤镜处理图片的行为模式为例,其特点是:1 滤镜有多种且可持续增加新类型2 用户加滤镜的顺序是随机的3 每次加滤镜需要叠加之前滤镜的效果如果用装饰模式来表现,那么UML图是:代码:public interface Picture { void show();}pub...

2019-10-12 10:55:09 56

原创 重温设计模式之单例模式

保证一个类仅有一个实例,并提供一个访问它的全局访问点。UML图:实现代码:懒汉式public class LazySingleton { private static LazySingleton instance; private static Object lock = new Object(); private LazySingleton()...

2019-10-11 20:49:48 56

原创 重温设计模式之抽象工厂模式

在使用工厂方法模式时,如果工厂很多,那么在变更子类类型时就要修改多个工厂,复杂且容易出错。一个解决办法就是使用抽象工厂模式,建造一个生产工厂的工厂。抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。UML图:代码:public interface EmployeeDao { Employee selectById(int id);}...

2019-10-09 18:51:17 73

原创 重温设计模式之工厂(方法)模式

在简单工厂模式中,当增加新的实体对象时,需要修改工厂类的switch代码块,容易出错,违反开放-封闭原则。针对于此,可以改成为每个实体对象创建一个工厂类,即为工厂(方法)模式。UML图:代码:public interface EmployeeDao { Employee selectById(int id);}public class EmployeeDao...

2019-10-08 14:41:16 100

原创 重温设计模式之(简单)工厂模式

定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。常用场景: 多数据库实现、多种媒介的日志记录UML图:代码:public interface EmployeeDao { Employee selectById(int id);}public class EmployeeDaoMsSQLImpl imple...

2019-09-26 14:55:03 66

原创 ElasticSearch实战(八) QueryDSL

QueryDSL是Elasticsearch提供的JSON格式的领域特定语言,可以使用它来执行各种复杂查询。HTTP请求示例:GET /website/_search{ "query": { "match_all": {} }}Spring-data-elasticsearch代码示例:Request request = new Request("GET", "/...

2019-07-15 11:52:50 235

原创 ElasticSearch实战(七) API

创建索引Request request = new Request("PUT", "/something");request.setJsonEntity(settingsAndMapping);restClient.performRequest(request);settingsAndMapping{ "settings": { "index": { "search"...

2019-07-11 14:09:25 123

原创 ElasticSearch实战(六) 中文分词

前面处理的都是纯英文文本,英文使用空格分词,ES直接可以处理。如果搜索中文则需要另外安装插件。下载elasticsearch-analysis-ik插件https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.5.4/elasticsearch-analysis-ik-6.5.4.zip解压后获得el...

2019-07-09 14:02:41 328

原创 ElasticSearch实战(五) Term、Range和Bool查询

接下来处理精确查询的功能部分。如果使用上一章节的模糊查询来搜索John Smith,可以发现包含Smith的两个作者都会匹配到。这里既然是做精确查询,是假定只有John Smith会被匹配,而不会命中Jane Smith,这就要用到Term Query。下面的开始日期和结束日期、点赞数范围分别是对日期类型和整数类型的范围搜索,这里可以用Range Query。最后,当同时输入多个条...

2019-07-05 15:43:55 1976

原创 ElasticSearch实战(四) 匹配查询、高亮显示

接下来处理模糊查询功能匹配查询修改controller代码,如果传入的keyword不是空值,则改为使用匹配查询 @RequestMapping("/blogs") public String query(Model model, String keyword, Integer pageNum, Integer pageSize) { if(pag...

2019-07-05 11:03:32 2290 2

原创 ElasticSearch实战(三) 空查询、分页

接下来实现读取数据并在网页上以列表形式显示的功能。首先添加一些测试数据:List<IndexQuery> indexQueries = Arrays.asList( new IndexQueryBuilder().withObject(new Blog(1, "Mary Jones", "Jane is an expert in her field...

2019-07-04 17:37:02 296

原创 ElasticSearch实战(二) 索引、类型、映射

在插入一条Blog后,使用浏览器打开 http://localhost:9200/website/_mapping/blog?pretty 显示信息如下:{ "website": { "mappings": { "blog": { "properties": { "author": { "type": "text", "fields": ...

2019-07-02 20:26:06 269

原创 ElasticSearch实战(一)

首先看要实现的功能,如下图:<1> 支持模糊查询<2>支持查询匹配的关键字高亮显示<3>支持点赞功能,即修改文档<4>支持查询结果分页<5>支持指定字段精确匹配;支持日期和数值类的范围查询下面用ElasticSearch(以下简称ES)一一实现上述功能。准备工作一、搭建ElasticSearch Wind...

2019-07-01 17:00:36 960

原创 RocketMQ教程(四) - 常见问题

目录(一)基础(二)进阶(三)高可用部署(四)常见问题正文1MQClientException: No route info of this topic, test()发生场景Producer发送消息可能原因A. Broker没有成功连接NameServer -> 通过telnet命令检查从Broker Server到NameServer的网络连接是否正常B...

2019-06-18 14:57:49 1693

原创 RocketMQ教程(三) - 高可用部署

目录(一)基础(二)进阶(三)高可用部署(四)常见问题正文这里采用双主双从的配置,选择Linux系统,并假定两台服务器的私有IP分别为192.168.0.1和192.168.0.2。下载http://rocketmq.apache.org/dowloading/releases/解压unzip rocketmq-all-4.5.0-bin-release.zip分...

2019-06-18 14:18:21 2433

原创 Spring Cloud Alibaba实战(八) - Dubbo + Nacos

目录(一)Nacos动态配置(二)Nacos注册中心(三)Sentinel之限流(四)Sentinel之熔断(五)Gateway之路由、限流(六)Gateway之鉴权、日志(七)Gateway搭配Nacos实现动态路由(八)Dubbo + Nacos正文通常来说,RPC协议比REST具有更好的性能,服务的内部调用可以考虑使用RPC方式来提高效率。下面来改造account和payment...

2019-06-12 14:35:49 13109 5

原创 Spring Cloud Alibaba实战(七) - Gateway搭配Nacos实现动态路由

目录(一)Nacos动态配置(二)Nacos注册中心(三)Sentinel之限流(四)Sentinel之熔断(五)Gateway之路由、限流(六)Gateway之鉴权、日志(七)Gateway搭配Nacos实现动态路由(八)Dubbo + Nacos正文在Spring Cloud Alibaba实战(五) - Gateway之路由、限流​中,路由信息定义在配置文件中,这种方式有一个...

2019-06-03 15:34:40 22012 29

原创 Spring Cloud Alibaba实战(六) - Gateway之鉴权、日志

目录(一)Nacos动态配置(二)Nacos注册中心(三)Sentinel之限流(四)Sentinel之熔断(五)Gateway之路由、限流(六)Gateway之鉴权、日志(七)Gateway搭配Nacos实现动态路由(八)Dubbo + Nacos正文在引入网关后,通常会把每个服务都要做的工作,诸如日志、安全验证等转移到网关处理以减少重复开发。1 加入log4j2这里使用lo...

2019-05-30 20:49:35 23968 4

原创 Spring Cloud Alibaba实战(五) - Gateway之路由、限流

目录(一)Nacos动态配置(二)Nacos注册中心(三)Sentinel之限流(四)Sentinel之熔断(五)Gateway之路由、限流(六)Gateway之鉴权、日志(七)Gateway搭配Nacos实现动态路由(八)Dubbo + Nacos正文在微服务架构中,网关的职责包括路由、鉴权、限流、日志、监控、灰度发布等,目前主流的方案有Neflix Zuul和Spring Clou...

2019-05-27 17:10:07 12429 9

原创 Spring Cloud Alibaba实战(四) - Sentinel之熔断

目录(一)Nacos动态配置(二)Nacos注册中心(三)Sentinel之限流(四)Sentinel之熔断(五)Gateway之路由、限流(六)Gateway之鉴权、日志(七)Gateway搭配Nacos实现动态路由(八)Dubbo + Nacos正文上一节中从服务生产者角度考虑,使用Sentinel对服务做了限流保护,那么从消费者角度上,需要考虑另一种情况。假设在用户登录时,为...

2019-05-21 20:57:22 5160 2

原创 Spring Cloud Alibaba实战(三) - Sentinel之限流

目录(一)Nacos动态配置(二)Nacos注册中心(三)Sentinel之限流(四)Sentinel之熔断(五)Gateway之路由、限流(六)Gateway之鉴权、日志(七)Gateway搭配Nacos实现动态路由(八)Dubbo + Nacos正文考虑充值是一项重要的功能,通常不希望因为查询余额接口调用过于频繁而导致充值功能不可用,现在引入Sentinel对payment-ser...

2019-05-21 16:47:27 6671 6

原创 Spring Cloud Alibaba实战(二) - Nacos注册中心

目录(一)Nacos动态配置(二)Nacos注册中心(三)Sentinel之限流(四)Sentinel之熔断(五)Gateway之路由、限流(六)Gateway之鉴权、日志(七)Gateway搭配Nacos实现动态路由(八)Dubbo + Nacos正文Nacos作为配置中心的表现可圈可点,下面继续探探作为注册中心的斤两。上一节编写了payment-service,提供查询余额接口...

2019-05-14 17:58:54 6827 5

原创 Spring Cloud Alibaba实战(一) - Nacos动态配置

目录(一)Nacos动态配置(二)Nacos注册中心(三)Sentinel之限流(四)Sentinel之熔断(五)Gateway之路由、限流(六)Gateway之鉴权、日志(七)Gateway搭配Nacos实现动态路由(八)Dubbo + Nacos正文前两年的Spring微服务世界,Netflix OSS一枝独秀,阿里巴巴仅有的Dubbo偶尔登场,通常也是被拿来衬托Netflix的优...

2019-05-13 17:33:59 13971 10

原创 基于Redis5的集群搭建和使用

1. 搭建下载并编译Rediscd /usr/localwget http://download.redis.io/releases/redis-5.0.4.tar.gztar xzf redis-5.0.4.tar.gzcd redis-5.0.4make创建配置文件mkdir cluster-confcd cluster-confmkdir 7000 7001...

2019-04-25 20:32:27 568

提示
确定要删除当前文章?
取消 删除