RabbitMQ

Linux安装RabbitMq步骤流程

柔情痞子 提交于 2020-01-24 01:04:22
一: 安装erlang 1:下载RabbitMq依赖的erlang语言安装包 wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm 最新的22版本 2:若缺少epel-release 依赖 yum install epel-release 3:安装erlang软件包 sudo rpm -ivh erlang-solutions-1.0-1.noarch.rpm 4:安装erlang sudo yum install erlang 二: 安装RabbitMq 注意和elang的版本兼容问题 1: 官网下载RabbitMq软件包 由于之前windows版的已经安装了3.82 所以linux也安装3.82得 目前是支持erlang22.x版本的 2: 安装 yum install rabbitmq-server-3.82xxx.rpm 3: 安装RabbitMq web管理界面 sudo rabbitmq-plugins enable rabbitmq_management 4;添加开机启动RabbitMQ服务 sudo chkconfig rabbitmq-server on 5: 启动服务 systemctl start rabbitmq-server sudo /sbin

RabbitMQ(4) 未路由的消息、TTL和死信

北慕城南 提交于 2020-01-23 23:05:48
未路由的消息 当生产这发送的消息到达指定的交换器后,如果交换器无法根据自身类型、绑定的队列以及消息的路由键找到匹配的队列,默认情况下消息将被丢弃。可以通过两种方式 处理这种情况,一是在发送是设置mandatory参数,二是通过备份交换器。 设置mandatory参数 在发送消息是,可以设置mandatory参数未true,这样当消息在交换器上无法被路由时,服务器将消息返回给生产者,生产者实现回调函数处理被服务端返回的消息。 public class NoRouteMessage { private static String QUEUE = "unreachable_queue"; private static String EXCHANGE = "unreachable_exchange"; private static String BINDING_KEY = "fake_key"; public static void main(String[] args) throws IOException, TimeoutException { ConnectionFactory cf = new ConnectionFactory(); Connection connection = cf.newConnection(); Channel channel = connection

RabbitMQ延时任务

╄→尐↘猪︶ㄣ 提交于 2020-01-23 23:04:21
概念: 消息的TTL(Time To Live) 消息的TTL就是消息的存活时间。RabbitMQ可以对队列和消息分别设置TTL。对队列设置就是队列没有消费者连着的保留时间,也可以对每一个单独的消息做单独的设置。超过了这个时间,我们认为这个消息就死了,称之为死信。 如果队列设置了,消息也设置了,那么会取小的。所以一个消息如果被路由到不同的队列中,这个消息死亡的时间有可能不一样(不同的队列设置)。这里单讲单个消息的TTL,因为它才是实现延迟任务的关键。 可以通过设置消息的expiration字段或者x-message-ttl属性来设置时间,两者是一样的效果。 消息扔到队列中后,过了设置的限定时间,如果没有被消费,它就死了。不会被消费者消费到。这个消息后面的,没有“死掉”的消息对顶上来,被消费者消费。 死信在队列中并不会被删除和释放,它会被统计到队列的消息数中去 。单靠死信还不能实现延迟任务,还要靠Dead Letter Exchange。 Dead Letter Exchanges Exchage的概念在这里就不在赘述,可以从这里进行了解。 一个消息在满足如下条件下,会进死信路由,记住这里是路由而不是队列,一个路由可以对应很多队列。 1. 一个消息被Consumer拒收了,并且reject方法的参数里requeue是false。也就是说不会被再次放在队列里,被其他消费者使用。 2.

Linux(CENTOS7) RabbitMq安装

不打扰是莪最后的温柔 提交于 2020-01-23 11:30:56
  RabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rabbit MQ 是建立在Erlang OTP平台上。 1、安装Erlang   因为rabbitMQ是Erlang语言编写的,所以我们首先需要安装Erlang rpm -Uvh http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el7.centos.x86_64.rpm 2、安装rabbitMQ-server rpm -Uvh http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.6/rabbitmq-server-3.5.6-1.noarch.rpm 3、查看是否安装成功 rpm -qa|grep rabbitmq ​ 4、开启rabbit-server 开启:service rabbitmq-server start 关闭:service rabbitmq-server stop ​ 这样虽然我们已经将rabbitmq的服务正常启动了,但是我们在物理机的浏览器中输入ip:15672时,并不能连接,因为我们还没有配置维护插件和开启远程连接 5、查看状态

Configure RabbitMQ to replace an old pending message with a new one

*爱你&永不变心* 提交于 2020-01-23 10:51:08
问题 Is is possible to configure a RabbitMQ exchange or a queue in such a way that at most one message with a given routing key is pending at any time? If new message arrives, the old one would be dropped and the new one enqueued. If such option is not available, what would be the best way to implement this at the application level? I.e. when application receives a message how can it check if there any more pending messages? 回答1: You need to install Last Value Cache and enable it. Your exchange

RabbitMQ基本原理初识

Deadly 提交于 2020-01-22 23:32:44
一、背景简介   RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。   AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 下面将重点介绍RabbitMQ中的一些基础概念,了解了这些概念

RabbitMq重试次数和幂等性

…衆ロ難τιáo~ 提交于 2020-01-22 20:02:19
当消费者配出异常,也就是说当消息消费不成功的话,该消息会存放在rabbitmq的服务端,一直进行重试,直到不抛出异常为止。 如果一直抛异常,我们的服务很容易挂掉,那有没有办法控制重试几次不成功就不再重试了呢?答案是有的。我们在消费者application.yml中增加一段配置。 spring: rabbitmq: # 连接地址 host: 127.0.0.1 # 端口 port: 5672 # 登录账号 username: guest # 登录密码 password: guest # 虚拟主机 virtual-host: / listener: simple: retry: enabled: true # 开启消费者进行重试 max-attempts: 5 # 最大重试次数 initial-interval: 3000 # 重试时间间隔 上面配置的意思是消费异常后,重试五次,每次隔3s。继续启动消费者看看效果,我们发现重试五次以后,就不再重试了。 RabbitMq出现重试就会带来数据重复消费问题 ? 全局的消息id来控制幂等性。当消息被消费了之后我们可以选择缓存保存这个消息id,然后当再次消费的时候,我们可以查询缓存,如果存在这个消息id,我们就不错处理直接return即可 来源: CSDN 作者: MrLiarStudio 链接: https://blog.csdn.net

Publish/Subscribe samples with RabbitMQ in .NET [closed]

眉间皱痕 提交于 2020-01-22 18:42:50
问题 As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance. Closed 7 years ago . I've built this sample: Getting Started With RabbitMQ in .net, but made 2 programs: one-publisher one-subscriber I'm using

消息中间件选择

六眼飞鱼酱① 提交于 2020-01-22 13:03:50
消息队列选择建议 1.Kafka Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,适合产生大量数据的互联网服务的数据收集业务。 大型公司建议可以选用,如果有日志采集功能,肯定是首选kafka了。 2.RocketMQ 天生为金融互联网领域而生,对于可靠性要求很高的场景,尤其是电商里面的订单扣款,以及业务削峰,在大量交易涌入时,后端可能无法及时处理的情况。 RoketMQ在稳定性上可能更值得信赖,这些业务场景在阿里双11已经经历了多次考验,如果你的业务有上述并发场景,建议可以选择RocketMQ。 3.RabbitMQ RabbitMQ :结合erlang语言本身的并发优势,性能较好,社区活跃度也比较高,但是不利于做二次开发和维护。不过,RabbitMQ的社区十分活跃,可以解决开发过程中遇到的bug。 如果你的数据量没有那么大,小公司优先选择功能比较完备的RabbitMQ。 来源: CSDN 作者: chrislin9 链接: https://blog.csdn.net/qq_31964019/article/details/104068754

Interact with celery ongoing task

ⅰ亾dé卋堺 提交于 2020-01-22 10:24:06
问题 We have a distributed architecture based on rabbitMQ and Celery . We can launch in parallel multiple tasks without any issue. The scalability is good. Now we need to control the task remotely: PAUSE, RESUME, CANCEL. The only solution we found is to make in the Celery task a RPC call to another task that replies the command after a DB request. The Celery task and RPC task are not on the same machine and only the RPC task has access to the DB. Do you have any advice how to improve it and easily