最近在做支付平台,在支付成功之后需要涉及15/15/30/180/1800/1800/1800/1800/3600s的阶梯性异步通知,实现方法应该有很多,公司大神推荐还是用MQ,MQ的优势消峰、降耦合,异步等大家应该都有所了解,了解activeMq 、Kafaka、rokectMQ、rabbitMQ,总结如下:
activeMq 老牌消息中间件,api全面,但是吞吐量不大
Kafaka 吞吐量大,但是数据无法保证不丢失,主要面向大数据
rokectMQ:吞吐量大,保证数据不丢失,并且支持分布式事物,但是商业版需要收费
rabbitMQ:基于Erlang语言,吞吐量大,数据不易丢失
最后选择rabbitMQ
rabbitMQ简介
RabbitMQ是一个实现了AMQP(Advanced Message Queuing Protocol)高级消息队列协议的消息队列服务,用Erlang语言。
因为erlang语言产生就是为了解决电话网络高性能的需求,因此在分布式和并发方面RabbitMQ表现比较突出,了解RabbitMQ主要是需要了解Queue、exchange、生产者、消费者等,这里介绍的比较多
https://zhuanlan.zhihu.com/p/63700605
同步、异步、事务等的执行效率比较
https://juejin.im/post/5b54681bf265da0f82023014
安装rabbitMq
在linux内核的安装需要考虑linux的版本,我的是centeros8x,参考地址如下:https://www.cnblogs.com/yadongliang/p/12504187.html
rabbitmq和erlang版本对应关系(来自官方):
RabbitMQ version | Minimum required Erlang/OTP | Maximum supported Erlang/OTP | Notes |
3.8.4 | 21.3 | 23.x | Erlang/OTP 23 compatibility notes |
Erlang 22.x or 23.x is recommended | |||
Erlang 22.x dropped support for HiPE | |||
3.8.3 | 21.3 | 22.x | Erlang 22.x is recommended. |
3.8.2 | Erlang 22.x dropped support for HiPE | ||
3.8.1 | |||
3.8.0 | |||
3.7.26 | 21.3 | 22.x | Erlang/OTP 20.x support is discontinued |
3.7.25 | Erlang 22.x dropped support for HiPE | ||
3.7.24 | |||
3.7.23 | |||
3.7.22 | |||
3.7.21 | |||
3.7.20 | |||
3.7.19 | |||
3.7.18 | 20.3 | 22.x | Erlang/OTP 22.0 compatibility notes |
3.7.17 | TLSv1.0 and TLSv1.1 support is disabled by default on Erlang 22.x | ||
3.7.16 | |||
3.7.15 | |||
3.7.14 | 20.3 | 21.x | Erlang/OTP 19.x support is discontinued |
3.7.13 | For the best TLS support, the latest version of Erlang/OTP 21.x is recommended | ||
3.7.12 | |||
3.7.11 | |||
3.7.10 | 19.3 | 21.x | Erlang/OTP 21.0 compatibility notes |
3.7.9 | |||
3.7.8 | |||
3.7.7 | |||
3.7.6 | 19.3 | 20.x | For the best TLS support, the latest version of Erlang/OTP 20.x is recommended |
3.7.5 | Erlang versions prior to 19.3.6.4 have known bugs (e.g. ERL-430, ERL-448) that can prevent RabbitMQ nodes from accepting connections (including from CLI tools) and stopping | ||
3.7.4 | Versions prior to 19.3.6.4 are vulnerable to the ROBOT attack (CVE-2017-1000385) | ||
3.7.3 | On Windows, Erlang/OTP 20.2 changed default cookie file location | ||
3.7.2 | |||
3.7.1 | |||
3.7.0 |
延迟队列的实现方法
rabbitmq延迟队列的实现方法有两种,死信和延迟队列插件的方案,我选择的是延迟队列,这个需要下载插件
本来rabbitmq和x-delayed-message插件的对应关系如下:
插件 rabbitmq
3.6.x 3.8.x
3.6.x 3.7.x
3.5.x 3.7.x
=< 3.4.x 3.6.16
但我发觉并没有什么卵用,我最先安装3.6.x版本的结果报错:
Request to node rabbit@DESKTOP-RTV2QA7 failed with {'EXIT',
{function_clause,
[{rabbit_exchange_type_delayed_message,
validate,
[{exchange,
{resource,<<"/">>,
exchange,<<"top">>},
'x-delayed-message',
true,false,false,[],
undefined,undefined,........................
截图如下:
升级到最新版的插件rabbitmq_delayed_message_exchange-3.8.0.ez解决问题,具体命令如下:
进入rabbit安装目录:cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.8.1/plugins
获取插件:wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/v3.8.0/rabbitmq_delayed_message_exchange-3.8.0.ez
启动插件 rabbitmq-plugins enable rabbitmq_delayed_message_exchange
关闭插件 rabbitmq-plugins disable rabbitmq_delayed_message_exchange
参考地址:https://blog.csdn.net/skiof007/article/details/80914318