RabbitMq (1)】的更多相关文章

RabbitMQ(六)远程连接 默认情况下,rabbitmq使用`guest`来连接本地(localhost)的server,当需要远程连接时,就会失效. "guest" user can only connect via localhost 官方文档:http://www.rabbitmq.com/access-control.html 如果必须使用`guest`用户来进行远程登录,需要修改配置 [{rabbit, [{loopback_users, []}]}]. (1)那么首先需…
RabbitMQ(五) -- topics `rabbitmq`中的`topic exchange`将路由键和某模式进行匹配,从而类似于正则匹配的方式去接收喜欢的信息. topic exchange 如果想使用`topic`模式,那么可以随意设置`routing_key`.相反,需要按照一定的要求设定该值.`routing_key`在topic模式中应该选择一组拥有特定属性的单词作为该值. \* (star) can substitute for exactly one word. # (has…
RabbitMQ(四) -- Routing `rabbitmq`可以通过路由选择订阅者来发布消息. Bindings 通过下面的函数绑定Exchange与消息队列: channel.queue_bind(exchange=exchange_name, queue=queue_name) 可以通过添加`routing_key`来做路由选择,如下: channel.queue_bind(exchange=exchange_name, queue=queue_name, routing_key='b…
RabbitMQ(三) -- Publish/Subscribe `rabbitmq`支持一对多的模式,一般称为发布/订阅.也就是说,生产者产生一条消息后,`rabbitmq`会把该消息分发给所有的消费者. Exchanges 之前的教程中,仅仅使用了基本的消息模型: 生产者产生消息 把消息添加到消息队列 消费者接收消息 而在`rabbitmq完整的消息模型`中,并不是这样的.事实上,生产者并不知道消息是否发送到队列,而是把消息直接发送给`Exchanges`. `Exchanges`的功能理解…
RabbitMQ(一) -- Work Queues RabbitMQ使用Work Queues的主要目的是为了避免资源使用密集的任务,它不同于定时任务处理的方式,而是把任务封装为消息添加到队列中.而消息队列正是共享于多个工作者中使用,它们可以随意pop出数据进行处理. 消息的持久化 Message durability 为了保证`rabbitmq`意外重启等原因造成的消息丢失,通过设置消息的durable来实现数据的持久化,但是需要生产者和消费者同时设置持久化才能生效. 需要注意的是,`rab…
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37706355 上一篇博客中,我们进步改良了我们的日志系统.我们使用direct类型转发器,使得接收者有能力进行选择性的接收日志,,而非fanout那样,只能够无脑的转发,如果你还不了解:RabbitMQ (四) 路由选择 (Routing). 虽然使用direct类型改良了我们的系统,但是仍然存在一些局限性:它不能够基于多重条件进行路由选择. 在我们的日志系统中,我们有可能希望…
上一篇博客我们建立了一个简单的日志系统,我们能够广播日志消息给所有你的接收者,如果你不了解,请查看:RabbitMQ (三) 发布/订阅.本篇博客我们准备给日志系统添加新的特性,让日志接收者能够订阅部分消息.例如,我们可以仅仅将致命的错误写入日志文件,然而仍然在控制面板上打印出所有的其他类型的日志消息. 1.绑定(Bindings) 在上一篇博客中我们已经使用过绑定.类似下面的代码: channel.queueBind(queueName, EXCHANGE_NAME, ""); 绑定…
转发请标明出处:http://blog.csdn.net/lmj623565791/article/details/37657225 本系列教程主要来自于官网入门教程的翻译,然后自己进行了部分的修改与实验,内容仅供参考. 上一篇博客中,我们实现了工作队列,并且我们的工作队列中的一个任务只会发给一个工作者,除非某个工作者未完成任务意外被杀死,会转发给另外的工作者,如果你还不了解:RabbitMQ (二)工作队列.这篇博客中,我们会做一些改变,就是把一个消息发给多个消费者,这种模式称之为发布/订阅(…
转自 http://blog.csdn.net/xiaoxian8023/article/details/48806871 翻译地址:http://www.rabbitmq.com/tutorials/tutorial-five-java.html 在上一篇博文中,我们进一步改良了日志系统.使用Direct类型的转换器,使得接收者有能力进行选择性的接收日志,,而非fanout那样,只能够无脑的转发,如果你还不了解,请阅读:轻松搞定RabbitMQ(四)——发布/订阅. 虽然使用Direct类型的…
在RabbitMQ(二)AMQP协议mandatory和immediate标志位区别中我们提到,在RabbitMQ3.0以后的版本里,去掉了immediate参数支持,要实现类似的确认功能要使用TTL和DLX.   TTL,Time-To-Live Extensions(过期时间) RabbitMQ 允许你对 message 和 queue 设置 TTL 值. Per-Queue Message TTL 通过在 queue.declare 中设置 x-message-ttl 参数,可以控制被 p…
RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.作为一名合格的开发者,有必要了解一下相关知识,RabbitMQ(一)已经入门RabbitMQ,本文介绍RabbitMQ的高级特性. 过期时间(TTL) Time To Live,也就是生存时间,是一条消息在队列中的最大存活时间,单位是毫秒.了解Redis的朋友应该一看就明白,二者很像. RabbitMQ可以对消息和队列设置TTL. RabbitMQ支持设置消息的过期时间,在消息发送的时候可以进行指定,每条消…
前言 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之一.当今市面上有很多主流的消息中间件,如老牌的ActiveMQ.RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等.今天主要来介绍了下几大主流消息中间件的区别与联系. 1. 主流消息中间件介绍--ActiveMQ ActiveMQ是由Apache出品,ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的JMS P…
前言 本章学习,我们可以了解到以下知识点: 互联网大厂为什么选择RabbitMQ? RabbiMQ的高性能之道是如何做到的? 什么是AMQP高级协议? AMQP核心概念是什么? RabbitMQ整体架构模型是什么样子的? RabbitMQ消息是如何流转的? 1. 初识RabbitMQ RabbitMQ 是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据(RabbitMQ能够实现跨语言跨平台的机制,),RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ…
前言 在前面的文章中我们介绍过RabbitMQ的搭建:RabbitMQ的安装过以及各大主流消息中间件的对比:,本章就主要来介绍下我们之前安装的管控台是如何使用以及如何通过命令行进行操作. 1. 命令行操作 1.1 基础服务的命令操作 rabbitmqctl stop_app:关闭应用 rabbitmqctl start_app:启动应用 rabbtmqctl status:节点状态 rabbitmqctl add_user username password:添加用户 rabbitmqctl l…
前言 本章我们来一次快速入门RabbitMQ--生产者与消费者.需要构建一个生产端与消费端的模型.什么意思呢?我们的生产者发送一条消息,投递到RabbitMQ集群也就是Broker. 我们的消费端进行监听RabbitMQ,当发现队列中有消息后,就进行消费. 1. 环境准备 本次整合主要采用SpringBoot框架,需要对SpringBoot的使用有一定了解. 2.大概步骤 我们来看下大概步骤: ConnectionFacorty:获取连接工厂 Connection:一个连接 Channel:数据…
前言 来了解RabbitMQ一个重要的概念:Exchange交换机 1. Exchange概念 Exchange:接收消息,并根据路由键转发消息所绑定的队列. 蓝色框:客户端发送消息至交换机,通过路由键路由至指定的队列. 黄色框:交换机和队列通过路由键有一个绑定的关系. 绿色框:消费端通过监听队列来接收消息. 2. 交换机属性 Name:交换机名称 Type:交换机类型--direct.topic.fanout.headers.sharding(此篇不讲) Durability:是否需要持久化,…
前言 前面我们介绍了RabbitMQ的安装.各大消息中间件的对比.AMQP核心概念.管控台的使用.快速入门RabbitMQ.本章将介绍RabbitMQ的高级特性.分两篇(上/下)进行介绍. 消息如何保障100%的投递成功? 幂等性概念详解 在海量订单产生的业务高峰期,如何避免消息的重复消费的问题? Confirm确认消息.Return返回消息 1 消息如何保障100%的投递成功? 1.1 什么是生产端的可靠性投递? 保障消息的成功发出 保障MQ节点的成功接收 发送端收到MQ节点(Broker)确…
前言 上一篇消息中间件--RabbitMQ(七)高级特性全在这里!(上)中我们介绍了消息如何保障100%的投递成功?,幂等性概念详解,在海量订单产生的业务高峰期,如何避免消息的重复消费的问题?,Confirm确认消息.Return返回消息.这篇我们来介绍下下面内容. 自定义消费者 消息的限流(防止占用内存过多,节点宕机) 消息的ACK与重回队列 TTL消息 死信队列 1. 自定义消费者 1.1 消费端自定义监听 我们一般就在代码中编写while循环,进行consumer.nextDelivery…
前言 1. AMQP 核心组件 RabbitAdmin SpringAMQP声明 RabbitTemplate SimpleMessageListenerContainer MessageListenerAdapter MessageConverter 2. RabbitAdmin RabbitAdmin类可以很好的才注意RabbitMQ,在Spring中直接进行诸如即可. 注意: autoStartUp必须要设置为true,否则Spring容器不会加载RabbitAdmin类 RabbitAd…
前言 1. SpringBoot整合配置详解 publisher-confirms,实现一个监听器用于监听Broker端给我们返回的确认请求:RabbitTemplate.ConfirmCallback publisher-returns,保证消息对Broker端是可达的,如果出现路由键不可达的情况,则使用监听器对不可达的消息进行后续的处理,保证消息的路由成功:RabbitTemplate.ReturnCallback 注意一点,在发送消息的时候对template进行配置mandatory=tr…
目录 目录 前文列表 前言 通道 Channel 一个基本的生产者消费者实现 消费者 生产者 运行结果 应用预取计数 应用 ACK 机制 最后 前文列表 快速入门分布式消息队列之 RabbitMQ(1) 快速入门分布式消息队列之 RabbitMQ(2) 前言 在前文列表中,分别介绍了 RabbitMQ 的对象概念及其关键特性,本篇将通过编程的方式来回溯这些知识点,从实践应用的角度继续深入 RabbitMQ. 安装 RabbitMQ 的 Python 客户端 pika: pip install p…
目录 目录 前文列表 RabbitMQ 的特性 Message Acknowledgment 消息应答 Prefetch Count 预取数 RPC 远程过程调用 vhost 虚拟主机 插件系统 最后 前文列表 快速入门分布式消息队列之 RabbitMQ(1) RabbitMQ 的特性 紧接上文,继续来看 RabbitMQ 都有哪些值得我们关注的特性. Message Acknowledgment 消息应答 假设一个场景,消费者接收到了消息,但却在处理消息的过程中发生了意外退出的情况,那么此次消…
引言 RabbitMQ的模型是生产者发送信息到 Broker (代理),消费者从 Broker 中取出信息.但是生产者怎么知道消息是否真的发送到 Broker 中了呢?Broker 又怎么知道消息到底有没有被消费者消费? 如果由于网络原因出现故障,生产者生产的消息未到达 Broker 或者 Broker 的消息被虚假消费,而它们又不知道,就会产生很严重的问题,如重复消费等. RabbitMQ的消息确认流程 从图中可以看出: 消息确认机制分为生产者确认和消费者确认 ConfirmCallback…
官方的使用教程(测试运行) 1."Hello World!" -- 发送接收 We're about to tell the server to deliver us the messages from the queue. Since it will push us messages asynchronously, we provide a callback. That is what EventingBasicConsumer.Received event handler does…
一.启用 rabbitmq_management 插件(官网提供的 web 版管理工具) cd /usr/sbin rabbitmq-plugins enable rabbitmq_management 二.由于默认 guest 用户限制了 localhost 访问权限,所以需要新增一个用户,同样赋予同 guest 的权限(administrator) 新增一个用户名为 tangqun 的用户 rabbitmqctl add_user tangqun ****** 设置用户名为 tangqun…
官网:http://www.rabbitmq.com/ 一.什么是RabbitMQ(官方话)? 1.稳健的应用消息系统 2.容易使用 3.可以运行在主流操作系统上 4.支持大部分的开发平台(Java..NET.Ruby.Python.PHP.JavaScript...) 5.开源并且商业支持 二.安装(Centos 7,别的操作系统可以参考官网) 1.安装 Erlang,参考地址:https://www.erlang-solutions.com/resources/download.html 1…
虽然使用direct类型改良了我们的系统,但是仍然存在一些局限性:它不能够基于多重条件进行路由选择. 在我们的日志系统中,我们有可能希望不仅根据日志的级别而且想根据日志的来源进行订阅.这个概念类似unix工具:syslog,它转发日志基于严重性(info/warning/crit…)和设备(auth/cron/kern…) 这样可能给我们更多的灵活性:我们可能只想订阅来自’cron’的致命错误日志,而不是来自’kern’的. 为了在我们的系统中实现上述的需求,我们需要学习稍微复杂的主题类型的转发…
本篇博客我们准备给日志系统添加新的特性,让日志接收者能够订阅部分消息.例如,我们可以仅仅将致命的错误写入日志文件,然而仍然在控制面板上打印出所有的其他类型的日志消息. 1.绑定(Bindings) 在上一篇博客中我们已经使用过绑定.类似下面的代码: channel.queueBind(queueName, EXCHANGE_NAME, ""); 绑定表示转发器与队列之间的关系.我们也可以简单的认为:队列对该转发器上的消息感兴趣. 绑定可以附带一个额外的参数routingKey.为了与避…
这篇博客中,我们会做一些改变,就是把一个消息发给多个消费者,这种模式称之为发布/订阅(类似观察者模式). 为了验证这种模式,我们准备构建一个简单的日志系统.这个系统包含两类程序,一类程序发动日志,另一类程序接收和处理日志. 在我们的日志系统中,每一个运行的接收者程序都会收到日志.然后我们实现,一个接收者将接收到的数据写到硬盘上,与此同时,另一个接收者把接收到的消息展现在屏幕上. 本质上来说,就是发布的日志消息会转发给所有的接收者. 1.转发器(Exchanges) 前面的博客中我们主要的介绍都是…
这篇中我们将会创建一个工作队列用来在工作者(consumer)间分发耗时任务.工作队列的主要任务是:避免立刻执行资源密集型任务,然后必须等待其完成.相反地,我们进行任务调度:我们把任务封装为消息发送给队列.工作进行在后台运行并不断的从队列中取出任务然后执行.当你运行了多个工作进程时,任务队列中的任务将会被工作进程共享执行. 这样的概念在web应用中极其有用,当在很短的HTTP请求间需要执行复杂的任务. 1. 准备 我们使用Thread.sleep来模拟耗时的任务.我们在发送到队列的消息的末尾添加…