RabbitMQ

RabbitMQ和Kafka到底怎么选(二)?

孤街浪徒 提交于 2020-04-27 03:59:48
前言 前一篇文章 《RabbitMQ和Kafka到底怎么选?》 ,我们在吞吐量方面比较了Kafka和RabbitMQ,知道了Kafka的吞吐量要高于RabbitMQ。本文从可靠性方面继续探讨两个队列的差异。 RabbitMQ可靠性 我们通过前文知道,RabbitMQ的队列分为master queue和mirror queue,mirror queue 在master queue宕机之后,会被提升为master queue,如下图所示。 队列A的consumer在消费的时候,机器宕机,此时客户端和服务端分别做如下动作: 服务端:把mirror queue提升为master queue 客户端:连接到新的master queue 所在的节点进行消费或者生产 当master queue 所在节点宕机后,其正在被消费的消息的相关信息全部丢失,即服务端不知道消费者对那一瞬间消费的消息是否进行了ACK,所以在mirror queue被提升为master queue时,会把宕机前正在进行消费的的消息全部重新发送一遍,即客户端重连后,消息可能被重复消费,这个时候就必须依靠应用层逻辑来判断来避免重复消费。 在持久化方面,RabbitMQ的master queue每次收到新消息后,都会立刻写入磁盘,并把消息同步给mirror queue。假设在master queue 收到消息后

RabbitMQ(三) SpringBoot2.x 集成 RabbitMQ

大兔子大兔子 提交于 2020-04-27 03:49:41
3-1 RabbitMQ 整合 SpringBoot2.x 生产者发送消息 创建 SpringBoot 项目 application.properties 配置 spring.rabbitmq.host=192.168.152.128 spring.rabbitmq.port =5672 spring.rabbitmq.username = root spring.rabbitmq.password =root 创建SendService.java SpringBoot 主运行类 3-2 RabbitMQ 整合 SpringBoot2.x 消费者接受消息 创建 SpringBoot 项目 application.properties 配置和上面项目一样 导入rabbitmq依赖 创建ReveiveService.java SpringBoot 主运行类 3-3 使用 JSON 传递消息 发送和接收的 SpringBoot 工程添加 fastjson 依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.36</version> </dependency> 发送和接收的 SpringBoot 工程添加 User 实体类 修改 SendService

Centos7 下安装 RabbitMQ

天涯浪子 提交于 2020-04-27 03:03:45
安装 erlang 1.下载erlang 官网地址 http://www.erlang.org/download 挑选合适的版本 然后 wget 比如目前最新版本 19.3 运行命令 wget http://erlang.org/download/otp_src_19.3.tar.gz 2.使用yum安装下必须的配件: yum install gcc glibc-devel make ncurses-devel openssl-devel autoconf yum install unixODBC unixODBC-devel 3.开始安装 tar -zxvf otp_src_19.3.tar.gz cd otp_src_19.3 ./configure --prefix=/usr/local/erlang --enable-hipe --enable-threads --enable-smp-support --enable-kernel-poll --without-javac 这步可能会出现提示提示缺少的组件,详情见常见问题 make && make install (ps:超慢) 输入 ./erl 4.常见问题: ********************************************************************* ***********

Linux(CentOS7)下RabbitMQ下载安装教程

淺唱寂寞╮ 提交于 2020-04-27 03:03:32
原文链接: http://www.studyshare.cn/software/details/1172/0 一、下载安装步骤 下载erlang 1、wget 下载地址 2、rpm -Uvh erlang-solutions-1.0-1.noarch.rpm 3、yum install epel-release 安装erlang yum install erlang 下载rabbitmq wget 下载地址 安装rabbitmq yum install rabbitmq-server-3.6.6-1.el7.noarch.rpm 二、启动与停止 启动 service rabbitmq-server start 或者 /bin/systemctl start rabbitmq-server.service 停止 service rabbitmq-server stop 或者 /bin/systemctl stop rabbitmq-server.service 查看状态 service rabbitmq-server status或者 /bin/systemctl status rabbitmq-server.service 三、常用端口 RabbitMQ常用端口:client端通信端口: 5672管理端口 : 15672server间内部通信端口: 25672 四、常见问题 1

Windows下载安装RabbitMQ教程

我只是一个虾纸丫 提交于 2020-04-27 03:03:17
原文链接: http://www.studyshare.cn/software/details/1171/0 一、下载 1、下载Erlang 官网下载:去 下载 百度网盘下载:去 下载 提取码:m1q0 2、下载Windows版RabbitMq 官网下载:去 下载 百度网盘下载:去 下载 提取码:rvo3 java开发工具下载地址及安装教程大全,点 这里 。 更多深度技术文章,在 这里 。 二、安装 1、双击安装Erlang及RabbitMq 注意:安装路径不要有空格,如果安装路径存在空格,会出现常见错误2。 2、配置环境变量 (1)增加ERLANG_HOME变量,变量值:C:\Program Files\erl10.4 (2)Path下追加:%ERLANG_HOME%\bin (3)增加RABBITMQ_BASE变量,变量值:C:\RabbitMQ_Server\rabbitmq_server-3.7.17 (4)Path下追加:%RABBITMQ_BASE%\sbin;%RABBITMQ_BASE%\ebin 三、启动服务 1、开始菜单中 2、验证是否安装成功 进入:C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.6\sbin 执行:rabbitmqctl.bat status 安装成功! 四、常见问题 1

RabbitMQ消息可靠性分析

血红的双手。 提交于 2020-04-27 02:38:20
原文: RabbitMQ消息可靠性分析 - 简书 有很多人问过我这么一类问题:RabbitMQ如何确保消息可靠?很多时候,笔者的回答都是:说来话长的事情何来长话短说。的确,要确保消息可靠不只是单单几句就能够叙述明白的,包括Kafka也是如此。可靠并不是一个绝对的概念,曾经有人也留言说过类似全部磁盘损毁也会导致消息丢失,笔者戏答:还有机房被炸了也会导致消息丢失。可靠性是一个相对的概念,在条件合理的范围内系统所能确保的多少个9的可靠性。一切尽可能的趋于完美而无法企及于完美。 我们可以尽可能的确保RabbitMQ的消息可靠。在详细论述RabbitMQ的消息可靠性之前,我们先来回顾下消息在RabbitMQ中的经由之路。 如图所示,从AMQP协议层面上来说: 消息先从生产者Producer出发到达交换器Exchange; 交换器Exchange根据路由规则将消息转发对应的队列Queue之上; 消息在队列Queue上进行存储; 消费者Consumer订阅队列Queue并进行消费。 我们对于消息可靠性的分析也从这四个阶段来一一探讨。 Phase 1 消息从生产者发出到达交换器Exchange,在这个过程中可以发生各种情况,生产者客户端发送出去之后可以发生网络丢包、网络故障等造成消息丢失。一般情况下如果不采取措施,生产者无法感知消息是否已经正确无误的发送到交换器中

RabbitMQ的几个常见问题

无人久伴 提交于 2020-04-27 02:33:47
1. 如何保证消息尽量发送成功? 问题描述: 如果没有启动消费者,重启了RabbitMQ服务,队列和消息都会丢失。 解决方案: 针对这个问题,有以下几个机制可以解决: 生产者确认; 持久化; 手动ACK。 生产者确认 首先,我们要确保生产者能成功地将消息发送到RabbitMQ服务器。 默认情况下生产者发送消息并不会返回任何状态信息,也就是它并不知道消息有没有正确地到达服务器。 针对这个问题,RabbitMQ提供了两种解决方案: 事务机制; 通过发送方确认机制(publisher confirm); 事务机制 相关的方法主要有三个: channel.txSelect:用于将当前的channel设置成事务模式; channel.txCommit:用于提交事务; channel.txRollback:用于回滚事务. 用过数据库的人对事务一词肯定不陌生,在RabbitMQ中也是类似的,只有消息被RabbitMQ服务端成功接收,事务才能提交成功,否则就会触发异常,可以对异常进行捕获处理。 事务机制是阻塞形式的,一条消息发送之后会使消息端阻塞,以等待RabbitMQ的回应,才能发送下一个消息。 使用事务机制会影响RabbitMQ的性能,因此还是推荐使用发送方确认机制。 发送方确认 机制是指生产者将channel设置成confirm模式,所有在该信道上发布的消息都会被指派一个唯一ID(从1开始)

rabbitmq学习(三) —— 工作队列

一世执手 提交于 2020-04-26 19:04:59
工作队列,又称任务队列,主要思想是避免立即执行资源密集型任务,并且必须等待完成。相反地,我们进行任务调度,我们将一个任务封装成一个消息,并将其发送到队列。工作进行在后台运行不断的从队列中取出任务然后执行。当你运行了多个工作进程时,这些任务队列中的任务将会被工作进程共享执行。 这个概念在 Web 应用程序中特别有用,在短时间 HTTP 请求内需要执行复杂的任务。 准备工作 现在,假装我们很忙,我们使用 Thread.sleep 来模拟耗时的任务。 发送端 public class NewTask { private final static String QUEUE_NAME = "hello" ; public static void main(String[] args) throws IOException, TimeoutException { // 创建连接 ConnectionFactory factory = new ConnectionFactory(); // 设置 RabbitMQ 的主机名 factory.setHost("localhost" ); // 创建一个连接 Connection connection = factory.newConnection(); // 创建一个通道 Channel channel = connection

RabbitMQ的简单应用【转】

对着背影说爱祢 提交于 2020-04-26 19:04:46
虽然后台使用了读写分离技术 ,能够在一定程度上抗击高并发 ,但是如果并发量特别巨大时 ,主数据库不能同时处理高并发的请求 ,这时数据库容易宕机 . 问题 : 现在的问题是如何既能保证数据库正常运行 ,又能实现用户数据的入库操作 ? 解决方案 : 引入 rabbitMQ技术 : 说明 : 当数据库的访问压力过载时 ,这时会将过载以后的数据先保存到 rabbitMQ中 .其中的数据结构是队列的形式 ,先进先出 .这时数据库从队列中取数据执行 .一直到队列中的数据全部操作完成为止 . RabbitMQ就是消息的中间件 . RabbitMQ介绍 : RabbitMQ性能分析 : 1.MS MQ:是微软的产品 应用于 .net框架 2.Ac tiveMQ:是 apache的产品 做业务用图广泛 3.Ra bbitQM:是爱立信的产品 (早期手机生产厂商 )基于 erlang语言 (函数式编程大数据 scala语言 ) 4.ZeroMQ:大数据中应用广泛 ,缺点容易丢失数据 .但是业务系统中使用率较少 5.Kafka MQ:大数据项目中使用 ,50万 /秒 现在主流 5.Rabbit MQ环境搭建 : 1.配置 JDK: 2.固定虚拟机 IP地址 : 3.连接虚拟机 : 编辑文件跳转路径 : Vim go Cd /usr/local/src 2.安装 rabbitMQ: 1.新建文件

RabbitMQ消息确认机制之事务机制

点点圈 提交于 2020-04-26 14:18:35
一 问题提出 生产者发送消息出去之后,不知道到底有没有发送到RabbitMQ服务器, 默认是不知道的。而且有的时候我们在发送消息之后,后面的逻辑出问题了,我们不想要发送之前的消息了,需要撤回该怎么办。 二 解决方案 1 AMQP 事务机制 2 Confirm 模式 本次关注事务机制 三 事务机制说明 AMPQ提供了以下几个方法: txSelect 将当前channel设置为transaction模式 txCommit 提交当前事务 txRollback 事务回滚 四 代码——正常情况 1 工具类 /** * Copyright (C), 2020-2020, 软件公司 * FileName: TxSend * Author: cakin * Date: 2020/4/25 * Description: 事务生产者 */ package com.rabbitmq.tx; /** * @ClassName: TxSend * @Description: 事务生产者 * @Date: 2020/4/25 * @Author: cakin */ import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.util.ConnectionUtils; import