自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小怪的博客

努力让自己不平庸

  • 博客(80)
  • 收藏
  • 关注

原创 (十四) Docker容器重量级监控: CAdvisor+InfluxDB+Granfana

Docker CIG监控

2023-02-07 01:17:51 569

原创 (十三) Docker轻量级可视化工具Portainer

docker可视化工具Portainer的使用

2023-02-04 18:47:56 690

原创 (十二) Docker-compose容器编排

docker compose

2023-02-03 19:40:15 904

原创 解决Rediis客户端无法连接服务器上Redis服务问题

Redis Manager连接不上的解决方法

2023-01-29 17:24:42 668

原创 (十一) Docker network

在Docker启动后,服务器网络会多一个docker0的虚拟网桥(就是通过这个来进行与主机或者其他容器进行网络通信的连接,理解为交换机,类似于将一台主机通过网线接入到物理交换机。当接收到数据时,Bridge 就会根据数据帧中的 MAC 地址进行广播、转发或过滤处理 )lo代表127.0.0.1,即localhost,inet addr用来表示网卡的IP地址bridge模式:使用 --network bridge 指定,默认使用 docker0host模式:使用 --network host 指定。

2023-01-03 22:57:35 1941

原创 (十) Docker微服务实战

也就是执行这个 touch 命令(对于已存在的文件修改这个文件的访问时间以及修改时间为当前时间,而不会修改文件的内容,没有文件就创建一个新的文件,其实这行命令也没啥用)记得放行安全组以及防火墙端口。打 jar 包上传到服务器。

2022-12-31 21:52:57 1065 8

原创 (九) DockerFile

Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本官网:构造三步骤编写Dockerfile文件docker build命令构建镜像docker run依镜像运行容器实例从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段Dockerfile是软件的原材料Docker镜像是软件的交付品Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例。

2022-12-31 20:51:08 946 2

原创 (八) mysql主从以及Redis集群

原来规划好的节点,进行扩容或者缩容就比较麻烦了额,不管扩缩,每次数据变动导致节点有变动,映射关系需要重新进行计算,在服务器个数固定不变时没有问题,如果需要弹性扩容或故障停机的情况下,原来的取模公式就会发生变化:Hash(key)/3会变成Hash(key) /?==这里假设新增或者删除某个节点,槽会按照你定的分配策略重新分配给节点,然后原有的槽中的数据会一起带着迁移,这样就可以有效的防止数据倾斜问题,不便的就是槽的从新分配以及数据的迁移 ==集群会记录节点和槽的对应关系。

2022-12-19 17:24:55 1399

原创 (七) Docker安装常规软件

3、docker images查看是否有拉取到的tomcat参数可能没有映射端口或者防火墙没有开端口,或者云服务器没有开安全组把webapps.dist目录换成webapps因为新版的Tomcat的webapps目录是空的,我们给它删了并且给文件夹webapps.dist更名DockerHub官网命令运行前检查下是否有端口冲突,防止mysql已经在宿主机上运行了占用端口docker上默认字符集编码隐患docker里面的mysql容器实例查看,内容如下:默认数据库的编码是 拉丁

2022-12-07 18:26:38 970

原创 (六) Docker容器数据卷

容器卷记得加入Docker挂载主机目录访问如果出现错误信息:解决办法:在挂载目录后多加一个参数即可就是提高容器的权限,可以挂载宿主机目录如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,在SELinux里面挂载目录被禁止掉了,如果要开启,我们一般使用–privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一

2022-12-07 15:10:50 1563 1

原创 (五)本地镜像发布到阿里云仓库以及私有库

登录阿里云控制台,创建自己的个人实例,如下在我们仓库的管理里面有相关镜像操作命令,你就可以直接使用默认情况,仓库被创建在容器的目录下,建议自行用容器卷映射,方便于宿主机联调从Hub上下载ubuntu镜像到本地并成功运行原始的Ubuntu镜像是不带着ifconfig命令的安装ifconfig命令并测试通过docker容器内执行上述两条命令:安装完成后,commit我们自己的新镜像命令:在容器外执行启动我们的新镜像并和原来的对比官网是默认下载的Ubuntu没有ifconfig命令我们

2022-12-06 21:19:35 411

原创 (四) Docker镜像

是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(un

2022-12-06 16:34:29 564

原创 (三) Docker常用命令

二、镜像命令2.1、列出本地主机上的镜像这里这个镜像列表的表头各个参数的含义:同一仓库源可以有多个 TAG版本,代表这个仓库源的不同个版本,我们使用 来定义不同的镜像。如果你不指定一个镜像的版本标签,例如你只使用 mysql,docker 将默认使用 mysql:latest 镜像,也就是最新版本,你可以将这个tag改成你想要使用的版本就可以下载对应版本。它会去本地仓库以及远程仓库查找,因为我们配置了阿里镜像仓库,所以查找远程仓库时就会去阿里仓库查找,没有配置就会去官方仓库查找这里各个表头的含义

2022-12-06 15:30:45 14094

原创 (二) Docker安装

进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,需要啥加载啥,省略了返回过程,因此新建一个docker容器只需要几秒钟。由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。CentOS 仅发行版本中的内核支持 Docker。2)docker利用的是宿主机的内核,而不需要加载操作系统OS内核。

2022-11-27 20:29:12 520

原创 (十二) RabbitMQ - 幂等性、优先级、惰性

即使是持久化的消息,在被写入磁盘的同时也会在内存中驻留一份备份。但是,商家对我们来说,肯定是要分大客户和小客户的对吧,比如像苹果,小米这样大商家一年起码能给我们创造很大的利润,所以理应当然,他们的订单必须得到优先处理,而曾经我们的后端系统是使用 redis 来存放的定时轮询,大家都知道 redis 只能用 List 做一个简简单单的消息队列,并不能实现一个优先级的场景,所以订单量大了后采用 RabbitMQ 进行改造和优化,如果发现是大客户的订单给一个相对比较高的优先级, 否则就是默认优先级。

2022-11-26 19:13:11 253

原创 (十一)发布确认深入

当RabbitMQ宕机后, 重启期间生产者消息投递失败,导致消息丢失,需要手动处理和恢复。这是比较麻烦,所以该怎样才能使 RabbitMQ 的消息可靠投递呢?特别是在这样比较极端的情况,RabbitMQ 集群不可用的时候,无法投递的消息该如何处理呢?

2022-11-26 17:46:29 182

原创 (十)延迟队列

使用 RabbitMQ 来实现延时队列可以很好的利用RabbitMQ 的特性,如:消息可靠发送、消息可靠投递、死信队列来保障消息至少被消费一次以及未被正确处理的消息不会被丢弃。另外,通过 RabbitMQ 集群的特性,可以很好的解决单点故障问题,不会因为单个节点挂掉导致延时队列不可用或者消息丢失。当然,延时队列还有很多其它选择,比如利用 Java 的 DelayQueue,利用 Redis 的 zset,利用 Quartz或者利用 kafka 的时间轮,这些方式各有特点,看需要适用的场景。

2022-11-26 15:05:31 1244

原创 (十)死信队列

*应用场景:**为了保证订单业务的消息数据不丢失,需要使用到 RabbitMQ 的死信队列机制,当消息消费发生异常时,将消息投入死信队列中.还有比如说: 用户在商城下单成功并点击去支付后在指定时间未支付时自动失效,这种就放入死信队列进行处理。只需要启动消费者01再宕机,然后启动生产者发消息,消息内容就会从普通队列到死信队列。声明队列的时候设置参数就行如下。消费者1 (最复杂的)

2022-11-25 16:20:59 1099

原创 (九)RabbitMQ交换机(Exchange)

binding 其实是 exchange 和 queue 之间的桥梁,它告诉我们 exchange 和哪个队列进行了绑定关系。到它绑定的所有队列中,也就是关于routingKey他不管。topic 交换机的消息的 routing_key 不能随意写,必须满足一定的要求,它。,交换机工作的内容非常简单,一方面它接收来自生产者的消息,另一方面将它们推入队列。也就是队列名称随机产生,一旦我们断开了消费者的连接,队列将被自动删除,也没有持久化。队列只对它绑定的交换机的消息感兴趣。,这里用的就是默认的交换机。

2022-11-25 14:50:08 1244

原创 (八)RabbitMQ发布确认

一旦消息被投递到所有匹配的队列之后,broker 就会发送一个确认给生产者(包含消息的唯一 ID),这就使得生产者知道消息已经正确到达目的队列了,如果消息和队列是可持久化的,那么确认消息会在将消息写入磁盘之后发出,broker 回传给生产者的确认消息中 delivery-tag 域包含了确认消息的序列号,此外 broker 也可以设置basic.ack 的multiple 域,表示到这个序列号之前的所有消息都已经得到了处理。与单个等待确认消息相比,先发布一批消息然后一起确认可以。

2022-11-24 19:07:59 565

原创 (七)RabbitMQ持久化

一旦数量达到配置的数量,RabbitMQ 将停止在通道上传递更多消息,除非至少有一个未处理的消息被确认,例如,假设在通道上有未确认的消息 5、6、7,8,并且通道的预取计数设置为 4,此时RabbitMQ 将不会在该通道上再传递任何消息,除非至少有一个未应答的消息被 ack。比方说 tag=6 这个消息刚刚被确认 ACK,RabbitMQ 将会感知这个情况到并再发送一条消息。消息应答和 QoS 预取值对用户吞吐量有重大影响。常增加预取将提高向消费者传递消息的速度。虽然自动应答传输消息速率是最佳的,但是,

2022-11-24 15:58:08 1752

原创 (六)RabbitMQ第二种模型:工作模型(Work Queues)

(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。

2022-11-24 14:25:57 394

原创 (五)RabbitMQ第一种模型:简单模型

MQ简单队列模式

2022-11-11 17:35:36 404

原创 (四)RabbitMQ安装

官网下载地址官网:https://www.rabbitmq.com官网有很多种安装方式,也很详细,这是RPM包的方式安装,github有点卡,自己挂梯子进下面这个地址。这里有很多的版本,我使用的是RPM包地址:https://github.com/rabbitmq/rabbitmq-server/releases上传服务器,这里我是没有software这个文件夹的,自己建了一个,如下图然后将所需要的包上传上去。...

2022-08-17 19:55:45 250

原创 (三)RabbitMQ主要概念

Broker:接收和分发消息的应用,RabbitMQ Server 就是 Message BrokerVirtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。

2022-08-17 17:17:14 167

原创 (二)消息队列的特点介绍

消息队列的特点介绍一、消息队列的协议1.1、协议介绍1.2、网络协议的三要素1.3、AMQP协议1.4、MQTT协议1.5、OpenMessage协议1.6、Kafka协议1.7、小结二、消息队列持久化三、消息队列的分发策略四、消息队列高可用和高可靠一、消息队列的协议1.1、协议介绍我们知道消息中间件负责数据的传递、存储和分发消费三个部分,数据的存储和分发过程是要遵循协议的,我们是采用底层的TCP/IP协议还是UDP协议还是要自己构建,我们把这种规范称为协议所谓协议是指:1:计算机底层操作系统

2022-08-17 16:48:25 526

原创 通用返回类

import com.fasterxml.jackson.annotation.JsonIgnore;import io.swagger.annotations.ApiModel;import io.swagger.annotations.ApiModelProperty;import org.apache.commons.lang3.StringUtils;import java.io.Serializable;/** * @author 小怪 */@ApiModel("Return

2022-04-23 18:08:52 480

原创 Mysql 查看信息以及锁表查看方式

显示哪些线程正在运行SHOW FULL PROCESSLIST;-- 或者查询系统表信息加上 where 条件指定 数据库SELECT * FROM information_schema.`PROCESSLIST` p WHERE p.`DB` ='ph_server_db';id #ID标识,要kill一个语句的时候很有用use #当前连接用户host #显示这个连接从哪个ip的哪个端口上发出db #数据库名command #连接状态,.

2022-04-21 09:34:44 1130

原创 日期的工具类

import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.Locale;/** * @author XiaoGuai */public class DateUtils { /** * 获取过去的天数 * @param date * @return .

2022-04-13 09:52:44 253

原创 移除元素(数组)

问题给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。示例 2: 给定 nums = [0,1,2,2,3,0,4.

2022-04-12 16:38:03 1969 2

原创 二分查找(数组)

问题给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。前提(必须):数组有序,数组中无重复元素示例输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4 实现/** * 二分法 * * @param arr * @p.

2022-04-11 16:14:00 193

原创 List里的内容拼接

List < Integer >if(!CollectionUtils.isEmpty()){List<Integer> failList = new ArrayList<>();failList.add(1);failList.add(2);failList.add(3);String msg = failList.stream().map(String::valueOf).collect(Collectors.joining(","));System.

2022-03-31 09:28:09 1833

原创 Cron表达式

Java中例 “0 0 12 ? * WED” 在每星期三下午12:00 执行Seconds (秒) :可以用数字0-59 表示,Minutes(分) :可以用数字0-59 表示,Hours(时) :可以用数字0-23表示,Day-of-Month(天) :可以用数字1-31 中的任一一个值,但要注意一些特别的月份Month(月) :可以用0-11 或用字符串 “JAN, FEB, MAR.

2022-03-30 10:43:00 151

原创 response的返回方法

常用的返回类方法// 返回 json Listpublic void returnJsonList(BatchRespBean batchRespBean) { PrintWriter out = null; try { response.setContentType("application/json;charset=UTF-8"); response.setHeader("Cache-Control", "no-cache"); out = response.getWr.

2022-03-26 10:32:45 5652

原创 枚举类的一般样式

常用package com.scoreone.ap.enums;import lombok.Getter;import java.util.Arrays;/** * 钉钉推送消息的类型枚举 */@Getterpublic enum DingDingTypeEnum { SYSMONIT("0","系统监控"), APPDATA("1","业务数据监控"); private final String type; private final St.

2022-03-24 17:27:31 449

原创 一、ElasticSearch安装

ElasticSearch入门一、环境准备一、环境准备官网下载地址(版本是 7.8.0):https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-8-0#设置JVM初始内存为1G。此值可以设置与-Xmx,相同,以避免每次垃圾回收完成后JVM重新分配内存# Xms represents the initial size of total heap space#设置JVM最大可用内存为1G# Xmxrepresents t

2022-03-18 19:48:54 8510 2

原创 自定义BeanUtils

自定义BeanUtils@Slf4jpublic class CustomizeBeanUtils { /** * * @param source * @param targetClass * @param <T> * @return */ public static <T> T copyProperties(Object source, Class<T> targetClass) {.

2022-03-12 10:33:30 428

转载 static关键字

参考文章:https://www.cnblogs.com/snowwhite/p/4633634.html记住,即使没有显示地声明为static,类的构造器实际上也是静态方法。static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。static成员变量的初始化顺序按照定义的顺序进行初始化。static关键字还有一个

2022-03-11 18:28:00 108

原创 Hutool工具包关于Http工具一 HttpUtil

POST方式请求数据1)x-www-form-urlencoded形式的参数public class NxUtil { /** * * POST 参数不要传body,用form表单方式提交,格式是 x-www-form-urlencoded * * @return */ public static String queryBalance(String url, NxBalanceReq req) { Map&l.

2022-03-11 10:38:27 7397

原创 代码设计与优化的思想

判空的操作以及使用时刻考虑有些代码获取值的是否为空的情况,然后在为空的情况下,记录警告日志,以及让程序结束,不需要再执行下去,也就是 returnimport cn.hutool.core.util.ObjectUtil;import lombok.extern.slf4j.Slf4j;`在这里插入代码片`@Slf4jpublic class SupplierBalanceServiceImpl{// private final Logger logger = LoggerFactor

2022-03-11 10:00:00 631

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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