1.RabbitMQ 安装 RabbitMQ 的安装可以参考官方文档:https://www.rabbitmq.com/download.html 2.管理页面 rabbitmq-management插件提供基于HTTP的API方式管理和监控你的RabbitMQ服务器. 2.1.开启 rabbitmq_management 插件 rabbitmq-plugins enable rabbitmq_management windows 下运行如下命令 rabbitmq-plugins.bat ena…
1.什么是延迟队列 延迟队列中存储延迟消息,延迟消息是指当消息被发送到队列中不会立即消费,而是等待一段时间后再消费该消息. 延迟队列很多应用场景,一个典型的应用场景是订单未支付超时取消,用户下单之后30分钟内未支付成功,则把订单取消. 2.使用要求 RabbitMQ 本身没有直接支持延迟队列的功能,但是可以通过过期时间TTL和死信队列来模拟延迟队列. 过期时间TTL 可以参考文章: [RabbitMQ 实战指南]一 过期时间TTL 死信队列可以参考文章:[RabbitMQ 实战指南]一 死信队列…
什么是消息中间件 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串.JSON等,也可以很复杂,比如内嵌对象. 消息队列中间件(Message Queue Middleware,简称为MQ)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信. 面向消息的中间件(简称为MOM,Message Oriented Middleware)提供了以松散耦合的灵活…
1.消息中间件 1.1.什么是消息中间件 消息中间件(Message Queue Middleware,简称 MQ)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通道来进行分布式系统的集成. 1.2.消息中间件的作用 解耦:在项目启动之初来预测将来项目会碰到什么需求,是极其困难的.消息队列在处理过程中间插入了一个隐含的.基于数据的接口层,两边的处理过程都要实现这一接口.这允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 冗余(存储):有时在处理数据的时候…
RabbitMQ的日出输入方式有很多种:file.console .syslog .exchange. 在RabbitMQ中,日志级别有none(0).critical(4).error(8).warning(16).info(64).debug(128)这5种,如果消息的级别高于日志的级别则不会被发送,比如warning级别的日志包含warning和error级别的日志,none表示不输出日志. 日志文件 RabbitMQ的日志文件默认存放在/var/log/rabbitmq文件夹内. 通过c…
开发中关键的Class和Interface有Channel.Connection.ConnectionFactory.Consumer等,与RabbitMQ相关的开发工作,基本上是围绕Connection和Channel这两个类展开的. 连接RabbitMQ 一个Connection可以创建多个Channel实例,但Channel实例不能在线程间共享,应用程序应该为每一个线程开辟一个Channel. Channel或者Connection中有个isOpen方法可以用来检测其是否已处于开启状态.但…
1.死信队列 DLX,全称为 Dead-Letter-Exchange,可以称之为死信交换器.当消息在一个队列中变成死信(dead message)之后,它能被发送到另一个交换器中,这个交换器就是DLX,绑定DLX的队列就称之为死信队列. DLX 也是一个正常的交换器,和一般的交换器没有区别,它能在任何的队列上被指定,实际上就是设置某个队列的属性.当这个队列中存在死信时,RabbitMQ就会自动地将这个消息重新发布到设置的DLX上去,进而被路由到另一个队列,即死信队列.然后可以监听这个死信队列中…
RabbitMQ 可以对消息和队列设置过期时间(TTL) 1.设置消息的TTL 目前有两种方式可以设置消息的TTL 第一种方式是通过队列属性设置,队列中所有消息都有相同的过期时间 第二种方式是对消息本身进行单独的设置,每条消息的TTL可以不同 如果两种方法一起使用,则消息的TTL已较小的数值为准. 1.1.通过设置队列属性来控制消息的TTL 在声明队列的时候可以通过 x-message-ttl 属性来控制消息的TTL, 这个参数的单位是毫秒.如果不设置 TTL.则表示此消息不会过期 ;如果将 T…
备份交换器 备份交换器,英文名称为Alternate Exchange,简称AE.通过在声明交换器(调用channel.ExchangeDeclare方法)时添加alternate-exchange参数来实现. 备份交换器工作流程如下: using (var channel = connection.CreateModel()) { //设置备胎交换器参数 var arguments = new Dictionary<string, object>(); arguments.Add("…
持久化 持久化可以提高RabbitMQ的可靠性,防止异常情况下的数据丢失.RabbitMQ的持久化分为三个部分:交换器的持久化.队列的持久化和消息的持久化. 交换器的持久化通过声明队列时将durable参数置为true实现.如果交换器不设置持久化,在RabbitMQ服务重启之后,相关交换器的元数据会丢失,但消息不会丢失,只是不能再将消息发送到这个交换器.一个长期使用的交换器来建议将其置为持久化的. 队列的持久化通过在声明队列时将durable参数置为true实现.如果队列不设置持久化,在Rabb…
RabbitMQ Management插件还提供了基于RESTful风格的HTTP API接口来方便调用.一共涉及4种HTTP方法:GET.PUT.DELETE和POST.GET方法一般用来获取如集群.节点.队列.交换器等信息.PUT方法用来创建资源,如交换器.队列之类的.DELETE方法用来删除资源.POST方法也是用来创建资源的,与PUT不同的是,POST创建的是无法用具体名称的资源.比如绑定关系(bindings)和发布消息(publish)无法指定一个具体的名称. 点击Web管理界面左下…
RabbitMQ好文 Rabbitmq Java Client Api详解 tohxyblog-博客园-rabbitMQ教程系列 robertohuang-CSDN-rabbitMQ教程系列 RabbitMQ 中文文档 RabbitMQ 能为你做些什么? RabbitMQ Quick(快速手册) RabbitMQ从入门到精通-CSDN专栏 RabbitMQ入门教程 For Java RabbitMQ 原理介绍及安装部署 RabbitMQ 技术入门与实战 RabbitMQ知多少 安装RabbitM…
缘由,最近换了工作,而新的项目中使用了celery+rabbitmq来实现一个分布式任务队列系统,为了能够维护好这套系统,只能来学习一下这两个组件,顺便把学习笔记记录下来,留作以后回顾,当然如果碰巧能帮助到也在学习这两个组件的同学,那就更好了,关于celery的部分见这里. 这组笔记来源于<rabbitmq实战:高效部署分布式消息队列> 该章开篇首先介绍了为什么需要引入消息队列,通过一个简单的认证模块的例子来展示了引入消息队列之后实现了模块之间的解耦,方便扩展. 补充一下自己的想法:我认为这里…
在go-micro中异步消息的收发是通过Broker这个组件来完成的,底层实现有RabbitMQ.Kafka.Redis等等很多种方式,这篇文章主要介绍go-micro使用RabbitMQ收发数据的方法和原理. Broker的核心功能 Broker的核心功能是Publish和Subscribe,也就是发布和订阅.它们的定义是: Publish(topic string, m *Message, opts ...PublishOption) error Subscribe(topic string…
rabbitMQ实战(一)---------使用pika库实现hello world 2016-05-18 23:29 本站整理 浏览(267)     pika是RabbitMQ团队编写的官方Python AMQP库.需要先安装pika:pip3 install pika有较详细的注释,就不再详细说明了生产者代码:hello_world_producer.py: import pika,sys #connect to the rabbitmq,use the default vhost cre…
RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现. 1. 介绍 RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现.用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面都非常的优秀.是当前最主流的消息中间件之一. RabbitMQ的官网:http://www.rabbitmq.com 2. AMQP AMQP,是应用层协议的一个开放标准,为面向消息…
前言: 最近在研究Modbus开发,如果只是简单的了解了一些modbus基础知识,但是不够系统和全面. 其实,modbus虽然比较简单,但是如果不注意有很多坑,特别是寄存器的位数,大小端处理,浮点数,长整数的处理等等.目前也没有什么合适的书籍系统介绍,帮助理解的. 刚刚搜了一下,只有最近清华出版的<Modbus软件开发实战指南>不错,应该是Modbus开发方面第一书,很系统很全面. 内容着重讲述如何快速入门并精通Modbus软件开发技术,适用于初学Modbus通信协议的读者,可以看看. 清华出…
目录 交换器.队列.绑定的声明 关于消息序列化 同一个队列多消费类型 注解将消息和消息头注入消费者方法 关于消费者确认 关于发送者确认模式 消费消息.死信队列和RetryTemplate RPC模式的消息(不常用) 关于消费模型 关于RabbitMq客户端的线程模型 在公司里一直在用RabbitMQ,由于api已经封装的很简单,关于RabbitMQ本身还有封装的实现没有了解,最近在看RabbitMQ实战这本书,结合网上的一些例子和spring文档,实现了RabbitMQ和spring的集成,对着…
1. websocket+rabbitmq实战 1.1. 前言   接到的需求是后台定向给指定web登录用户推送消息,且可能同一账号会登录多个客户端都要接收到消息 1.2. 遇坑 基于springboot环境搭建的websocket+rabbitmq,搭建完成后发现websocket每隔一段时间会断开,看网上有人因为nginx的连接超时机制断开,而我这似乎是因为长连接空闲时间太长而断开 经过测试,如果一直保持每隔段时间发送消息,那么连接不会断开,所以我采用了断开重连机制,分三种情况 服务器正常,…
上篇文章中,已经介绍了celery和RabbitMQ的安装以及基本用法. 本文将从工程的角度介绍如何使用celery. 1.配置和启动RabbitMQ 请参考celery+RabbitMQ实战记录. 2. 安装和使用celery 2.1 创建虚拟环境,并安装celery $ mkdir celery_demo $ cd celery_demo $ virtualenv -p python3 venv3 $ ./venv3/bin/pip install celery 项目的目录结构说明: --…
前言 最近在忙一个高考项目,看着系统顺利完成了这次高考,终于可以松口气了.看到那些即将参加高考的学生,也想起当年高三的自己. 下面分享下RabbitMQ实战经验,希望对大家有所帮助: 一.生产消息 关于RabbitMQ的基础使用,这里不再介绍了,项目中使用的是Exchange中的topic模式. 先上发消息的代码 private bool MarkErrorSend(string[] lstMsg) { try { var factory = new ConnectionFactory() {…
本文大纲: 1. RabbitMQ简介 2. RabbitMQ安装与配置 3. C# 如何使用RabbitMQ 4. 几种Exchange模式 5. RPC 远程过程调用 6. RabbitMQ高可用集群搭建 一.RabbitMQ简介 1.介绍   RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现.用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面都非常的优秀.是当前最主流的消息中间件之一. RabbitMQ官网…
原文:http://www.rabbitmq.com/configure.html RabbitMQ 提供了三种方式来定制服务器: 环境变量 定义端口,文件位置和名称(接受shell输入,或者在环境配置文件(rabbitmq-env.conf)中设置) 配置文件 为服务器组件设置权限,限制和集群,也可以定义插件设置. 运行时参数和策略 可在运行时进行修改集群设置 大部分设置都使用前面的两种方法,但本指南会全部讲解. 验证配置(怎样找到配置文件地址) 有效配置文件可通过检查RabbitMQ日志文件…
1 RabbitMQ 简介 1.1 介绍 RabbitMQ 是一个由 erlang 开发的基于 AMQP(Advanced Message Queue)协议的开源实现.用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面都非常的优秀,是当前最主流的消息中间件之一.RabbitMQ 官网:http://www.rabbitmq.com 1.2 AMQP AMQP 是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,…
从今天起,每天开始连载一章<STM32 HAL 库开发实战指南—基于F7>.欢迎各位阅读.点评.学习. 第1章  如何使用本书 1.1  本书的参考资料 本书参考资料为:<STM32F76xxx参考手册>和<Cortex®-M7内核编程手册>,这两本是ST官方的手册,属于精华版,面面俱到,无所不包.限于篇幅问题,本书不可能面面具到,着重框图分析和代码讲解,有关寄存器的详细描述则略过,在学习本书的时候,涉及到寄存器描述部分还请参考这两本手册,这样学习效果会更佳. 1.2…
1. RabbitMQ实战应用技巧 1.1. 前言 由于项目原因,之后会和RabbitMQ比较多的打交道,所以让我们来好好整理下RabbitMQ的应用实战技巧,尽量避免日后的采坑 1.2. 概述 RabbitMQ有几个重要的概念:虚拟主机,交换机,队列和绑定 虚拟主机:一个虚拟主机持有一组交换机.队列和绑定,我们可以从虚拟主机层面的颗粒度进行权限控制 交换机:Exchange用于转发消息,它并不存储消息,如果没有Queue队列绑定到Exchange,它会直接丢弃掉生产者发来的数据. 交换机还有个…
前言 1. SpringBoot整合配置详解 publisher-confirms,实现一个监听器用于监听Broker端给我们返回的确认请求:RabbitTemplate.ConfirmCallback publisher-returns,保证消息对Broker端是可达的,如果出现路由键不可达的情况,则使用监听器对不可达的消息进行后续的处理,保证消息的路由成功:RabbitTemplate.ReturnCallback 注意一点,在发送消息的时候对template进行配置mandatory=tr…
Spring Boot 集成 RabbitMQ 实战 特别说明: 本文主要参考了程序员 DD 的博客文章<Spring Boot中使用RabbitMQ>,在此向原作者表示感谢. Mac 上 RabbitMQ 的安装 这样子安装的话,RabbitMQ 的脚本是安装到 /usr/local/sbin 这个目录里的,并且不会自动添加到你的 PATH 里,所以要先添加下. PATH=$PATH:/usr/local/sbin export PATH=/usr/local/bin:/usr/local/…
建立Connection,创建Channel,注意Channel不能在线程间共享(非线程安全) 创建交换器和队列 消费者消费消息支持推和拉两种模式 推:通过consume方法订阅队列 拉:通过channel.basicGet方法获取消息 一旦consume以后,channel会被置为接收模式,直到取消队列的订阅为止,这期间RabbitMQ会不断地推消息给消费者.如果只获取单条消息,建议使用拉的模式,但是持续消费的时候需要使用推的模式来提高吞吐量,用循环拉的模式会影响RabbitMQ的性能. 消费…
什么是RabbitMQ? RabbitMQ 是一个消息代理.它的核心原理非常简单:接收和发送消息.你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处.在这个比喻中,RabbitMQ 就扮演着邮箱.邮局以及邮递员的角色. RabbitMQ 和邮局的主要区别是,它不是用来处理纸张的,它是用来接收.存储和发送消息(message)这种二进制数据的. 本文主要演示是Springboot+RabbitMQ简单整合+实例说明 关于安装RabbitMQ,由于RabbitMQ是用Er…