RabbitMQ

RabbitMQ 死信/死信队列

有些话、适合烂在心里 提交于 2020-03-02 00:06:21
DLX Dead Letter Exchange 的缩写 DLX也叫死信邮箱(网上的译法),死信交换机(字面翻译)。归根结底就是一个交换机,当队列中出现死信时,通过这个交换机将死信重新发送到死信队列中(指定好rabbitmq会自动发送)。 什么是死信 什么是死信呢?官方给出三个说法: 消息被拒绝(basic.reject或basic.nack)并且requeue=false. 消息TTL过期 队列达到最大长度(队列满了,无法再添加数据到mq中) 什么是死信交换机 在定义业务队列的时候,要考虑指定一个死信交换机,死信交换机可以和任何一个普通的队列进行绑定,然后在业务队列出现死信的时候就会将数据发送到死信队列。 什么是死信队列 死信队列实际上就是一个普通的队列,只是这个队列跟死信交换机进行了绑定,用来存放死信而已。 如何使用死信交换机 #####定义业务(普通)队列的时候指定参数 x-dead-letter-exchange : 用来设置死信后发送的交换机 x-dead-letter-routing-key :用来设置死信的routingKey 死信交换机图解 ![![ ] 创建业务队列 @Bean public Queue mailQueue() { Map<String, Object> map = new HashMap<String, Object>(); map.put("x

RabbitMQ和kafka的区别

走远了吗. 提交于 2020-03-01 13:42:28
1.应用场景方面 RabbitMQ:用于实时的,对可靠性要求较高的消息传递上。 kafka:用于处于活跃的流式数据,大数据量的数据处理上。 2.架构模型方面 producer,broker,consumer RabbitMQ:以broker为中心,有消息的确认机制 kafka:以consumer为中心,无消息的确认机制 3.吞吐量方面 RabbitMQ:支持消息的可靠的传递,支持事务,不支持批量操作,基于存储的可靠性的要求存储可以采用内存或硬盘,吞吐量小。 kafka:内部采用消息的批量处理,数据的存储和获取是本地磁盘顺序批量操作,消息处理的效率高,吞吐量高。 4.集群负载均衡方面 RabbitMQ:本身不支持负载均衡,需要loadbalancer的支持 kafka:采用zookeeper对集群中的broker,consumer进行管理,可以注册topic到zookeeper上,通过zookeeper的协调机制,producer保存对应的topic的broker信息,可以随机或者轮询发送到broker上,producer可以基于语义指定分片,消息发送到broker的某个分片上。 来源: oschina 链接: https://my.oschina.net/u/2320053/blog/3011347

RabbitMQ---SpringBoot整合RabbitMQ(Fanout交换器)

旧街凉风 提交于 2020-03-01 10:12:54
Fanout交换器特点: 各个队列与Topic交换器之间没有路由键绑定配置,发送者发送一条消息给交换器, 只要与此交换器绑定的队列,都会接收到消息。 生产者module,只需要指定交换器,发送消息也只需要指定交换器即可 pom.xml导入RabbitMQ坐标 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> application.properties配置RabbitMQ信息 #RabbitMQ基本信息 spring.rabbitmq.host=182.61.40.184 spring.rabbitmq.port=5672 spring.rabbitmq.username=rabbitmq spring.rabbitmq.password=rabbitmq #自定义配置 #设置交换器名称 spring.rabbitmq.exchange.name=fanoutExchange 创建Controller,通过浏览器请求,发送消息到RabbitMQ @Controller public class RabbitMQController { @Autowired private

RabbitMQ---SpringBoot整合RabbitMQ(Topic交换器)

吃可爱长大的小学妹 提交于 2020-03-01 10:02:23
Topic交换器特点: 各个队列与Topic交换器之间的路由键配置 模糊 ,发送者发送一条消息,只要 路由键符合规则 的队列就能接收到消息。 创建消息生产者module:配置交换器名称和路由键信息。消息发送时,需要指定交换器和路由键。 pom.xml导入RabbitMQ坐标 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> application.properties配置RabbitMQ信息 #RabbitMQ基本信息 spring.rabbitmq.host=182.61.40.184 spring.rabbitmq.port=5672 spring.rabbitmq.username=rabbitmq spring.rabbitmq.password=rabbitmq #自定义配置 #设置交换器名称 spring.rabbitmq.exchange=topicExchange #设置路由键 user.log.info spring.rabbitmq.routingkey.user.info=user.log.info #设置路由键 user.log.error spring

rabbitmq的概念及作用

a 夏天 提交于 2020-03-01 05:00:12
基本概念 Broker 容器: 它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输, 关系 “exchange”接收发布应用程序发送的消息,并根据一定的规则将这些消息路由到“消息队列”。 “message queue”存储消息,直到这些消息被消费者安全处理完为止。 “binding”定义了exchange和message queue之间的关联,提供路由规则。 Exchange 和 Routing_Key 交换器,根据类型自带规则,一般和Queue配合。 Exchange的类型表格: 类型 名称xxxxxxxxx 描述 Direct Exchange 直接匹配 通过Exchange名称+RountingKey来发送与接收消息. Fanout Exchange 广播订阅 向所有的消费者发布消息,但是只有消费者将队列绑定到该路由器才能收到消息,忽略Routing Key. Topic Exchange 主题订阅 根据Routing_Key的规则匹配消息,可以使用通配符: * 匹配任意单词 # 匹配单个或多个单词 Headers Exchange 消息头订阅 用的不多,略 Queue 队列,也就是消息载体 Queue 和 AnonymousQueue 的区别 都是Queue的2种实现。 Queue默认值: durable : true #

RabbitMQ Python 入门教程之HelloWorld

流过昼夜 提交于 2020-02-29 21:56:59
你好,世界 介绍 RabbitMQ是消息代理: 它接收并转发信息。举个例子: 小明从淘宝买了商品,配送员将快递投递到了快递柜, 小明再根据取件码去快递柜取快递。快递柜就相当于消息队列,快递员是生产者,小明是消费者。 生产者意味着发送, 所以发送信息的程序是生产者(Producer)。 尽管消息流经RabbitMQ和您的应用程序之中,但它们只能存储在队列之中, 甲队列仅由主机的存储器和磁盘限制和约束, 它本质上是一个大的消息缓冲器。许多生产者可以发送消息到同一个队列中,许多消费者可以尝试从一个队列中接收数据, 表示队列的方式。 消费与接收有相似的含义。消费者是一个程序,主要是等待接收信息。 生产者,消费者,消息队列不必位于同一主机上。一个应用程序既可以是消费者,也可以是生产者。 你好, 世界! 本部分内容中, 使用python编写两个小程序, 分别实现生产者和消费者。生产者进行数据发送,消费者进行数据接收并将其打印出来。 如图, P是生产者, 红色矩形相等于消息队列, C是消费者。 生产者将 hello 发送到队列中, 消费者从队列中接收 hello 。 RabbitMQ库 RabbitMQ使用多种协议。本教程使用AMQP 0-9-1,这是一种开放的通用消息传递协议。RabbitMQ有 许多不同语言 的客户。在本教程系列中,我们将使用 Pika 1.0.0

RabbitTMQ实战 高效部署分布式消息队列笔记

戏子无情 提交于 2020-02-29 21:55:58
一、概念部分 1.各种常见MQ比较 ActiveMQ性能和稳定性较差 适用于中小型企业 kaffka不支持事务,对消息的重复、丢失、错误没有严格要求 性能最高 内存存储 RocketMQ java开发的,商业版支持分布式事务 RabbitMQ Erlang开发的,基于AMQP协议实现,稳定性可靠性很高,性能不错 RabbitMQ提供可靠性投递(confirm)、返回模式(return) 2.AMQP协议 1)AMQP(Advanced Message Queuing Protocal,高级消息队列协议) 2)Server:又称Broker,接受客户端的链接,实现AMQP实体服务 3)Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可以建立多Channel,每个Channel代表一个会话任务。 用程序会和代理服务器之间创建一条TCP连接,即AMQP信道。信道是建立在真实TCP连接内的虚拟连接,每条信道会被指派一个唯一ID。建立和销毁TCP会话开销很大,信道方式不会给系统TCP栈造成额外负担。 4)Messaage:消息,由标签Properties和承载数据body组成。 5)Virtual host:虚拟主机,用于进行逻辑隔离,是最上层消息路由。 一个Virtual host里面可以有若干个Exchange和Queue

Kafka or RabbitMQ:消息中间件选型深入分析

会有一股神秘感。 提交于 2020-02-29 21:49:32
一、前言 消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等等功能,其作为分布式系统架构中的一个重要组件,有着举足轻重的地位。 目前开源的消息中间件可谓是琳琅满目,能让大家耳熟能详的就有很多,比如ActiveMQ、RabbitMQ、Kafka、RocketMQ、ZeroMQ等。不管选择其中的哪一款,都会有用的不趁手的地方,毕竟不是为你量身定制的。有些大厂在长期的使用过程中积累了一定的经验,其消息队列的使用场景也相对稳定固化,或者目前市面上的消息中间件无法满足自身需求,并且也具备足够的精力和人力而选择自研来为自己量身打造一款消息中间件。但是绝大多数公司还是不会选择重复造轮子,那么选择一款合适自己的消息中间件显得尤为重要。就算是前者,那么在自研出稳定且可靠的相关产品之前还是会经历这样一个选型过程。 在整体架构中引入消息中间件,势必要考虑很多因素,比如成本及收益问题,怎么样才能达到最优的性价比?虽然消息中间件种类繁多,但是各自都有各自的侧重点,选择合适自己、扬长避短无疑是最好的方式。如果你对此感到无所适从,本文或许可以参考一二。 二、各类消息队列简述 ActiveMQ 是Apache出品的

springcloud微服务实战_09_消息驱动

家住魔仙堡 提交于 2020-02-29 15:10:36
9.1 spring cloud stream 简介 spring cloud stream 是一个用来为微服务应用提供消息驱动能力的框架. 它可以基于 springboot 来单独的创建独立的,可用于生产的 spring 的应用程序. 它通过使用 spring integration 来连接消息代理中间件以实现消息事件驱动. 它为一些一些供应商的消息中间件产品提供了个性化的自动化配置,并且引入了发布-订阅,消费组以及分区这三个核心概念. 快速入门 下面我们通过构建一个简单的示例来对Spring Cloud Stream有一个初步认识。该示例主要目标是构建一个基于Spring Boot的微服务应用,这个微服务应用将通过使用消息中间件RabbitMQ来接收消息并将消息打印到日志中。所以,在进行下面步骤之前请先确认已经在本地安装了RabbitMQ 构建一个Spring Cloud Stream消费者 创建一个基础的Spring Boot工程,命名为:stream-hello 编辑 build.gradle 中的依赖关系,引入Spring Cloud Stream对RabbitMQ的支持,具体如下: dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation

RabbitMQ 系列(一)AMQP协议

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-29 09:59:53
介绍 RabbitMQ 前,有必须先了解一下 AMQP 协议。 AMQP 协议是一个高级抽象层消息通信协议, RabbitMQ 是 AMQP 协议的实现。它主要包括以下组件: 1. Server(broker): 接受客户端连接,实现 AMQP 消息队列和路由功能的进程。 2. Virtual Host:其实是一个虚拟概念,类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和Queue,但是权限控制的最小粒度是Virtual Host 3.Exchange:接受生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列。ExchangeType决定了Exchange路由消息的行为,例如,在RabbitMQ中,ExchangeType有direct、Fanout和Topic三种,不同类型的Exchange路由的行为是不一样的。 4. Message Queue :消息队列,用于存储还未被消费者消费的消息。 5.Message: 由Header和Body组成,Header是由生产者添加的各种属性的集合,包括Message是否被持久化、由哪个Message Queue接受、优先级是多少等。而Body是真正需要传输的APP数据。 6. Binding:Binding 联系了 Exchange 与 Message Queue 。 Exchange