一文了解Docker的基本操作与使用
基本概念Docker 包括三个基本概念:
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
容器与镜像镜像是一种静态的结构,可以看成面向对象里面的类,而容器是镜像的一个实例。
镜像包含着容器运行时所需要的代码以及其它组件,它是一种分层结构,每一层都是只读的(read-only layers)。构建镜像时,会一层一层构建,前一层是后一层的基础。镜像的这种分层存储结构很适合镜像的复用以及定制。
构建容器时,通过在镜像的基础上添加一个可写层(writable layer),用来保存着容器运行过程中的修改。
解决的问题由于不同的机器有不同的操作系统,以及不 ...
ElasticSearch入门实战
基本概念文档 DocumentElasticsearch 是面向文档的,这意味着索引或搜索的最小数据单元是文档。
文档类似于关系数据库中的一行。不同之处在于索引中的每个文档可以具有不同的结构(字段),但是对于通用字段应该具有相同的数据类型。 MySQL => Databases =>Tables => Columns / Rows, ElasticSearch => Indices => Types =>具有属性的文档。
类型 type类型是文档的逻辑容器,类似于表格是行的容器。最好将不同结构的文档放入不同的类型中。
索引 index索引是大量的文档集合。 每个索引存储在磁盘上的同组文件中,它有一个定义多种类型的映射,索引存储了所有映射类型的字段。
分片 shard由于Elasticsearch是一个分布式搜索引擎,因此索引通常会拆分为分布在多个节点上的称为分片的元素。
IK分词器下载下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
安装将ik分词器的文件放入es目录下的 ...
ElasticSearch、Kibana安装教程
初始ElasticSearch关于ESElasticsearch是一个基于Lucene的搜索引擎。适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。是一个分布式、RESTful 风格的搜索和数据分析引擎。
下载下载网址:https://www.elastic.co/cn/elasticsearch
了解目录
bin:启动文件
config:配置文件
log4j2:日志配置文件
jvm.options:java虚拟机相关配置
elasticsearch.yml:elasticsearch的配置文件(默认端口:9200)
lib:相关jar包
logs:日志
modules:功能模块
plugins:插件(比如 ik 分词器)
启动启动 elasticsearch.bat,并访问 localhost:9200
解决跨域:
打开 elasticsearch.yml(添加以下代码)
12http.cors.enabled: true //开启跨域支持http.cors.allow-origin: "*" //允许所有访 ...
设计模式——观察者模式
定义定义对象之间的一对多依赖,当一个对象状态改变时,它的所有依赖都会收到通知并且自动更新状态。
主题(Subject)是被观察的对象,而其所有依赖者(Observer)称为观察者。
类关系主题(Subject)具有注册和移除观察者、并通知所有观察者的功能,主题是通过维护一张观察者列表来实现这些操作的。
观察者(Observer)的注册功能需要调用主题的 registerObserver() 方法。
1、创建主题定义123456789public interface Subject { // 订阅 void subscribe(EventListener eventListener); // 取消订阅 void unsubscribe(EventListener eventListener); // 通知观察者 void notifyObserver();}
2、定义具体主题创建主题的具体实现,并且构建一个容器来维护订阅关系,支持添加删除关系,以及通知订阅者。
12345678910111213141516171819202122 ...
设计模式——模板方法模式
定义
定义算法框架,并将一些步骤的实现延迟到子类。
通过模板方法,子类可以重新定义算法的某些步骤,而不用改变算法的结构。
目的1、使用模版方法模式的目的是避免编写重复代码,以便开发人员可以专注于核心业务逻辑的实现
2、解决接口与接口实现类之间继承矛盾问题
类关系
AbstractTemplate(抽象模版):定义一系列抽象方法,或者实现的方法,又或者是钩子方法。即:定义流程
ConcreteTemplate(具体模版):实现父类抽象方法,基于本身不同的模版业务逻辑,实现不同的业务逻辑代码。即:抽象方法实现相同,内部逻辑不同
1、定义模板123456789101112131415161718192021222324252627// 工作流模板public abstract class WorkFlow { final void doWorkFlow() { initial(); firstProcess(); secondProcess(); end(); } // 初始化 ...
设计模式——工厂模式
分类
简单工厂模式
工厂方法模式
抽象工厂模式
简单工厂模式作用:在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。
简单工厂把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。
这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类。客户类往往有多个,如果不使用简单工厂,那么所有的客户类都要知道所有子类的细节。而且一旦子类发生改变,例如增加子类,那么所有的客户类都要进行修改。
1、创建父类或父接口12345678910111213141516171819public class Product { private String productName; public String getProductName() { return productName; } public void setProductName(String productName) { this.productName ...
设计模式——单例模式
作用:单例模式主要解决的是,防止一个全局使用的类频繁的创建和消费,从而提升提升整体的代码的性能。
特点:单例模式有一个特点就是不允许外部直接创建,因此在默认的构造函数上添加了私有属性 private。
懒汉式(线程不安全)1234567891011121314151617181920/** * 懒汉式 */public class Lazy { private static Lazy instance; /** * 私有构造方法,防止被实例化 */ private Lazy(){ } public static Lazy getInstance(){ if(instance == null){ instance = new Lazy(); } return instance; }}
优点:延迟加载,真正用的时候才实例化对象,提高了资源的利用率
缺点:存在并发访问的问题(可能进行了多次 ...
RocketMQ实战与最佳实践
实战应用maven依赖
12345<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.9.1</version></dependency>
普通消息消息发送1、Producer端发送同步消息这种可靠性同步地发送方式使用的比较广泛,比如:重要的消息通知,短信通知。
123456789101112131415161718public static void syncProducer() throws Exception{ // 实例化消息生产者Producer DefaultMQProducer producer = new DefaultMQProducer("Group_A"); // 设置NameServer的地址 producer.setNamesrvAdd ...
RocketMQ底层设计与原理
RocketMQ的消息模型消息模型 Message ModelRocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Message Queue 用于存储消息的物理地址,每个Topic中的消息地址存储于多个 Message Queue 中。ConsumerGroup 由多个Consumer 实例构成。
消息 Message消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。RocketMQ中每个消息拥有唯一的Message ID,且可以携带具有业务标识的Key。系统提供了通过Message ID和Key查询消息的功能。
主题 Topic表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。
Topic 与生产者和消费者的关 ...
初识RocketMQ——基本概念以及安装启动
RocketMQ 是一个 队列模型 的消息中间件,具有高性能、高可靠、高实时、分布式 的特点。
基本概念核心组成RocketMQ的四大核心组成部分:NameServer、Broker、Producer以及Consumer
名字服务 NameServer作为注册中心,主要负责对于源数据的管理,提供Broker管理以及路由信息管理。
名称服务充当路由消息的提供者。生产者或消费者能够通过名字服务查找各主题相应的Broker IP列表。多个Namesrv实例组成集群,每个NameServer节点相互独立,没有信息交换。
每个 Broker 在启动的时候会将信息注册到 NameServer ,Producer 在发送消息前会根据 Topic 到 NameServer 获取到 Broker 的路由信息,Consumer 也会定时获取 Topic 的路由信息。
代理服务器 Broker消息中转角色,负责存储消息、转发消息。代理服务器在RocketMQ系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备。代理服务器也存储消息相关的元数据,包括消费者组、消费进度偏移和主题和队列消息 ...