MQ系列(五)| Kafka 快速入门
Kafka 快速入门介绍 参考:Kafka 是什么? 架构一个高性能,高扩展性,高可用,支持持久化的超强消息队列,它就是我们常说的消息队列 KafkaZookeeper 协调管理多个 broker 组成,内部有多个 topic 分类,每个 topic 又分成多个 partition ,每个 partition 有多个副本 replia,不同的partition 会分布在不同 broker 上,提升性能同时,还增加了系统可用性和可扩展性 高性能 对消息进行分类,每个类是一个 topic 单个 topic 的消息可能过多,可将单个队列拆分成多个段,每段就是一个分区 partition ,每个消费者负责一个 partition 高扩展性可将 partition 分部在多台设备,每台设备代表一个 broker 高可用存在一个问题,如果其中一个partition所在的 broker 挂了,那么这部分的消息不久丢失了吗? 可以给partition 多加几个副本 replica,从中分为 Leader 和 Follower,Leader 负责生产者和消费者的读写,Follower...
MQ系列(四)| RabbitMQ 死信队列和延迟队列
死信队列死信是什么死信:无法被消费的消息。由于特定的原因导致队列中的某些消息无法被消费,这些消息没有后续的处理,就会变成死信。当消息在队列中无法被正常消费时,会被发送到死信队列中。 死信来源消息 TTL队列达到最大长度消息拒签(basicNack 或 basicReject)且重入队列为false(requeue=false) 死信架构 消息TTL 名称 交换机 路由键 类型 特征 参数 普通交换机 normal_exchange zhangsan direct / / 普通队列 normal_queue zhangsan / TTL DLX DLK x-dead-letter-exchange:dead_exchangex-dead-letter-routing-key:lisix-message-ttl: 10 * 1000 死信交换机 dead_exchange lisi direct / / 死信队列 dead_queue lisi / / / 生产者发送消息10条消息到队列...
MQ系列(三)| RabbitMQ 消息确认机制
RabbitMQ 消息确认机制 :heavy_exclamation_mark::heavy_exclamation_mark::heavy_exclamation_mark:温馨提示:基于JDK17、SpringBoot 2.1.8.RELEASE 版本,由于RabbitMQ 在 SpringBoot3+ 的配置项有所不同, 所以请严格按照该本版来使用,挖一坑:【后续会出一个SpringBoot3+版本的配置相关教程】 架构 概念保证消息不丢失,可靠抵达,可以使用事务消息,性能下降250倍 为此引入确认机制 生产者确认回调:publisher confirmCallback 生产者退回回调:publisher returnCallback未投递到queue退回模式 消费者确认:consumer ack确认机制 ComfirmCallback【生产者确认回调】 概念:ComfirmCallback是生产者消息确认机制的一部分。当生产者发送消息到 RabbitMQ 的交换器(Exchange)后,RabbitMQ 会返回一个确认消息给生产者,这个确认过程可以通过...
MQ系列(二)| RabbitMQ 整合 SpringBoot
RabbitMQ 整合 SpringBoot概述 大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力、流量削峰 消息服务中两个重要概念:消息代理(`message broker`)和目的地(`destination`) 当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。 消息队列主要有两种形式的目的地1. 队列(`queue`):点对点消息通信(`point-to-point`) 2. 主题(`topic`):发布(`publish`)/订阅(`subscribe`)消息通信 RabbitMQ 架构图 概念生产者 Producer生产者是消息的发送方,它将消息发送到 RabbitMQ 的交换器中。 ✨消息 Message 消息=消息头+消息体,根据routekey发送到指定的交换机 Exchange 消息头:含有各种属性 routing-key(路由键)、priority(优先级)、delivery-mode(指出该消息可能需要持久性存储)等。 ✨消息代理...
MQ系列(一)| RabbitMQ 快速入门
RabbitMQ 快速入门 官网:https://www.rabbitmq.com/ 入门教程:https://www.rabbitmq.com/tutorials 最新版本:4.0.2 版本参考:JDK17、Maven Or Gradle 1、简介RabbitMQ是一个可靠且成熟的消息传递和流代理,易于部署在云环境、本地和本地机器上。它目前被全球数百万人使用。 2、为什么使用公司业务场景核心:解耦、异步、削峰 2.1、解耦A系统发数据给到BCD系统,如果E系统需要接入?C系统不需要了?A系统的负责人就需要来回修改接口对接其他系统。 如果使用MQ,A系统产生一条数据,发送到MQ中,那个系统需要数据自己去MQ消费。如果新的系统需要数据,直接从MQ中消费;某个系统不需要数据的话,取消消费这个MQ即可。这样A系统不需要考虑谁发送数据给谁,不需要考虑是否调用成功、失败超时等问题。 总结:通过一个MQ,Pub/Sub发布订阅消息模型,A系统就和其他系统彻底耦合了。 2.2.1、项目应用...
Redis系列(一)| 单机集群搭建3主3从
Redis集群部署-单主机 6节点 3M+3S下载docker redis 镜像docker pull redis:4.0 # 或者直接下载最新版redis镜像 docker pull redis !!! 注意 redis 5.0以上创建集群不在使用ruby,因此如果使用最新版的redis 一下ruby部分内容直接跳过 在 /data下新建 redis-cluster 文件夹,然后创建 redis-cluster.tmpl 文件# bind 127.0.0.1 protected-mode no port ${PORT} daemonize no dir /data/redis appendonly yes cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 15000 cluster-announce-port ${PORT} cluster-announce-bus-port...
Hexo系列(三)| 整合全局音乐
Hexo系列(三)| 整合全局音乐1、hexo 目录下安装npm install –save hexo-tag-aplayer 2、修改 hexo 目录下 Hexo 配置文件_config.ymlaplayer: enable: true asset_inject: false 3、修改 hexo 目录下主题配置文件_config.butterfly.yml找到: aplayerInject aplayerInject: enable: true per_page: true 找到:pjax pjax: enable: true 找到:inject 在 bottom 里添加 inject: head: bottom: - '<div data-id="60198" data-server="netease" data-type="song" data-fixed="true" data-autoplay="true">...
Java系列(九)| Java多线程
多线程java 多线程及线程池原理讲解 1. 线程是什么?多线程是什么? 线程: 是最小的调度单位,包含在进程中。 多线程: 多个线程并发执行的技术。 2. 守护线程和用户线程守护线程: jvm 给的线程。比如:GC 守护线程。 用户线程: 用户自己定义的线程。比如:main() 线程。 拓展: Thread.setDaemon(false) 设置为用户线程 Thread.setDaemon(true) 设置为守护线程 3. 线程的各个状态 新建 (New): 新建一个线程。 就绪 (Runnable): 抢夺 cpu 的使用权。 运行 (Running): 开始执行任务。 阻塞 (Blocked): 让线程等待,等待结束进入就绪队列。 死亡 (Dead): 线程正常结束或异常结束。 4. 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等 wait(): 线程等待,会释放锁,用于同步代码块或同步方法中,进入等待状态 sleep(): 线程睡眠,不会释放锁,进入超时等待状态 ...
Java系列(八)| Java集合
Java核心技术 集合类Java 集合,也叫作容器,主要是由两大接口派生而来:一个是 Collection 接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。 Collection 接口关系图具体实现:List、Queue、Set,可以看下Collection关系图 Map 键值对关系图具体实现:Hashtable、LinkedHashMap、TreeMap,可以看下Map 关系图 1.List、Set、Queue、Map 区别 List:有序列表,可重复 Set:无序列表,不可重复 Queue:特性的排队顺序确定先后关系,存储元素是有序的,可重复 Map:使用键值对(key-value)存储 2.List、Set、Map 常用集合有哪些?List vector: 底层是数组,方法加了 synchronized 来保证线程安全,所以效率较慢,使用 ArrayList 替代。 ArrayList:...