RabbitMQ延迟消息插件仍然在实验阶段。你使用这个功能要自担风险。

RabbitMQ延迟消息插件为RabbitMQ增加了新的交换机类型,允许延时消息投递。

EasyNetQ为交换机通过定义一种新的日程类型:DelayedExchangeScheduler来支持这种能力。

这样允许你使用之前同样的Future Publish接口,但是取消Future Message会抛出异常。因为延迟消息插件不支持消息取消,不管你在调用FuturePublish是否指定了cancellationKey,或当你调用CancelFuturePublish时,调度器将会抛出NotImplementedException异常。

下面例子展示的是:你如何发布一个消息,这个消息会在未来3个月后收到这个消息。

bus = RabbitHutch.CreateBus("host=localhost",
x=> x.Register<IScheduler,DelayedExchangeScheduler>()); var followUpCallMessage = new FollowUpCallMessage( .. ); bus.FuturePublish(DateTime.UtcNow.AddMonths(3), followUpCallMessage);

第一行代码告示EasyNetQ使用新的支持延迟消息交换机作为调度器。下面,消息被创建,然后在发布时,指定了投递时间是3个月后。注意:FuturePublish使用了UTC时间。

插件安装

可以在Community Plugins page找到延迟消息插件。下载与你安装的RabbitMQ对应 .ez文件,拷贝这个文件到RabbitMQ plugin文件夹下,然后通过运行下面的命令启动之。

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

这个插件要求RabbitMQ最低版本为3.4或更新版本。

它是怎么运行的

当你调用bus.FuturePublish(..),EasyNetQ跟正常的交换机和binds一起,自动创建了一个新的 x-delayed-message交换机,这个消息被发送到这个延迟交换机上,并存储这个消息,直到到期时去投递这个消息。就在投递这个时刻,这个消息会被路由到普通交换机,然后从普通交换机到绑定的队列中。

当你调用Publish(..)方法,消息会发布到正常交换机, 防止降低使用与x-delayed-message有关系的交换机的性能。

延迟交换机持久化消息使用了Mnesia.这样避免在服务器停机时丢失消息。在服务器恢复之后,所有符合条件的消息将会按计划日程投递。

取消Future消息

如前所述,延迟消息插件不支持消息取消,因此这个功能是不支持的。任何调用FuturePublish时指定cancellationKey,或者调用CancelFuturePublish,都会抛出NotImplementedException异常。

如果你需要这个功能,请上一篇所讲的使用Scheduler 服务,具体参考EasyNetQ之用Future Publish发布预定中事件

英文地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Support-for-Delayed-Messages-Plugin

本文地址:http://www.cnblogs.com/HuangLiang/p/EasyNetQ_Support_for_Delayed_Messages_Plugin.html

我的微信订阅号:open_dotNET

15-EasyNetQ之对延迟消息插件的支持的更多相关文章

  1. EasyNetQ使用(八)【对延迟消息插件的支持,自动订阅者】

    RabbitMQ延迟消息插件仍然在实验阶段.你使用这个功能要自担风险. RabbitMQ延迟消息插件为RabbitMQ增加了新的交换机类型,允许延时消息投递. EasyNetQ为交换机通过定义一种新的 ...

  2. RabbitMQ延迟消息学习

    准备做一个禁言自动解除的功能,立马想到了订单的超时自动解除,刚好最近在看RabbitMQ的实现,于是想用它实现,查询了相关文档发现确实可以实现,动手编写了这篇短文. 准备工作 1.Erlang安装请参 ...

  3. Spring Cloud Stream 使用延迟消息实现定时任务(RabbitMQ)

    应用场景 通常在应用开发中我们会碰到定时任务的需求,比如未付款订单,超过一定时间后,系统自动取消订单并释放占有物品. 许多同学的第一反应就是通过spring的schedule定时任务轮询数据库来实现, ...

  4. SpringCloud 2020.0.4 系列之 Stream 延迟消息 的实现

    1. 概述 老话说的好:对待工作要有责任心,不仅要完成自己的部分,还要定期了解整体的进展. 言归正传,我们在开发产品时,常常会遇到一段时间后检查状态的场景,例如:用户下单场景,如果订单生成30分钟后, ...

  5. RocketMQ系列(五)广播与延迟消息

    今天要给大家介绍RocketMQ中的两个功能,一个是"广播",这个功能是比较基础的,几乎所有的mq产品都是支持这个功能的:另外一个是"延迟消费",这个应该算是R ...

  6. RocketMQ延迟消息的代码实战及原理分析

    RocketMQ简介 RocketMQ是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的.高可靠.万亿级容量.灵活可伸缩的消息发布与订阅服务. 它前身是MetaQ,是阿里基于Kafka ...

  7. RabbitMQ延迟消息:死信队列 | 延迟插件 | 二合一用法+踩坑手记+最佳使用心得

    前言 前段时间写过一篇: # RabbitMQ:消息丢失 | 消息重复 | 消息积压的原因+解决方案+网上学不到的使用心得 很多人加了我好友,说很喜欢这篇文章,也问了我一些问题. 因为最近工作比较忙, ...

  8. Spring Boot RabbitMQ 延迟消息实现完整版

    概述 曾经去网易面试的时候,面试官问了我一个问题,说 下完订单后,如果用户未支付,需要取消订单,可以怎么做 我当时的回答是,用定时任务扫描DB表即可.面试官不是很满意,提出: 用定时任务无法做到准实时 ...

  9. golang 实现延迟消息原理与方法

    实现延迟消息具体思路我是看的下面这篇文章 https://mp.weixin.qq.com/s/eDMV25YqCPYjxQG-dvqSqQ 实现延迟消息最主要的两个结构: 环形队列:通过golang ...

随机推荐

  1. Android性能优化系列总篇

    目前性能优化专题已完成以下部分: 性能优化总纲——性能问题及性能调优方式 性能优化第四篇——移动网络优化 性能优化第三篇——Java(Android)代码优化 性能优化第二篇——布局优化 性能优化第一 ...

  2. react:reducer-creator

    function createReducer(initialState, handlers) { return function reducer(state = initialState, actio ...

  3. python中的赋值与拷贝(浅拷贝与深拷贝)

    1.赋值与拷贝 直接赋值(b=a)是传引用,b改动a也会改动. a = [1, 2, 3, 4] b = a b[1] = 999 print(a, b) #[1, 999, 3, 4] [1, 99 ...

  4. string manipulation in game development-C # in Unity -

    ◇ string manipulation in game development-C # in Unity - It is about the various string ● defined as ...

  5. 几个Unity3d UI制作的解决方案.

    1.ex2D的渲染机制 (高效的原因) 在以往的2D插件中,渲染方式是每个sprite单独渲染,由Unity负责Dynamic Batching.在新版ex2D中,我们经过严谨的优化实现了独立的dyn ...

  6. 51nod 1085 背包问题

    在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数).求背包能够容纳的最大价值. 收起   输入 第1行,2个 ...

  7. php通过JavaBridge调用Java类库和不带包的自定义java类成功 但是调用带包的自定义Java类报错,该怎么解决

    php通过JavaBridge调用Java类库和不带包的自定义java类成功 但是调用带包的自定义Java类报错,Class.forName("com.mysql.jdbc.Driver&q ...

  8. (转)Android 自定义 spinner (背景、字体颜色)

    Android 自定义 spinner (背景.字体颜色) (2012-07-04 17:04:44)   1.准备两张图片,并做好9.png   2.在drawable中定义spinner_sele ...

  9. JMeter接口学习笔记2017

    协议学习地址:http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html 本篇学习笔记来自于慕课网上学习JMeter的学习笔记 学习 ...

  10. EMI (电磁干扰)

    EMI是指电子产品工作会对周边的其他电子产品造成干扰,与此关联的还有EMC规范.是电子电器产品经常遇上的问题.干扰种类有传导干扰和辐射干扰. 电磁干扰(Electromagnetic Interfer ...