RabbitMQ

带着新人学springboot的应用05(springboot+RabbitMQ 上)

孤街浪徒 提交于 2020-12-26 02:18:22
  这次就来说说RabbitMQ,这个应该不陌生了,随便一查就知道这个是用来做消息队列的。 (注意:这一节很多都是概念的东西,需要操作的比较少)   至于AMQP协议(Advanced Message Queuing Protocol),专业名称叫做高级消息队列协议,就是只要你遵守这个协议,那么做出来的产品就能跨平台,跨语言,很牛的一个协议,具体多么牛可以自己百度一下。   而RabbitMQ就是基于这个协议的!很多语言都可以用RabbitMQ,例如python,C语言,PHP,Java等语言,而且windows,linux,macos等平台都可以使用。。。 简单看看使用场景:   运用场景1:比如大家注册博客园的时候,注册信息写入数据库之后,还需要激活吧!你要等博客园的一个线程给你发邮件,假如这个时候注册的人很多,那就需要非常多的线程,大家也知道线程到达一定数目效率反而是降低的,而且只有等到邮件给你发送之后你才知道注册成功,你就可能一直卡了几分钟。所以这个时候,就把很多个发邮件需要的消息放到一个消息队列中你就马上收到响应“注册成功”,然后你就可以去玩玩手机,等一下就会收到邮件,其实对博客园来说,只需要几个或者几十个线程慢慢的从这个队列中取消息、一个一个慢慢发邮件就是了。   运用场景二:大家都知道双11,淘宝各种活动,假如一个店铺生意特别好,一下子卖了十几万件

【win7】安装php7.3及扩展

若如初见. 提交于 2020-12-24 05:12:28
php7.3 插件 php-redis php-igbinary php-amqp 【初识RabbitMQ,附RabbitMQ+PHP演示实例】 https://www.cnblogs.com/miketwais/p/RabbitMQ.html 【php的amqp扩展 安装(windows) rabbitmq学习篇】 https://www.cnblogs.com/M-D-Luffy/p/6203124.html 开发环境变量path如下 C:\Program Files\EsafeNet\Cobra DocGuard Client;%APACHE_HOME%\bin;%MYSQL_HOME%\bin;%PHP_HOME%\php-7.2.1-nts;%REDIS_HOME%;%MEMCACHE_HOME%;C:\Users\zhengqiang.wang.RAGENTEKXIAN\AppData\Local\Programs\Fiddler;C:\Program Files\Git\mingw64\bin;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;C:\Users\zhengqiang.wang.RAGENTEKXIAN\AppData\Roaming\npm;%GOROOT%\bin;%IntelliJ IDEA%;%GOBIN%;%ERLANG

Java中不可或缺的50个小技巧,好用!

拥有回忆 提交于 2020-12-24 01:01:27
《Effective JavaJava》名著,必读。如果能严格遵从本文的原则,以编写API的质量来苛求自己的代码,会大大提升编码素质。 以下内容只记录了我自己整理的东西,还是建议读原文。为了聚焦知识点,一些说明故意忽略掉了。相当于是一篇摘要。 1、考虑用静态工厂方法替代构造函数 例子: Integer.valueOf(“1”)、Boolean.valueOf(“true”)等。 优势: 可读性高(方法名) 性能(不一定创建对象) 灵活性高 下面针对三个优势进行一些解读。 可读性高 new Point(x,y)和Point.at(x,y)、Point.origin()。构造函数只能看出两个参数,不知其意,后者更易理解。 性能 在某些情况下,可以事先进行实例化一些对象,调用时直接调用即可,不需要进行改变。比如,Boolean。 public final class Boolean implements Serializable, Comparable<Boolean> { // 预先设置两个对象 public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); public Boolean(boolean var1) { this

阿里java岗面试有多难?分享阿里面试真题(附面试专题答案)及P7所要掌握的技能体系!

狂风中的少年 提交于 2020-12-23 18:22:56
秋招结束,从5月中旬开始复习,7月份开始投简历,一直到现在,简单记录一下,今天给大家分享的是我一位幸运拿到阿里offer的朋友的面试经历,疫情刚有好转,相信还有很多朋友是在线上办公的,我也闲来无事,问到了我朋友阿里面试的一些真题,以及我整理的一些真题分享给大家。 这里整理了最近BAT最新面试题,2020船新版本!!需要的朋友可以: 点击这里!!暗号OS! 。希望那些有需要朋友能在今年第一波招聘潮找到一个自己满意顺心的工作! 阿里一面(60分钟):速度问的很快,基本涵盖了所有常考点 项目的情况,redis,消息中间件,数据一致性,分布式session,实现分布式session的方式(除了redis第三方),登录的过程 redis 作用,删除策略,集群,缓存击穿 spring的循环依赖,spring bean的生命周期,事务传播级别 介绍常见的集合,Arrayslist,hashmap,hashset等 常见的并发包类 常见的排序有哪些,说说希尔排序,为什么快? 介绍红黑树,红黑树的特性,红黑树如何进行旋转 mysql,索引结构B+树,hash索引,怎么解决慢查询,什么情况使用不到索引,sql语句的执行流程,覆盖索引的实现 虚拟机,类加载机制,垃圾回收器,cms,ps使用场景 int integer区别(内存位置) 计算机网络三次握手,四次挥手,ddos攻击在哪一阶段 当天晚上加了笔试

Spring Cloud Sleuth 链路追踪

谁说胖子不能爱 提交于 2020-12-22 06:45:57
学习在 Spring Cloud 中使用 Sleuth 实现链路追踪,包括基本使用、异步任务、定时任务等功能,并结合 Zipkin 展示收集到的信息。 1 概述 在大规模的分布式系统中,一个完整的系统是由很多种不同的服务来共同支撑的。不同的系统可能分布在上千台服务器上,横跨多个数据中心。一旦系统出问题,此时问题的定位就比较麻烦。在微服务环境下,一次客户端请求,可能会引起数十次、上百次服务端服务之间的调用。一旦请求出问题了,我们需要考虑很多东西: 如何快速定位问题? 如果快速确定此次客户端调用,都涉及到哪些服务? 到底是哪一个服务出问题了? 要解决这些问题,就涉及到 分布式链路追踪 。分布式链路追踪系统主要用来跟踪服务调用记录的,一般来说,一个分布式链路追踪系统,有三个部 分功能: 数据收集。 数据存储。 数据展示。 Spring Cloud Sleuth 是 Spring Cloud 提供的一套分布式链路追踪系统,有 3 个核心概念: Trace :从请求到达系统开始,到给请求做出响应,这样一个过程成为 Trace 。 Span :每次调用服务时,埋入的一个调用记录,成为 Span 。 Annotation :相当于 Span 的语法,描述 Span 所处的状态。 2 基本使用 创建 Spring Boot 项目 sleuth ,添加 Web/Sleuth 依赖,如下:

JVM GC耗时频频升高,我来教你排查

好久不见. 提交于 2020-12-22 00:13:32
1. 背景 多个业务线的应用出现LongGC告警 最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。 2. 知识回顾 2.1 JVM堆内存划分 新生代(Young Generation) 新生代内被划分为三个区:Eden,from survivor,to survivor。大多数对象在新生代被创建。Minor GC针对的是新生代的垃圾回收。 老年代(Old Generation) 在新生代中经历了几次Minor GC仍然存活的对象,就会被放到老年代。Major GC针对的是老年代的垃圾回收。本文重点分析的CMS就是一种针对老年代的垃圾回收算法。另外Full GC是针对整堆(包括新生代和老年代)做垃圾回收的。 永久代(Perm) 主要存放已被虚拟机加载的类信息,常量,静态变量等数据。该区域对垃圾回收的影响不大,本文不会过多涉及。 2.2 CMS垃圾回收的6个重要阶段 1、initial-mark 初始标记(CMS的第一个STW阶段),标记GC Root直接引用的对象,GC Root直接引用的对象不多,所以很快。 2、concurrent-mark 并发标记阶段,由第一阶段标记过的对象出发,所有可达的对象都在本阶段标记。 3、concurrent-preclean 并发预清理阶段,也是一个并发执行的阶段。在本阶段,会查找前一阶段执行过程中

谈谈DDD本质

99封情书 提交于 2020-12-21 20:33:29
这是Bella酱的第 89 期分享 作者 | SnoWalker 来源 | 分布式朝闻道 学习DDD的时候,作为开发,我们更关心它在技术层面的东西,尤其体现在DDD的分包方式、编码技巧等方面。 自然的,我们不禁发问,用了DDD的分包,就是实践落地了DDD了么? 不卖关子,直接说答案,并不是。 用了DDD的分包,只能说满足了DDD的"形",并没有抓住DDD的"神"。DDD的神是什么,归根到底还是 面向对象,领域建模 。所谓的各种分包方式本质上还是为了满足DDD面向对象的本质,方便开发者进行代码编写而提供的一种"战术设计" 工具 。 要深入讨论这个问题,我们需要花一点时间来学习讨论一下DDD中常见的几种分包。 DDD分包概述 基于DDD的分包主要有两大流派:分层架构以及六边形架构。 分层架构以四层架构为主,基于四层架构又诞生出衍生的五层架构、六层架构等等(限于篇幅以及讨论重点,本文中我们只讨论四层架构)。 六边形架构出自 Robert C Martin(没错,就是传说中的鲍勃大叔)提出的整洁架构,后来者不断探索,又衍生出了洋葱架构。 这个过程可谓是百家争鸣。实际开发中,最为我们熟知的当属四层架构与六边形架构了,其余的各种架构都是基于这两种架构方式的变体。 四层分层架构 四层架构的分层如下图: 从上往下依次为: |- userinterface 用户界面层/表示层 |-

RabbitMQ使用分析和高可用集群搭建

落花浮王杯 提交于 2020-12-16 10:40:04
一、RabbitMQ 基础理解 RabbitMQ,是一个使用 erlang 编写的 AMQP(高级消息队列协议)的服务实现,简单来说,就是一个功能强大的消息队列服务。 概念理解: Producer : 消息发送者 RabbitMQ : Vhost: 相当于分组,每个vhost下数据是隔离的 Exchange: 路由器,接收消息,本根据RoutingKey分发消息 headers:消息头类型 路由器,内部应用 direct:精准匹配类型 路由器 topic:主题匹配类型 路由器,支持正则 模糊匹配 fanout:广播类型 路由器,RoutingKey无效 RoutingKey: 路由规则 Queue: 队列,用于存储消息(消息的目的地) Consumer : 消息消费者 持久化: 一个好的消息队列当然需要消息持久化功能,服务宕机,未消费消息不丢失,RabbitMQ持久化分为Exchange、Queue、Message Exchange 和 Queue 持久化 指持久化Exchange、Queue 元数据,持久化的是自身,服务宕机,Exchange 和 Queue 自身就没有了 Message 持久化 顾名思义 把每一条消息体持久化,服务宕机,消息不丢失 Durable 持久、Transient 临时,Queue新建类似 分析理解: 便于更直观的理解,把 RabbitMQ