RabbitMQ

【RabbitMQ】一文带你搞定RabbitMQ延迟队列

无人久伴 提交于 2020-08-12 06:31:02
本文口味:鱼香肉丝 预计阅读:10分钟 一、说明 在上一篇中,介绍了RabbitMQ中的死信队列是什么,何时使用以及如何使用RabbitMQ的死信队列。相信通过上一篇的学习,对于死信队列已经有了更多的了解,这一篇的内容也跟死信队列息息相关,如果你还不了解死信队列,那么建议你先进行上一篇文章的阅读。 这一篇里,我们将继续介绍RabbitMQ的高级特性,通过本篇的学习,你将收获: 什么是延时队列 延时队列使用场景 RabbitMQ中的TTL 如何利用RabbitMQ来实现延时队列 二、本文大纲 以下是本文大纲: 本文阅读前,需要对RabbitMQ以及死信队列有一个简单的了解。 三、什么是延时队列 延时队列 ,首先,它是一种队列,队列意味着内部的元素是 有序 的,元素出队和入队是有方向性的,元素从一端进入,从另一端取出。 其次, 延时队列 ,最重要的特性就体现在它的 延时 属性上,跟普通的队列不一样的是, 普通队列中的元素总是等着希望被早点取出处理,而延时队列中的元素则是希望被在指定时间得到取出和处理 ,所以延时队列中的元素是都是带时间属性的,通常来说是需要被处理的消息或者任务。 简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列。 四、延时队列使用场景 那么什么时候需要用延时队列呢?考虑一下以下场景: 订单在十分钟之内未支付则自动取消。 新创建的店铺

如果宁静是 Oracle,万茜、张雨绮、黄圣依是什么?

不问归期 提交于 2020-08-12 05:16:40
作者 | 程序员小浩 来源 | 小浩算法 责编 | 王晓曼 头图 | 下载自东方IC 和姐姐们浪起来~ 嗯!这两天在看乘风破浪的姐姐(被逼)。好吧,其实我自己也看进去了。于是就有这样一个奇思妙想,如果把姐姐们比作计算机领域的技术 or 工具,会是怎么样?于是自己就 yy 了一番。 宁静:Oracle,宁静以致远,江湖地位犹在。在大型企业里,通常拥有庞大的资金能力,所以它们会选择用钱购买解决方案,而不是自己雇佣人员使用 MySQL 去维护。在姐姐中,每人都有一个采访视频。主持人问现在圈内艺人分为一线,二线和三线,你觉得自己是几线?这个问题很犀利,大多数人可能会谦虚一番,宁静直言:我一直是一线。将静姐比作 Oracle,当仁不让。 张雨绮:PHP,宇宙第一强无敌,舍我其谁。袁隆平曾经感慨:我这辈子最大的遗憾,就是让你们吃饱了撑着。于是,由于 PHP 入门门槛低,上手快,被吃瓜群众公认为语言界的 TOP1。而我们绮绮子,就更牛逼了,整个一个铁憨憨。 不过其实呢,绮绮子傻大姐,这次真的改变了我之前对其的印象(额,不对,我好像之前都没印象,毕竟我不咋看综艺)。虽说智商偶尔不在线,但她自己给自己创造一个世界,内心清晰而明朗。如同 PHP,内里乾坤,我自知。 万茜:Python,姐姐们的团宠。在一堆美女中,她像个帅气的男孩子,让每个姐姐感觉不到压力和竞争。不管你司是传统开发,大数据

学习响应式编程 Reactor (2)

瘦欲@ 提交于 2020-08-12 05:01:38
Reactor Reactor 是用于 Java 的异步非阻塞响应式编程框架,同时具备背压控制的能力。它与 Java 8 函数式 Api 直接集成,比如 分为CompletableFuture、Stream、以及 Duration 。它提供了异步 Api 响应流 Flux (用于 [0 - N] 个元素)和 Mono (用于 [0或1] 个元素),并完全遵守和实现了响应式规范。 引入 reactor reactor 自 3.0.4 版本之后,采用了 BOM (Bill Of Materials)的方式,使用 BOM 可以管理一组良好集成的 maven artifacts,而无需担心不同版本组件之间的相互依赖问题,在 maven 项目中在 dependencyManagement 中 加入 reactor 的 bom 定义即可。 <dependencyManagement> <dependencies> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-bom</artifactId> <version>Dysprosium-SR8</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> <

介绍Spring Cloud Stream与RabbitMQ集成

a 夏天 提交于 2020-08-12 01:43:15
一. 首先安装rabbitmq-management 这里用的是rabbitmq的docker镜像,我们可以在 Docker Hub 中搜索rabbitmq, 找到最新的版本安装 sudo docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3.7.8-management 安装之后使用 docker ps -a 检查下, rabbitmq的镜像是否启动, 正常启动状态如下: 通过 http://192.168.12.12:15672 , 访问到rabbitmq的管理端, 默认账户/密码是: guest/guest 二. Spring Cloud Stream与RabbitMQ集成 引入依赖 <!-- Spring Cloud Stream RabbitMQ --> < dependency > < groupId > org.springframework.cloud </ groupId > < artifactId > spring-cloud-starter-stream-rabbit </ artifactId > </ dependency > 创建消息接受类 @Component @Slf4j @EnableBinding ( Processor .

RabbitMQ 消费端限流、TTL、死信队列

元气小坏坏 提交于 2020-08-12 00:17:43
   消费端限流    1. 为什么要对消费端限流   假设一个场景,首先,我们 Rabbitmq 服务器积压了有上万条未处理的消息,我们随便打开一个消费者客户端,会出现这样情况: 巨量的消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多数据!   当数据量特别大的时候,我们对生产端限流肯定是不科学的,因为有时候并发量就是特别大,有时候并发量又特别少,我们无法约束生产端,这是用户的行为。所以我们应该对消费端限流,用于保持消费端的稳定,当消息数量激增的时候很有可能造成资源耗尽,以及影响服务的性能,导致系统的卡顿甚至直接崩溃。    2.限流的 api 讲解   RabbitMQ 提供了一种 qos (服务质量保证)功能,即在非自动确认消息的前提下,如果一定数目的消息(通过基于 consume 或者 channel 设置 Qos 的值)未被确认前,不进行消费新的消息。    /** * Request specific "quality of service" settings. * These settings impose limits on the amount of data the server * will deliver to consumers before requiring acknowledgements. * Thus they provide a

Elastic Stack

我们两清 提交于 2020-08-11 23:52:14
Logstash https://www.elastic.co/cn/logstash 集中、转换和存储数据 Logstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。 Logstash is an open source data collection engine with real-time pipelining capabilities. Logstash can dynamically unify data from disparate sources and normalize the data into destinations of your choice. Cleanse and democratize all your data for diverse advanced downstream analytics and visualization use cases. How Logstash Works https://www.elastic.co/guide/en/logstash/current/pipeline.html#pipeline The Logstash event processing pipeline has three stages: inputs → filters

MQ消息队列

℡╲_俬逩灬. 提交于 2020-08-11 20:41:38
一、为什么需要消息队列(MQ) 主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。大量的请求到达访问数据库,导致行锁表锁,最后请求线程会堆积过多,从而触发 too many connection错误,引发雪崩效应。我们使用消息队列,通过异步处理请求,从而缓解系统的压力。核心:异步处理、流量削峰、应用解耦 二、应用场景 异步处理,流量削峰,应用解耦,消息通讯四个场景 2.1、异步处理 场景1:用户注册后,需要发送注册邮件和注册短信。 串行方式:将注册信息写入 数据库 成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端 并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间 假设三个业务节点每个使用50毫秒钟,不考虑网络等其他开销,则串行方式的时间是150毫秒,并行的时间可能是100毫秒。 因为CPU在单位时间内处理的请求数是一定的,假设CPU在1秒内吞吐量是100次。则串行方式1秒内CPU可处理的请求量是7次(1000/150)。 并行方式处理的请求量是10次(1000/100) 小结:如以上案例描述,传统的方式系统的性能(并发量,吞吐量,响应时间)会有瓶颈。如何解决这个问题? 引入消息队列,将不是必须的业务逻辑,异步处理。改造后的架构如下:

COTURN-JANUS WEBRTC环境搭建

笑着哭i 提交于 2020-08-11 17:02:25
概述: 注意端口 tcp/udp的开放 安装coturn和janus前先安装依赖包 证书和turnserver用户密码需配套 前提准备 基础环境的准备,包括服务器环境、地址、证书、防火墙配置等。</br> 环境准备</br> 操作系统:centos 7.6 x64</br> 一个带有SSL证书的域名</br> 需要开放对应的端口:8088 8188 3478 3480-3500 7000-9000 443</br> 证书转换 mkdir /etc/ssl/cert/domain.com cd /etc/ssl/cert/domain.com 上传证书至此目录,一般用Nginx适用的证书即可。如果有pem的最好,直接上传到此处,如果没有的话,需要转换。 openssl rsa -in domain.com.key -text > key.pem openssl x509 -inform PEM -in domain.com.crt > cert.pem 开始安装 开始Webrtc服务的部署及安装,将分步骤详细记录。以及在按步骤执行过程中遇到的问题的处理。 安装依赖包 yum update yum install texinfo libmicrohttpd-devel.x86_64 uncrustify yum -y install epel-release nginx

部署rabbitMQ镜像集群实战测试

南楼画角 提交于 2020-08-11 16:49:58
部署rabbitMQ镜像集群 版本信息 rabbit MQ: 3.8.5 Erlang: 官方建议最低21.3 推荐22.x 这里用的是23 环境准备 主机规划 主机 节点 172.16.14.3 磁盘节点 172.16.14.4 内存节点 172.16.14.5 磁盘节点 内存节点: 内存节点将所有的队列、交换机、绑定、用户、权限和 vhost 的元数据定义存储在内存中,好处是可以使得像交换机和队列声明等操作更加的快速。例外情况是:持久的 queue 的内容将被保存到磁盘。 磁盘节点: 将元数据存储在磁盘中,单节点系统只允许磁盘类型的节点,防止重启 RabbitMQ 的时候,丢失系统的配置信息。 注意点: 1、内存节点由于不进行磁盘读写,它的性能比磁盘节点高。 2、集群中可以存在多个磁盘节点,磁盘节点越多整个集群可用性越好,但是集群整体性能不会线性增加,需要权衡考虑。 3、RabbitMQ 要求在集群中至少有一个磁盘节点,所有其他节点可以是内存节点,当节点加入或者离开集群时,必须要将该变更通知到至少一个磁盘节点。如果集群中唯一的一个磁盘节点崩溃的话,集群仍然可以保持运行,但是无法进行其他操作(增删改查),直到节点恢复。 4、设置两个磁盘节点,至少有一个是可用的,可以保存元数据的更改。 下载离线包 官网安装手册( https://www.rabbitmq.com/install

spring boot rabbitmq传递bean(实体类)/ JSON

点点圈 提交于 2020-08-11 14:19:37
spring boot使用rabbitmq传递实体类:java对象必须 序列化 。 实现序列化有2种方式: 1)bean对象实现Serializable接口 发送者和接收者bean对象都必须序列化 2)借助SerializationUtils工具类 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.8</version> </dependency> 1 2 3 4 5 发送者:SerializationUtils.serialize() 接收者:SerializationUtils.deserialize() 缺点: 发送者和接收者的bean定义必须一模一样,包括bean路径 spring boot使用rabbitmq传递JSON对象 由于MQ直接传递JSON对象有弊端,所以建议使用JSON传递。 把对象使用ObjectMapper等JSON工具类把对象转换为JSON格式,然后发送。 @Autowired private ObjectMapper objectMapper; List<SystemConfiguration> configs = constructConfigs(protocolId); String msgJson