自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 记一次 max-http-header-size 配置不当导致的 OOM 问题

接手的一个项目因配置 max-http-header-size 不当,导致 OOM 的一次排查过程记录

2022-01-21 00:42:19 2427 1

原创 Java8 特性 -- Lambda 详解

Lambda 表达式1.Lambda 表达式简介Lambda 表达式即函数式编程,可以将行为进行传递,可以在以后执行一次或多次。使写出更简洁、灵活、紧凑的代码。2.使用 Lambda 的优化当需要启动一个线程去完成任务时,通常会通过java.lang.Runnable接口来定义任务内容,并使用java.lang.Thread类来启动该线程。传统写法如下:public static void main(String[] args) { new Thread(new Runnable() {

2021-01-16 17:09:00 305

原创 RabbitMQ 学习笔记 -- 14 重试机制

消费者抛出异常情况模拟程序异常@RabbitListener(queues = "work_queue")public void receiver(String msg) long deliveryTag) throws IOException { System.out.println("工作队列 work_queue 消费信息:" + msg + " -- " + LocalDateTime.now()); int i = 1/0;}效果:一直循环消费并抛出异常@RabbitHandle

2021-01-16 16:43:30 1477

原创 RabbitMQ 学习笔记 -- 13 使用插件方式实现延迟队列

插件实现延迟队列1.比对在上一篇中我们讲到 DLX + TTL 的两种方式实现延迟队列,但都有各自的问题 给队列设置 TTL,不能灵活动态配置 给消息设置 TTL,导致消息时序问题,已经过期了的消息被阻塞导致不能及时被消费 这里将使用的是一个 RabbitMQ 延迟消息插件 rabbitmq-delayed-message-exchange,目前维护在 RabbitMQ 插件社区中。我们可以声明 x-delayed-message 类型的 Exchange,消息发送时指定消息

2020-10-12 22:58:13 1408

原创 RabbitMQ 学习笔记 -- 12 死信队列 DLX + TTL 方式实现延迟队列

死信队列 DLX + TTL 实现延迟队列延迟队列与死信队列时息息相关的,它具有特点: 队列,意味着内部的元素是有序的,元素的出队和入队是有方向性的,元素从一端进入,从另一端取出 延时,这是最重要的特性,普通队列中的元素总是等着希望被早点取出处理,而延时队列中的元素则是希望等待特定时间后,消费者才能拿到这个消息进行消费。 TTLTTL 是 RabbitMQ 中一个消息或者队列的属性,表明一条消息或者该队列中的所有消息的最大存活时间,单位是毫秒。换句话说,如果一条消息设置了 TTL

2020-09-27 23:51:47 1377

原创 RabbitMQ 学习笔记 -- 11 RabbitMQ 死信队列

死信队列DLX,Dead Letter Exchange 的缩写,又死信邮箱、死信交换机。其实 DLX 就是一个普通的交换机,和一般的交换机没有任何区别。 当消息在一个队列中变成死信(dead message)时,通过这个交换机将死信发送到死信队列中(指定好相关参数,RabbitMQ 会自动发送)。什么是死信呢?什么样的消息会变成死信呢?被设置了TTL的消息在过期后会成为 Dead Letter。其实在 RabbitMQ 中,一共有三种消息的“死亡”形式:消息被拒绝(basic.reject或ba

2020-09-06 23:10:55 728

原创 RabbitMQ 学习笔记 -- 10 RabbitMQ 消费者确认和发布者确认

RabbitMQ:消息发送确认 与 消息接收确认(ACK)接下来我们讲讲持久化中消息的回调,其实就是消息确认(生产者推送信息成功,消费者接收信息成功) 如果一个 Queue 没被任何消费者订阅,那么这个 Queue 中的消息会被 Cache(缓存),当有消费者订阅时则会立即发送,当 Message 被消费者正确接收时,就会被从 Queue 中移除 默认情况下如果一个 Message 被消费者所正确接收则会被从 Queue 中移除 开启消息确认机制Basic.Ack 发回给 Rab

2020-09-06 21:20:24 1017

原创 RabbitMQ 学习笔记 -- 09 RabbitMQ 的持久化

一、消息中间件的常见使用场景复杂系统的解耦: 多个系统间通过中间件进行数据交互, 避免牵一发而动全身, 减少耦合, 提升系统稳定性与可扩展性 复杂链路的异步调用: 某些业务场景可以通过异步执行减少同步调用的时间, 从而大大提高系统响应时间而不影响核心逻辑 瞬时高峰的削峰处理: 流量高峰期, 可以将请求积压在MQ中, 服务器不用一下处理所有请求从而导致系统崩溃, 高峰期后, 消费者可以慢慢消费二、系统架构引入消息中间件后会有哪些缺点系统可用性降低: 引入MQ,系统多了一个依赖。依赖如果出现问题,

2020-08-07 00:20:40 914

原创 RabbitMQ 学习笔记 -- 08 RabbitTemplate 及消息序列化

生产者发送消息时可以为消息指定一些参数 Delivery mode: 是否持久化,1 - Non-persistent,2 - Persistent Headers:头文件可以有任何名称。这里只能设置长字符串头。 Properties: 设置消息属性(传递模式和头信息是最常见的情况)。无效的属性将被忽略. Valid properties are: content_type : 消息内容的类型content_encoding: 消息内容的编码格式priority: 消息的

2020-08-06 00:01:02 4335

原创 RabbitMQ 学习笔记 -- 07 初探@RabbitListener

Message在消息传递的过程中,实际上传递的对象为 org.springframework.amqp.core.Message ,它主要由两部分组成: MessageProperties // 消息属性 byte[] body // 消息内容 如下使用 Message 类型接收数据,当监听到队列 hello中有消息时则会进行接收并处理,MessageConvert 会直接转换成消息类型,并绑定在对应被注解的方法中。消息处理方法参数是由 MessageConverter 转化,若

2020-08-03 23:57:48 4243 1

原创 RabbiMQ 学习笔记 -- 06 Topic 交换机

<div class="output_wrapper" id="output_wrapper_id" style="font-size: 15px; color: rgb(62, 62, 62); line-height: 1.8; word-spacing: 2px; letter-spacing: 2px; font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-ser

2020-06-29 22:58:02 172

原创 RabbiMQ 学习笔记 -- 05 路由模式

一、介绍绑定是交换和队列之间的关系。绑定可以使用额外的绑定键参数。Spring AMQP 使用一个连贯的 API 来明确这种关系。我们将交换器和队列传递到 BindingBuilder ,并使用绑定键将队列“绑定到”交换器,如下所示@BeanpublicBindingbinding(DirectExchangedirect,Queuequeue){returnBindingBuilder.bind(queue).to(direct).w...

2020-06-15 23:47:32 248

原创 RabbiMQ 学习笔记 -- 04 扇形交换机

一、介绍这章我们实现扇形模式将消息传递给多个队列,这种模式也称为“发布/订阅”,回顾: 生产者是发送消息的用户应用程序。 队列是存储消息的缓冲区。 消费者是接收消息的用户应用程序。 RabbitMQ 消息传递模型中的核心思想是:一直不会将任何消息直接发送到队列上,而且,生产者经常不知道有没有将消息传递到任何队列。相反,生产者只能将消息发送到交换机。交换消息是一件非常简单的事情。一方面,交换机它接收来自生产者的消息,另一方面,将它们的消息推入队列。交换机必须确切地知道

2020-06-11 23:07:11 370

原创 RabbiMQ 学习笔记 -- 03 多消费者

一、简介在上一章,我们编写了从命名队列发送和接收信息的程序,在本例中,我们将创建一个工作队列,用于在多个消费者分发耗时的任务工作队列(也称为任务队列)背后的主要思想是避免立即执行资源密集型任务,而必须等待它完成。相反,我们把任务安排在以后完成。我们将任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当运行许多消费者时,任务将在他们之间共享。多消费者二、消费者这里我们编写两个消费者监听同一个队列 work-queues 的方法,@Componentp

2020-06-10 23:15:28 583

原创 RabbiMQ 学习笔记 -- 02 一个 HelloWorld

一,介绍RabbitMQ:它不处理信息,而是接收、存储和转发二进制的数据信息块,包含 exchange 交换机和 queue 队列模块 producer :生产只意味着发送。发送消息的程序是生产者生产者 queue:信息流经 RabbitMQ 与对应程序,但它们只能存储在队列中。队列只受主机的内存和磁盘限制的约束,它本质上是一个很大的消息缓存区。生产者们可以将信息发送到一个队列,然后消费者们可以从队列中接收数据队列 consumer:消费者从队列中获取数据信息,交给等待接收消息的应用程序进

2020-06-10 00:04:01 171

原创 RabbitMQ 学习笔记 -- 01 简介

一,简介RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗,消息队列是一种应用系统之间的通信方法,是通过读写如队列的信息来通信(RPC 则是通过直接调用彼此来通信的)AMQP (Advanced Message Queuing Protocol) 高级消息队列协议是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的

2020-06-09 23:41:29 249

空空如也

空空如也

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

TA关注的人

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