RabbitMQ

Expired Message Delivery Sequence RabbitMQ

亡梦爱人 提交于 2020-02-02 12:59:12
问题 We are building a solution in which we are publishing message to a time-out queue. After TTL expiry messages are pushed to main queue for re-processing. We are setting up counter value so that messages will be tried for x no. of times for the redelivery. Solution is working fine. But the scenario is when the message on the head position is highest TTL is not expired, other messages of lower expiry will not be re-published (to main queue). Is this understanding correct ? If Yes what is the

RabbitMQ - Spring Boot

江枫思渺然 提交于 2020-02-02 04:03:16
文章目录 Introduction RabbitMQ Work Mode Direct -- 路由模式 RabbitMQ direct producer application.properties pom.xml DirectRabbitConfig.java SendMessageController.java Console Output RabbitMQ direct consumer application.properties pom.xml DirectReceiver.java Console Output Fanout -- 发布/订阅模式 Fanout Producer FanoutRabbitConfig.java SendMessageController.java application.properties pom.xml Console Output Fanout Consumer FanoutReceiverA.java FanoutReceiverB.java FanoutReceiverC.java application.properties pom.xml Console Output Topic -- 匹配订阅模式 Publisher application.properties pom.xml TopicRabbitConfig

RabbitMQ failed to start, TCP connection succeeded but Erlang distribution failed

无人久伴 提交于 2020-02-02 02:14:27
问题 I'm a new one just start to learn and install RabbitMQ on Windows System. I install Erlang VM and RabbitMQ in custom folder, not default folder (Both of them). Then I have restarted my computer. By the way,My Computer name is "NULL" I cd to the RabbitMQ/sbin folder and use command: rabbitmqctl status But the return message is: Status of node rabbit@NULL ... Error: unable to perform an operation on node 'rabbit@NULL'. Please see diagnostics information and suggestions below. Most common

RabbitMQ 多数据源封装插件

独自空忆成欢 提交于 2020-02-02 01:47:33
Springboot集成RabbitMQ 多数据源封装插件 支持对多个RabbitMQ数据源的集成和使用 支持发送者Confirm机制和接收者ACK机制 支持RabbitMQ常用的五种模型 Pom依赖 <dependency> <groupId>cn.js.icode</groupId> <artifactId>message-queue</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> 基本使用方法 1.启动类注解 在springboot启动类上面加上注解: @EnableRabbitMQ(producerPackages = {"com.example.demo.example.*"}, consumerPackages = {"com.example.demo.example.*"}) 该注解有两个参数 String[] consumerPackages 和 String[] producerPackages 用consumerPackages 表示所有消息接收者的包路径 用producerPackages 表示所有消息发送者的包路径 注意:底层通过扫包实现,请尽可能定位到最下级包,用*匹配一个字段 2.配置properties 通过rabbitMQService.rabbitMQ

reply-code=530, reply-text=NOT_ALLOWED - vhost / not found, class-id=10, method-id=40

て烟熏妆下的殇ゞ 提交于 2020-02-01 19:42:36
springboot 项目在启动项目时,报链接rabbitmq报错 Caused by : com . rabbitmq . client . ShutdownSignalException : connection error ; protocol method : #method < connection . close > ( reply - code = 530 , reply - text = NOT_ALLOWED - vhost / not found , class - id = 10 , method - id = 40 ) at com . rabbitmq . utility . ValueOrException . getValue ( ValueOrException . java : 66 ) ~ [ amqp - client - 5.4 .3 . jar : 5.4 .3 ] at com . rabbitmq . utility . BlockingValueOrException . uninterruptibleGetValue ( BlockingValueOrException . java : 36 ) ~ [ amqp - client - 5.4 .3 . jar : 5.4 .3 ] at com . rabbitmq .

微服务项目学习之RabbitMQ

岁酱吖の 提交于 2020-02-01 01:04:06
微服务项目学习之RabbitMQ 什么是RabbitMQ MQ全称为Message Queue,即消息队列,RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。 RabbitMQ官方地址 . 开发中消息队列通常有如下应用场景: 1、任务异步处理。 将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。 2、应用程序解耦合。MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合。 市场上还有哪些消息队列? ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ、Redis。 为什么使用RabbitMQ呢? 1、使得简单,功能强大。 2、基于AMQP协议。 3、社区活跃,文档完善。 4、高并发性能好,这主要得益于Erlang语言。 5、Spring Boot默认已集成RabbitMQ。 AMQP AMQP是一套公开的消息队列协议,最早在2003年被提出,它旨在从协议层定义消息通信数据的标准格式,为的就是解决MQ市场上协议不统一的问题。RabbitMQ就是遵循AMQP标准协议开发的MQ服务。 AMQP官方地址 . JMS

RabbitMQ面试题

江枫思渺然 提交于 2020-01-31 17:22:06
1、为什么要引入MQ系统,直接读写数据库不行吗? 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么? 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务场景有个什么技术挑战,如果不用 MQ 可能会很麻烦,但是你现在用了 MQ 之后带给了你很多的好处。 先说一下消息队列常见的使用场景吧,其实场景有很多,但是比较核心的有 3 个:解耦、异步、削峰。 解耦:多系统多进程的数据交换,用pub/sub 异步:把大数据量的同步处理改为异步 削峰:一般的A 系统使用 MySQL,扛到每秒 2k 个请求就差不多了,如果每秒请求到 5k 的话,可能就直接把 MySQL 给打死了,导致系统崩溃,用户也就没法再使用系统了。如果使用 MQ, 每秒 5k 个请求写入 MQ,A 系统每秒钟最多处理 2k 个请求,因为 MySQL 每秒钟最多处理 2k 个。A 系统从 MQ 中慢慢拉取请求,每秒钟就拉取 2k 个请求,不要超过自己每秒能处理的最 大请求数量就 ok,这样下来,哪怕是高峰期的时候,A 系统也绝对不会挂掉,这又设计请求排队的问题。 2、消息队列有什么优缺点? 优点:解耦、异步、削峰 缺点: 系统可用性降低 系统引入的外部依赖越多,越容易挂掉。本来你就是 A 系统调用 BCD 三个系统的接口就好了,人 ABCD

mac下安装并启动RabbitMQ

浪尽此生 提交于 2020-01-31 13:41:55
前言   RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。   RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成。 正文   在django需要使用异步操作的情况下,Celery是一个常用的库。在实际的项目中,Celery又需要依赖RabbitMQ。所以,安装和使用RabbitMq是一切的关键。在macos中一般使用:brew来安装,下面给出安装步骤: 1 安装更新:brew update 2 安装rabbitmq:brew install rabbitmq rabbitmq的脚本都安装在目录:/usr/local/Cellar/rabbitmq 的sbin下面,也等同于目录:/usr/local/opt/rabbitmq/sbin下 接下来就需要在环境变量中添加:export PATH=$PATH:/usr/local/opt/rabbitmq/sbin 即可:

如何实现延迟队列

十年热恋 提交于 2020-01-31 06:54:03
延迟队列的需求各位应该在日常开发的场景中经常碰到。比如: 用户登录之后5分钟给用户做分类推送; 用户多少天未登录给用户做召回推送; 定期检查用户当前退款账单是否被商家处理等等场景。 一般这种场景和定时任务还是有很大的区别,定时任务是你知道任务多久该跑一次或者什么时候只跑一次,这个时间是确定的。延迟队列是当某个事件发生的时候需要延迟多久触发配套事件,引子事件发生的时间不是固定的。 业界目前也有很多实现方案,单机版的方案就不说了,现在也没有哪个公司还是单机版的服务,今天我们一一探讨各种方案的大致实现。 1. Redis zset 石头 www.10tou.com 这个方案比较常用,简单有效。利用 Redis 的 sorted set 结构,使用 timeStamp 作为 score,比如你的任务是要延迟5分钟,那么就在当前时间上加5分钟作为 score ,轮询任务每秒只轮询 score 大于当前时间的 key即可,如果任务支持有误差,那么当没有扫描到有效数据的时候可以休眠对应时间再继续轮询。 方案优劣 : 优点: 简单实用,一针见血。 缺点: 单个 zset 肯定支持不了太大的数据量,如果你有几百万的延迟任务需求,大哥我还是劝你换一个方案; 定时器轮询方案可能会有异常终止的情况需要自己处理,同时消息处理失败的回滚方案,您也要自己处理。 所以,sorted set

Linux CentOS7下安装RabbitMQ

天涯浪子 提交于 2020-01-31 01:01:47
下载rabbitMQ http://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.7.12 下载erlang https://github.com/rabbitmq/erlang-rpm/releases/tag/v21.2.6 安装erlang vim -ivh erlang-21.2.6-1.el7.x86_64.rpm 安装rabbitMQ vim -ivh rabbitmq-server-3.7.12-1.el7.noarch.rpm 提示缺少socat yum install socat 开启RabbitMQ服务 service rabbitmq-server start RabbitMQ提示ERROR: epmd error for host vi /etc/rabbitmq/rabbitmq-env.conf NODENAME=rabbit@localhost 开启插件 rabbitmq-plugins enable rabbitmq_management 重启RabbitMQ服务 service rabbitmq-server restart 开放端口号 firewall-cmd --zone=public --add-port=5672/tcp --permanent firewall-cmd --zone