国王小组:开发数字货币交易所源码搭建交易所中需要使用的插件

简介: 永续合约/秒合约/合约交易所开发详情,永续合约/秒合约/合约交易所系统开发技术方案深入分析代币合约流动性质押挖矿分红系统开发实现技术原理及源码部署交易所系统开发如何开发?数字货币交易所系统开发成熟技术案例去中心化交易所系统开发技术原理丨数字货币去中心化交易所系统开发(说明案例)数字货币交易所系统 数字货币交易所系统开发成品案例 数字货币交易所现成源码部署交易所系统开发案例说明丨数字货币交易所系统开发技术方案详情

RabbitMQ 延迟消息插件
该插件将延迟消息(或预定消息)添加到 RabbitMQ。

用户可以声明一个具有 x-delayed-message 类型的交换,然后发布带有自定义标题 x-delay 的消息,该标题以毫秒为单位表示消息的延迟时间。该消息将在 x-delay 毫秒后被传递到相应的队列中。

永续合约/秒合约/合约交易所开发详情,永续合约/秒合约/合约交易所系统开发技术方案
深入分析代币合约流动性质押挖矿分红系统开发实现技术原理及源码部署
交易所系统开发如何开发?数字货币交易所系统开发成熟技术案例
去中心化交易所系统开发技术原理丨数字货币去中心化交易所系统开发(说明案例)
数字货币交易所系统 数字货币交易所系统开发成品案例 数字货币交易所现成源码部署
交易所系统开发案例说明丨数字货币交易所系统开发技术方案详情
数字货币交易所系统开发方案详细丨数字货币交易所开发成品技术源码
合约交易系统设计与开发|永续合约交易所搭建,合约平台开发|永续合约交易所开发技术|特点介绍
秒合约交易所开发详细丨秒合约交易所系统开发详细及规则丨秒合约交易所系统源码部署
支持的 RabbitMQ 版本
此插件的最新版本以 RabbitMQ 3.10.x 为目标,早于 3.9.x 的系列不受支持。

支持的 Erlang/OTP 版本
此插件需要 Erlang 23.2 或更高版本,与 RabbitMQ 3.8.16+ 相同。

项目成熟度
该插件被认为是相当稳定的,只要用户了解其局限性,就有可能适合生产使用。

在其存在的 ~ 5 年中,它有一些问题和一个基本问题得到了修复。众所周知,它对一些用户来说工作得相当好。它也有已知的限制(见下面一节),包括那些与延迟和信息的复制以及延迟信息的数量有关的限制。

这个插件目前没有得到 Pivotal 的商业支持,但这并不意味着它将被放弃或 RabbitMQ 团队对未来改进它不感兴趣。然而,对于我们的小团队来说,这并不是一个高度优先事项。

因此,请用您的工作量来尝试一下,并由您自己决定。

安装
下载一个二进制版本
二进制版本是通过GitHub发布的。

与所有第三方插件一样,.ez 文件必须放在节点的插件目录中,并且可由 RabbitMQ 进程的有效用户读取。

要知道插件目录是什么,请使用 rabbitmq-plugins 目录

rabbitmq-plugins directories -s
启用插件
然后运行下面的命令。

rabbitmq-plugins enable rabbitmq_delayed_message_exchange
使用方法
要使用延迟消息功能,请声明一个类型为x-delayed-message的交换。

// ... 省略的代码 ...
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-delayed-type", "direct");
channel.exchangeDeclare("my-exchange", "x-delayed-message", true, false, args)。
// ... 更多代码 ...
请注意,我们传递了一个额外的头,叫做x-delayed-type,更多的内容在路由部分。

一旦我们声明了交换,我们就可以发布消息,提供一个标头,告诉插件要延迟多长时间。

// ...省略了代码 ...
byte[] messageBodyBytes = "delayed payload".getBytes("UTF-8")。
Map<String, Object> headers = new HashMap<String, Object>();
headers.put("x-delay", 5000);
AMQP.BasicProperties.Builder props = new AMQP.BasicProperties.Builder().headers(headers)。
channel.basicPublish("my-exchange", "", props.build(), messageBodyBytes)。

byte[] messageBodyBytes2 = "more delayed payload".getBytes("UTF-8")。
Map<String, Object> headers2 = new HashMap<String, Object>();
headers2.put("x-delay", 1000);
AMQP.BasicProperties.Builder props2 = new AMQP.BasicProperties.Builder().headers(headers2)。
channel.basicPublish("my-exchange", "", props2.build(), messageBodyBytes2)。
// ... 更多代码 ...
在上面的例子中,我们发布了两条消息,用x-delay头来指定延迟时间。在这个例子中,该插件将首先向我们的队列传递正文为 "更多延迟的有效载荷 "的消息,然后是正文为 "延迟的有效载荷 "的消息。

如果x-delay头不存在,那么该插件将继续无延迟地传送信息。

路由选择
这个插件允许通过x-delayed-type参数进行灵活的路由,这些参数可以在exchange.declaration中传递。在上面的例子中,我们使用 "直接 "作为交换类型。这意味着该插件将具有直接交换所显示的相同路由行为。

如果你想要一个不同的路由行为,那么你可以提供一个不同的交换类型,比如说 "主题"。你也可以指定由插件提供的交换类型。请注意,这个参数是必须的,而且必须指的是现有的交换类型。

性能影响
由于 "x-delayed-type "参数,人们可以用这个交换来代替其他交换,因为 "x-delayed-message "交换将只是作为代理。注意,如果你这样做,可能会有一些性能影响。

对于每个穿过 "x-delayed-message "交换的消息,该插件将尝试确定该消息是否必须过期,确保延迟在范围内,即:Delay > 0, Delay =< ?ERL_MAX_T(在Erlang中,计时器可以设置为未来的(2^32)-1毫秒)。

如果前面的条件成立,那么消息将被持久化到Mnesia,一些其他的逻辑将被启动,以确定这个特定的消息延迟是否需要取代当前的预定定时器,等等。

这意味着,虽然人们可以使用这种交换来代替直接或扇出交换(或任何其他交换),但它将比使用实际交换要慢。如果你不需要延迟消息,那么就使用实际的交换。

限制
延迟的消息被存储在一个Mn中。

相关实践学习
5分钟轻松打造应对流量洪峰的稳定商城交易系统
本实验通过SAE极速部署一个微服务电商商城,同时结合RocketMQ异步解耦、削峰填谷的能力,带大家体验面对流量洪峰仍旧稳定可靠的商城交易系统!
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
打赏
0
0
0
0
10
分享
相关文章
LayUI upload上传组件上传文件的两种方式
LayUI upload上传组件上传文件的两种方式
907 0
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
128 0
缺乏中间证书导致通过HTTPS协议访问OSS异常
【10月更文挑战第4天】缺乏中间证书导致通过HTTPS协议访问OSS异常
528 4
Vue框架中根据域名获取租户ID的方法
通过上述方法,Vue应用可以根据域名动态获取租户ID,进而实现根据不同租户展示定制化信息的多租户系统功能。这种技术不仅增加了应用的灵活性,也提升了用户体验。
234 2
Java 包(package)的作用详解
在 Java 中,包(package)用于组织和管理类与接口,具有多项关键作用:1)系统化组织代码,便于理解和维护;2)提供命名空间,避免类名冲突;3)支持访问控制,如 public、protected、默认和 private,增强封装性;4)提升代码可维护性,实现模块化开发;5)简化导入机制,使代码更简洁;6)促进模块化编程,提高代码重用率;7)管理第三方库,避免命名冲突;8)支持 API 设计,便于功能调用;9)配合自动化构建工具,优化项目管理;10)促进团队协作,明确模块归属。合理运用包能显著提升代码质量和开发效率。
869 4
ThinkPHP 多应用配置,及不同域名访问不同应用的配置【详解】
本文详解了在ThinkPHP框架中配置多应用的方法,包括安装扩展、删除默认controller文件夹、创建多应用、修改配置文件以启用多应用、测试访问以及如何配置不同域名访问不同应用的步骤。
ThinkPHP 多应用配置,及不同域名访问不同应用的配置【详解】
|
12月前
|
laravel表单验证的exists、unique去除软删除字段的校验
虽然Laravel的验证系统非常强大和灵活,但在处理软删除数据时仍需要特别注意。通过正确使用验证规则,并在需要时创建自定义验证规则,你可以确保应用的数据验证既准确又高效。记得在对 `unique`和 `exists`规则进程自定义时,清晰地注明你排除软删除记录的意图,这将使得代码更容易理解和维护。
304 4
|
12月前
|
laravel中模型中$fillable的用法
通过正确使用 `fillable使线使Laravelfillable`或 `$guarded`属性是一项最佳实践。
275 1
【专栏:HTML进阶篇】HTML模板与Web组件:可复用的网页元素
【4月更文挑战第30天】HTML模板和Web组件提升网页开发效率和可维护性。HTML模板,如&lt;template&gt;元素和服务器端模板引擎,用于创建可复用的HTML结构。Web组件是自定义的HTML元素,结合影子DOM和模板,实现封装的可重用组件。两者助力构建高效、现代的网页和网站。
465 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问