amqp

Spring Boot + RabbitMQ死信机制实现延迟队列

心已入冬 提交于 2020-04-06 10:53:52
何为延迟队列? 顾名思义,延迟队列就是进入该队列的消息会被延迟消费的队列。而一般的队列,消息一旦入队了之后就会被消费者马上消费。 延迟队列能做什么? 延迟队列多用于需要延迟工作的场景。最常见的是以下两种场景: 延迟消费。比如: 用户生成订单之后,需要过一段时间校验订单的支付状态,如果订单仍未支付则需要及时地关闭订单。 用户注册成功之后,需要过一段时间比如一周后校验用户的使用情况,如果发现用户活跃度较低,则发送邮件或者短信来提醒用户使用。 延迟重试。比如消费者从队列里消费消息时失败了,但是想要延迟一段时间后自动重试。 如果不使用延迟队列,那么我们只能通过一个轮询扫描程序去完成。这种方案既不优雅,也不方便做成统一的服务便于开发人员使用。但是使用延迟队列的话,我们就可以轻而易举地完成。 如何实现? 别急,在下文中,我们将详细介绍如何利用Spring Boot加RabbitMQ来实现延迟队列。 本文出现的示例代码都已push到Github仓库中:github.com/Lovelcp/blo… 实现思路 在介绍具体的实现思路之前,我们先来介绍一下RabbitMQ的两个特性,一个是Time-To-Live Extensions,另一个是Dead Letter Exchanges。 Time-To-Live Extensions RabbitMQ允许我们为消息或者队列设置TTL(time to

RabbitMQ消息发布和消费的确认机制

喜夏-厌秋 提交于 2020-04-05 22:55:15
前言 新公司项目使用的消息队列是RabbitMQ,之前其实没有在实际项目上用过RabbitMQ,所以对它的了解都谈不上入门。趁着周末休息的时间也猛补习了一波,写了两个窗体应用,一个消息发布端和消息消费端。园子里解释RabbitMQ基础的很多了,这里就不对RabbitMQ的基础再做叙述了,来点实际工作中一定会碰到的问题和解决的方案。 RabbitMQ 消息发布确认机制 默认情况下消息发布端执行BasicPublish方法后,消息是否到达指定的队列的结果发布端是未知的。BasicPublish方法的返回值是void。假设我们想对消息进行监控,针对消息发送失败后进行补发则需要一个消息确认机制来帮我们实现。 事务机制 Confirm确认机制 上面是已知可通过RabbitMQ自带的特性实现消息确认机制的两种方式。 事务机制 事务机制依赖三个RabbitMQ提供的方法 txSelect() txCommit() txRollback() 看名字大概知道意思了,特别是Commit和Rollback,使用方式和数据库的事务使用几乎一样,txSelect()声明事务的开始,txCommit()提交事务,txRollBack()执行提交失败后的回滚。 使用代码如下: // 采取RabbitMQ事务方式传输消息 private void SendMessageByTransaction

php7.1 安装amqp扩展

我们两清 提交于 2020-03-30 20:53:55
在php开发中使用rabbitmq消息队列时,需要安装PHP扩展amqp,安装步骤如下: 直接使用pecl进行amqp扩展的安装, /usr/local/php/bin/pecl install amqp 如果缺少librabbitmq库文件,需要先安装librabbitmq,步骤如下: 1 wget https://github.com/alanxz/rabbitmq-c/releases/download/v0.7.1/rabbitmq-c-0.7.1.tar.gz 2 tar -zxvf rabbitmq-c-0.7.1.tar.gz 3 cd rabbitmq-c-0.7.1 4 ./configure --prefix=/usr/local/rabbitmq-c 5 make && make install librabbitmq安装完成后,继续执行 /usr/local/php/bin/pecl install amqp 此时需要输入安装librabbitmq的安装目录/usr/local/rabbitmq-c,此时得到amqp.so扩展模块路径/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/amqp.so,加入php.ini配置文件, [amqp] extension=/usr/local/php

Kafka集群搭建

允我心安 提交于 2020-03-24 19:16:05
Kafka【第一篇】Kafka集群搭建 Kafka初识 1、Kafka使用背景 在我们大量使用分布式数据库、分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户的搜索关键词进行统计,分析出当前的流行趋势 有些数据,存储数据库浪费,直接存储硬盘效率又低 这些场景都有一个共同点: 数据是由上游模块产生,上游模块,使用上游模块的数据计算、统计、分析,这个时候就可以使用消息系统,尤其是分布式消息系统! 2、Kafka的定义 What is Kafka:它是一个分布式消息系统,由linkedin使用scala编写,用作LinkedIn的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础。具有高水平扩展和高吞吐量。 3、Kafka和其他主流分布式消息系统的对比 定义解释: 1、Java 和 scala都是运行在JVM上的语言。 2、erlang和最近比较火的和go语言一样是从代码级别就支持高并发的一种语言,所以RabbitMQ天生就有很高的并发性能,但是 有RabbitMQ严格按照AMQP进行实现,受到了很多限制。kafka的设计目标是高吞吐量,所以kafka自己设计了一套高性能但是不通用的协议,他也是仿照AMQP( Advanced Message Queuing

how to implement Remote procedure call (RPC) in RabbitMQ using Nodejs

谁都会走 提交于 2020-03-22 10:26:02
问题 so i want to take a Json and parse it to Object and then implement a RPC RabbitMQ Server so that i can send the Object to the Server through RabbitMQ and there the Object will be proceed to be saved in a local Array and a universally unique id which will tell where exactly is the object stored, will be returned from that Server to the client throught the RPC. the Official Webseite shows some Implementation to RPC in RabbitMQ, here you can find their Implementration https://www.rabbitmq.com

how to implement Remote procedure call (RPC) in RabbitMQ using Nodejs

时间秒杀一切 提交于 2020-03-22 10:25:28
问题 so i want to take a Json and parse it to Object and then implement a RPC RabbitMQ Server so that i can send the Object to the Server through RabbitMQ and there the Object will be proceed to be saved in a local Array and a universally unique id which will tell where exactly is the object stored, will be returned from that Server to the client throught the RPC. the Official Webseite shows some Implementation to RPC in RabbitMQ, here you can find their Implementration https://www.rabbitmq.com

php扩展AMQP,安装报错解决

本小妞迷上赌 提交于 2020-03-22 05:36:17
接下来来安装php扩展AMQP,安装了它以后,才能用PHP操作rabbitmq。 wget https://pecl.php.net/get/amqp-1.4.0.tgz tar -zxvf amqp-1.4.0.tgz cd amqp-1.4.0 /lnmp/php/bin/phpize ./configure --with-php-config=/lnmp/php/bin/php-config 安装到这,就报了错: checking for amqp files in default path… not found configure: error: Please reinstall the librabbit-mq distribution 在网上搜了搜,找到了解决方法(http://www.cnphp6.com/archives/68356): 需要安装rabbitmq-c,rabbitmq-c是一个用于C语言的,与AMQP server进行交互的client库。 下载地址:https://github.com/alanxz/rabbitmq-c unzip rabbitmq-c-master.zip cd rabbitmq-c-master autoreconf -i ./configure --prefix=/lnmp/rabbitmq-c make make

springboot项目中使用rabbitmq开发应用

谁说我不能喝 提交于 2020-03-21 01:09:44
3 月,跳不动了?>>> AMQP介绍 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议。 Exchange有Direct、Fanout、Topic、Headers,最常用的是Direct、Fanout、Topic三种类型。 “生产/消费”消息模型 生产者发送消息到broker server(RabbitMQ)。在Broker内部,用户创建Exchange/Queue, 通过Binding规则将两者联系在一起。Exchange分发消息,根据类型/binding的不同分发策略有区别。 消息最后来到Queue中,等待消费者取走。 AMQP messaging 中的基本概念 Broker: 接收和分发消息的应用,RabbitMQ Server就是Message Broker。 Virtual host: 出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等。 Connection: publisher/consumer和broker之间的TCP连接。断开连接的操作只会在client端进行

一丶RabbitMQ初识与安装

六眼飞鱼酱① 提交于 2020-03-18 11:21:59
某厂面试归来,发现自己落伍了!>>> 一.RabbitMQ是什么? RabbitMQ是一个开源消息代理和队列服务器,用来通过普通的协议在完全不同的应用之间共享数据,RabbitMQ使用的是Erlang语言编写的,并且是基于AMQP协议的。 二.为什么使用RabbitMQ 1.开源,性能优秀,性能稳定保障 2.提供可靠的消息投递(confirm),返回模式(return) 3.与SpringAMQP完美整合,API丰富 4.集群模式丰富,表达式配置,HA模式,镜像队列模型 5.保证数据不掉失可靠,可用性 三.RabbitMQ高性能的原因? 1.erlang最初用于交换机架构模式,使得rabbitmq在broker之间进行数据交互性能非常优秀 2.erlang的优点:有着和原生的socket一样的延迟 四.linux安装 准备一台Linux虚拟机,老师的机器是Linux7(CentOS 7);配置最好再2G内存以上哦,然后使用Xshell登录上去即可,注意准备工作非常重要哦。首先我们确认你的虚拟机是否能够和本机Ping通,检查虚拟机和本机的网络、防火墙等基础设施。 进入安装: ## 1. 首先在Linux上进行一些软件的准备工作,yum下来一些基础的软件包 yum install build-essential openssl openssl-devel unixODBC

探索 OpenStack 之(14):OpenStack 中 RabbitMQ 的使用

主宰稳场 提交于 2020-03-18 04:40:24
本文是 OpenStack 中的 RabbitMQ 使用研究 两部分中的第一部分,将介绍 RabbitMQ 的基本概念,即 RabbitMQ 是什么。 第二部分 将介绍其在 OpenStack 中的使用。 1 RabbitMQ 的基本概念 RabbitMQ 是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。 AMQP 是一个定义了在应用或者组织之间传送消息的协议的开放标准 (an open standard for passing business messages between applications or organizations),它最新的版本是 1.0。AMQP 目标在于解决在两个应用之间传送消息存在的下列问题: 网络是不可靠的 =>消息需要保存后再转发并有出错处理机制 与本地调用相比,网络速度慢 =>得异步调用 应用之间是不同的(比如不同语言实现、不同操作系统等) =>得与应用无关 应用会经常变化 =>同上 AMQP 使用异步的、应用对应用的、二进制数据通信来解决这些问题。 RabbitMQ 是 AMQP 的一种实现,它包括Server (服务器端)、Client (客户端) 和 Plugins (插件)。RabbitMQ 服务器是用 Erlang 语言编写的,其最新版本是刚刚(2015/02/11)发布的 3.4.4 ,而