消息队列

2.7 RabbitMQ高级特效-死信队列

依然范特西╮ 提交于 2020-02-27 15:29:56
DLX ,Dead-Letter-Exchange利用DLX,当消息在一个队列中变成死信(dead message)之后,它能被重新publish到另外一个Exchange,这个Exchange就是DLX。 消息变成死信有以下几种情况: 1.消息被拒绝(basic.reject/basic.nack)并且requeue=false 2.消息TTL过期。。 3.队列达到最大长度。 DLX也是一个正常的Exchange,和一般的Exchange没有区别,它能在任何的队列上被指定,实际上就是设置某个队列的属性。 当这个队列中有死信的时,RabbitMQ就会自动的将这个消息重新发布到设置的Exchange上去,进二被路由到另外一个队列。 可以监听这个队列中消息做相应的处理,这个特性可以弥补RabbitMQ3.0以前支持的immediate参数的功能。 死信队列的设置: 1 首先需要设置死信队列的Exchange和queue,然后绑定: Exchange:dlx.exchange Queue:dlx.queue RoutingKey:# 2 然后进行正常声明交换机、队列、绑定,只不过我们需要在对别加上一个参数即可:arguments.put("x-dead-letter-exchange","dlx.exchange")。这样消息在过期、qequeue、队列达到最大长度时

Spring Boot(七):RabbitMQ 详解

好久不见. 提交于 2020-02-27 13:58:31
一、RabbitMQ简介 RabbitMQ即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。 消息中间件在互联网公司的使用中越来越多,消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。在分布式的系统中,消息队列也会被用在很多其它的方面,比如:分布式事务的支持,RPC的调用等等。 RabbitMQ是实现AMQP(高级消息队列)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。RabbitMQ主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层保存这个数据。 AMQP,即advanced message queuing protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠安全。 RabbitMQ是一个开源的AMQP实现,服务器用Erlang语言编写,支持多种客户端,如 Python、Ruby、.NET、Java、JMS

中间件——消息队列的作用,为什么要用消息队列?

北城以北 提交于 2020-02-27 13:30:23
消息队列的作用:1,是减少相应所需的时间和削峰2,降低系统耦合性(解耦或提升系统的可拓展性) 当我们不使用消息队列的时候,所有用户的请求都会直接落到服务器上,然后通过数据库或者缓存相应,假如在高并发的环境下,如果没有缓存或者数据库承受不了那么大的压力的话,就会造成响应速度缓慢,甚至造成数据库宕机。因此这时候如果使用消息队列,用户发送的请求数据发送给了消息队列之后就可以立即返回,再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库。由于消息队列服务器的处理速度大于数据库,因此响应速度大幅度提高。 (图片来自于网络) 另外消息队列还具有一定的削峰的作用——通过异步处理,将短时间内高并发产生的事务消息存储在消息队列当中,从而削平高峰期的并发事务。比如一些电商网站的秒杀和促销活动都是用消息队列来缓解对系统的冲击,当然这时用户请求的压力也就变成了消息队列的压力。 (图片来自于网络) 同样的消息队列还可以降低系统的耦合性,就像我们知道如果模块之间不存在直接的调用,那么新增的模块就会对其他的模块的影响减少,这样系统的可拓展性就更好。生产者发送信息到消息队列当中去,接收者负责处理消息,需要消费的系统直接去消息队列当中去取即可,这样就不需要和其他系统有耦合冲突,就提升了系统的拓展性。 当然消息队列也不是没有缺点的: 1.首先就是系统的可用性降低了,在加入mq之前,你不用去考虑消息的丢失的情况

spring boot 2.0.3+spring cloud (Finchley)7、服务链路追踪Spring Cloud Sleuth

跟風遠走 提交于 2020-02-27 08:33:24
参考: Spring Cloud(十二):分布式链路跟踪 Sleuth 与 Zipkin【Finchley 版】 Spring Cloud Sleuth 是Spring Cloud的一个组件,主要功能是在分布式系统中提供服务链路追踪的解决方案。 微服务架构是一个分布式架构,微服务系统按业务划分服务单元,一个微服务系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性较高,如果出现了错误和异常,很难去定位。主要体现在一个请求可能需要调用很多个服务,而内部服务的调用复杂性决定了问题难以定位。所以在微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而达到每个请求的步骤清晰可见,出了问题能够快速定位的目的。 现今业界分布式服务跟踪的理论基础主要来自于 Google 在2010年发的一篇论文 《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》 ,使用最为广泛的开源实现是 Twitter 的 Zipkin,为了实现平台无关、厂商无关的分布式服务跟踪,CNCF 发布了布式服务跟踪标准 Open Tracing。国内,淘宝的 “鹰眼”、京东的 “Hydra”、大众点评的 “CAT”、新浪的 “Watchman”、唯品会的 “Microscope”、窝窝网的

RabbitMQ学习笔记-RabbitMQ简介

跟風遠走 提交于 2020-02-27 02:46:31
导语   RabbitMQ 是现在比较热门的消息中间件,在互联网行业和传统行业都有大量地使用。消息中间件有很多,RabbitMQ在高可靠、易扩展、高可用等方面都有很大的优势。在学习RabbitMQ的过程中都有所提升。 文章目录 消息中间件介绍 消息中间件作用 解耦 存储 扩展性 流量削峰 可恢复 顺序保证 缓冲 异步通信 RabbitMQ 起源 总结 消息中间件介绍   消息(Message) 在应用之前传递数据,消息可以是一个字符串,也可以是JSON数据,XML数据等等,当然也可以是复杂的对象。对于消息这个是一个抽象的定义,在任何应用之间的数据传递都可以称为消息,例如QQ消息,微信消息等等。   消息队列中间件(Message Queue Middleware,简称MQM)是指高效的传递机制进行平台之间的与平台无关的数据交流,基于数据通信的方式来进行分布式系统的集成。通过提供一个消息队列和消息的排队模型,可以在分布式环境下进行扩展消息传递。   对于消息中间件来说一般有两种传递模式,当然也有其他的,但是常用的就是以下的两种方式 点对点模式 发布订阅模式   点对点模式是基于队列的模式,消息生产者发送消息到消息队列,消息消费者从队列中接收消息,队列的存在使得消息的异步传递称为可能,例如在RocketMQ中消息的落地,可以使得消息重传。  

mysql之消息队列

Deadly 提交于 2020-02-27 02:09:12
消息队列:在消息的传输过程中保存消息的容器。 消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。 如图所示: 在不使用消息队列的情况下,用户的请求数据直接写入数据库,再高并发的情况下,会对数据库造成巨的压力,同时也使得响应延迟加剧。在使用消息队列后,用户请求的数据发送给消息队列后立即返回,再由消息队列的消费者进程(通常情况下,该进程独立部署在专门的服务器集群上)从消息队列中获取数据,异步写入数据库。由于消息队列服务器处理速度远大于数据库,因此用户的响应延迟可得到有效改善。 尤其是在淘宝搞“庆五一”,“双十一”,“春节特卖”等活动时,使用消息队列有很好的削峰作用-------- 即通过异步处理,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。所以在一些电子商务网站促销活动中,合理使用消息队列,可有效抵御促销活动刚开始大量涌入的订单对系统造成的冲击。 需要注意的是,由于数据写入消息队列后立即返回给用户数据在后续的业务校验、写数据库等操作可能失败,因此在使用消息队列进行业务异步处理后,需要适当修改业务流程进行配合,如订单提交后,订单数据写入消息队列,不能立即返回用户订单提交成功,需要在消息队列的订单消费者进程真正处理完该订单,甚至商品出库后

RabbitMQ (1)

你离开我真会死。 提交于 2020-02-26 23:41:37
文章目录 RabbitMQ简介 初识RabbitMQ 为什幺用RabbitMQ: RabbitMQ高性能的原因? 什么是AMQP高级消息队列协议? AMQP核心概念(重点) RabbitMQ安装及使用 Docker安装方式 RabbitMQ简介 各大主流中间件对比: activiMq 老牌消息中间件,api全面,但是吞吐量不大 Kafaka 吞吐量大,但是数据无法保证不丢失,主要面向大数据 rokectMQ :吞吐量大,保证数据不丢失,并且支持分布式事物,但是商业版需要收费 rabbitMQ :吞吐量大,数据不易丢失 初识RabbitMQ RabbitMQ是—个开源的消息代理和队列服务器,用来通过普通协议 在完全不同的应用之间共享数据,RabbitMQ是使用Erlang语言来编写 的,并且RabbitMQ是基于AMQP协议的。 为什幺用RabbitMQ: 开源、性能优秀,稳定性保障 提供可靠性消息投递模式(confirm)、返回模式(return ) 与SpringAMQP完美的整合、API丰富 集群模式丰富,表达式配置,HA模式,镜像队列模型 保证数据不丟失的前提做到高可靠性、可用性 RabbitMQ高性能的原因? Erlang语言最初在于交换机领域的架构模式,这样使得 RabbitMQ在Broker之间进行数据交互的性能是非常优秀的 Erlang的优点

RabbitMQ 消息中间件

允我心安 提交于 2020-02-26 22:03:58
1、消息中间件 1、简介 消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。 当下主流的消息中间件有RabbitMQ、Kafka、ActiveMQ、RocketMQ等。其能在不同平台之间进行通信,常用来屏蔽各种平台协议之间的特性,实现应用程序之间的协同。优点在于能够在客户端和服务器之间进行同步和异步的连接,并且在任何时刻都可以将消息进行传送和转发,是分布式系统中非常重要的组件,主要用来解决应用耦合、异步通信、流量削峰等问题。 2、作用 1、消息中间件主要作用 解耦 冗余(存储) 扩展性 削峰 可恢复性 顺序保证 缓冲 异步通信 2、消息中间件的两种模式 1、P2P模式 P2P模式包含三个角色:消息队列(Queue)、发送者(Sender)、接收者(Receiver)。每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到它们被消费或超时。 P2P的特点: 每个消息只有一个消费者(Consumer),即一旦被消费,消息就不再在消息队列中 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行它不会影响到消息被发送到队列 接收者在成功接收消息之后需向队列应答成功

Handler机制中的消息队列

拟墨画扇 提交于 2020-02-26 14:19:26
学习自 蘑菇街大佬 Handler机制可以看成是一个消息阻塞队列,当有消息时立即处理消息,没有消息时则阻塞.在Android系统中APP启动后很快进入死循环,不断读取MessageQueue中的消息,有消息则立即处理,没有消息则阻塞.Android的View绘制,事件响应(点击,触摸屏幕等)都是把消息发送到了主线程的消息队列,包括自己在主线程创建的handler最终也是把消息插入到了主线程消息队列中,并最终分发到到指定的handler处理消息. handler.send(msg) ->sendMessageDelayed(msg, 0) ->sendMessageAtTime(msg, SystemClock.uptimeMillis() + delayMillis) ->enqueueMessage(queue, msg, uptimeMillis) //这里就是进入到消息队列,进入的是主线程的Looper(MainLooper) ->queue.enqueueMessage(msg, uptimeMillis); 当出队的时候会根据msg中的一个成员变量target(这个target就是handler)来分发的对应的hand 大专栏 Handler机制中的消息队列 ler,这样handler就拿到了信息, for (;;) { // 不断从 MessageQueue 获取 消息

Kafka入门集群部署

[亡魂溺海] 提交于 2020-02-26 13:37:22
一、Kafka 概述 Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于 大数据实时处理领域。 二、消息队列的两种模式 (1)点对点模式(一对一 ,消费者主动拉取数据,消息收到后消息清除) 消息生产者生产消息发送到Queue中,然后消息消费者从Queue中取出并且消费消息。 消息被消费以后,queue 中不再有存储,所以消息消费者不可能消费到已经被消费的消息。 Queue 支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。 (2)发布/订阅模式(一对多 ,消费者消费数据之后不会清除消息) 消息生产者(发布)将消息发布到 topic 中,同时有多个消息消费者(订阅)消费该消 息。和点对点方式不同,发布到 topic 的消息会被所有订阅者消费。 三、kafka下载和环境准备 kafaka下载地址: http://kafka.apache.org/downloads.html 选择自己需要对应的scala版本进行下载。 3.1 集群规划 准备三台虚拟机这三台虚拟机也完成了zookeeper的集群规划,没有完成的可以参考这一篇 Zookeeper集群部署 。 四、配置环境 4.1 解压安装包,并修改解压后的文件名称 tar - zxvf kafka_2 . 12 - 2.3 .0 . tgz mv kafka_2 . 12 -