RabbitMQ 是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。它的并发最高可以支持一万并发,且它出身于金融行业。 RabbitMQ核心概念 Producer:生产者 Consumer:消费者 Broker:消息中间件的服务节点 。 Virtual Host:等同于namespace Channel:频道或信道,是建立在Connection连接之上的一种轻量级的连接。 RoutingKey:路由键。生产者将消息发给交换器的时候,一般会指定一个 RoutingKey,用来指定这个消息的路由规则。 Exchange:交换器,生产者将消息发送到 Exchange (交换器,通常也可以用大写的“X”来表示),由交换器将消息路由到一个或者多个队列中。如果路由不到,或返回给生产者,或直接丢弃。 Queue:队列,是RabbitMQ的内部对象,用于存储消息。 Binding:绑定,RabbitMQ 中通过绑定将交换器与队列关联起来,在绑定的时候一般会指定一个绑定键( BindingKey ) ,这样.... RabbitMQ java
相信每个人都写过这样的的mybatis的sql代码: SELECT * FROM user WHERE NAME LIKE concat('%', concat( '小', '%' )) 查询结果如下: 那么如果将'小'换成%呢? 再换成''呢? 没错,它会查询出所有数据,说来惭愧,这也是我一个5年java开发程序员才注意到的事情!!!GOD 问题出现了就要解决它,有大佬推荐说mysql可以使用ngram进行分词,我不知道是啥也没用过,而且我用的数据库是oracle 不过我找到了另外一种既可以在oracle用的也可以在mysql用的解决办法: 首先我们在代码中进行字符串替换: String name = user.getUserName(); if(null!=name && !"".equals(name)){ user.setName(name.replaceAll("\%","\\%").replaceAll("\","\\_")); } 然后修改查询sql: 为什么图中用的@?因为mysql用\会报错,只能用两个斜杠\ \ ,但是在oracle中.... 模糊查询输入%和_会查询全部的问题 java
Java常见线上问题总结 绝⼤多数Java线上问题从表象来看通常可以归纳为4个方面:CPU、内存、磁盘、网络。比如,应用上线 后突然CPU使用率99%、内存泄漏、STW时间过长,这些问题通常可以分为两大类: 系统异常 (CPU占用率过高、磁盘使用率100%、系统可用内存低等) 业务异常 (服务运⾏⼀段时间⾃动退出、服务间调⽤时间过⻓、多线程并发异常、死锁等) 1.如何去定位问题 解决问题的第⼀步是定位问题,排查手段⼀般包括以下⼏项,也可以将此理解为排查顺序: 业务⽇志分析排查 APM分析排查 物理环境排查 应⽤服务排查 云⼚商或运营商问题排查 1.1 业务⽇志分析排查 这个没啥说的,看日志不会吗? 1.2 APM分析排查 APM,全称Application Performance Management,应⽤性能管理 在分布式系统中,需要用到APM进行全链路分析 ⽬前市场上使⽤较多的链路跟踪⼯具有如下⼏个: Apache Skywalking:https://skywalking.apache.org Pinpoint:https://pinpoint.com/product/for-e.... java线上故障排查方案 java
#先参考我之前的一篇文章在服务器进行一个死锁的情景重现# 检测死锁的文章 查看java进程 ps -ef|grep java 针对进程id生成dump文件 jmap -dump:format=b,file=serviceDump.dat 14640 使用jvisualvm.exe对dump进行分析(如果jdk的bin目录下没有,需要自行下载) https://visualvm.github.io/index.html 修改visualvm.conf 加入JDK 路径 visualvm_jdkhome="C:/Users/JavaCoder/.jdks/corretto-1.8.0_312" 双击bin目录下的visualvm.exe打开 导入dump文件后查看死锁的线程 还有另外一种使用方式 jhat : jhat 用于分析 heapdump 文件,它会建立一个 HTTP/HTML 服务器,让用户可以在浏览器上查看分析结果 C:\Users\SnailClimb>jhat C:\Users\SnailClimb\Desktop\heap.hprof Reading from C:.... 分析linux的java进程的dump文件 java
我最喜欢我的发型,因为它天生自然卷,而且是内卷。 公司在十八层,为了能坐上电梯,我每次走到三层去等往下的电梯,先坐到1楼再上去。 为了能带薪拉屎,我每次提前半个小时占坑,一边等shi意一边刷抖音,外面兄弟急的满头大汗,我静静享受这片刻悠闲。 我的手机通讯软件只有钉钉,因为最喜欢它的已读功能,和谁聊天也是,别假装没看到。 微信只用来凌晨两点发个朋友圈功能,比如:今天又是凌晨两点下班,年轻就该奋斗,工作群因我更加闪烁,明天的我将继续拼搏!。 平常我最喜欢写总结报告,所以在我的影响下,团队已经从周报进化成日报,格式从WORD进化成PPT。 我发日报一定要在晚上一点发,周报一定要在周末发。 这还不够,我现在每天在群里发三次汇报,早上发规划和目标,中午发进展和风险,晚上发总结和思考。 对了最近流行短视频,我下次开会建议大家都把工作电脑录屏,最后剪成视频给领导看。 白天我喜欢开会,时间一般约大家中午十二点、下午六点和晚上九点。 我喜欢熬夜,经常半夜才有灵感,所以习惯半夜工作,并且有什么不了解的事情立马和同事沟通。 我和同事沟通从来不私聊,不管问题大小直接把对方和对方的经理拉进群里咨询问题,这样效率.... (转)假如我是超级内卷王...... java
HTTP 响应状态代码指示特定 HTTP 请求是否已成功完成。响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599)。状态代码由 section 10 of RFC 2616定义 信息响应 100 Continue这个临时响应表明,迄今为止的所有内容都是可行的,客户端应该继续请求,如果已经完成,则忽略它。101 Switching Protocol该代码是响应客户端的 Upgrade 标头发送的,并且指示服务器也正在切换的协议。102 Processing (WebDAV)此代码表示服务器已收到并正在处理该请求,但没有响应可用。103 Early Hints 此状态代码主要用于与Link 链接头一起使用,以允许用户代理在服务器仍在准备响应时开始预加载资源。 成功响应 200 OK请求成功。成功的含义取决于HTTP方法: GET:资源已被提取并在消息正文中传输。 HEAD:实体标头位于消息正文中。 POST:描述动作结果的资源在消息体中传输。 TRACE:消息正文包含服务器收到的请求消息.... HTTP 响应代码 java
打jar包,可以现在本地java -jar 运行一下 将jar包复制到linux虚拟机一份 vim Dockerfile,创建一个文件,内容如下: FROM openjdk:8-jdk-alpine ADD xxxx1.jar xxxx2.jar ENV JAVA_OPTS="-Xmx200m" EXPOSE xxxx3 CMD ["sh", "-c", "java $JAVA_OPTS -jar /xxxx2.jar"] 注:xxxx1为打包好的jar包名称;xxxx2为自定义名称,什么都行;xxxx3为项目运行的端口号,自定义 将jar包编译成docker镜像 命令为:docker build -f Dockerfile -t xxxx5:xxxx6 . 注:xxxx5为自定义docker镜像名称;xxxx6为版本号,一般为1.0或1.0.0;在版本号后还有一个 . 这个点不能少 运行docker镜像 使用命令:docker run -d -p xxxx7:xxxx8 xxxx9:xxxx10 注:xxxx7为映射到你本机的端口,当你要调用改服务时使用这个端口;xxxx8是.... springboot项目部署到docker中去 java