mq

RocketMQ(七)——Transaction Message(事务消息)

懵懂的女人 提交于 2020-01-16 14:19:01
分布式事务 通过MQ解决分布式事务的思路 1) 业务和消息生成耦合在一起 2) 业务和消息解耦 RocketMQ 中的事务消息 1) 目前RMQ3.2.6中事务消息的实现原理及存在的问题 2) 问题解决思路 本文介绍RocketMQ提供的第三种类型的消息——Transaction Message(事务消息)。在说事务消息之前,我们先来说说分布式事务的那些事! 分布式事务 什么是分布式事务,我的理解是一半事务。怎么说,比如有2个异构系统,A异构系统要做T1,B异构系统要做T2,要么都成功,要么都失败。 要知道异构系统,很显然,不在一个数据库实例上,它们往往分布在不同物理节点上,本地事务已经失效 2阶段提交 2阶段提交协议,Two-Phase Commit,是处理分布式事务的一种常见手段。2PC,存在2个重要角色:事务协调器(TC),事务执行者。 2PC,可以看到节点之间的通信次数太多了,时间很长!时间变长了,从而导致,事务锁定的资源时间也变长了,造成资源等待时间变长!在高并发场景下,存在严重的性能问题! 通过MQ解决分布式事务的思路 下面,我们来看看MQ在高并发场景下,是如何解决分布式事务的。 考虑生活中的场景: 我们去北京庆丰包子铺吃炒肝,先去营业员那里付款(Action1),拿到小票(Ticket),然后去取餐窗口排队拿炒肝(Action2)。思考2个问题:第一

分布式之消息队列

旧巷老猫 提交于 2020-01-16 10:58:21
1、为什么要使用消息队列? 主要有三个原因: 解耦、异步、削峰 (1)解耦 传统模式: 传统模式的 缺点 : 系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦! 中间件模式: 中间件模式的的 优点 : 将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。 (2)异步 传统模式: 传统模式的 缺点 : 一些非必要的业务逻辑以同步的方式运行,太耗费时间。 中间件模式: 中间件模式的的 优点 : 将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度 (3)削峰 传统模式 传统模式的 缺点 : 并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常 中间件模式: 中间件模式的的 优点 : 系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。 2、使用了消息队列会有什么缺点? 分析 :一个使用了MQ的项目,如果连这个问题都没有考虑过,就把MQ引进去了,那就给自己的项目带来了风险。我们引入一个技术,要对这个技术的弊端有充分的认识,才能做好预防。 要记住,不要给公司挖坑! 回答 :回答也很容易,从以下两个个角度来答 系统可用性降低 :你想啊,本来其他系统只要运行好好的,那你的系统就是正常的。现在你非要加个消息队列进去

MQ消息队列

可紊 提交于 2020-01-16 10:40:28
一、为什么使用消息队列? 大多数情况下,使用消息队列目的是:: 解耦、异步、削峰 。 通过一个 MQ,Pub/Sub 发布订阅消息这么一个模型,彻底解耦了 通过MQ,使得同步的操作变为异步操作,提高效率。 通过MQ,控制服务可以接收到的请求数量 二、消息队列有什么优缺点 优点就是在特殊场景下有其对应的好处, 解耦、异步、削峰 缺点有以下几个: 系统可用性降低 系统引入的外部依赖越多,越容易挂掉。需要保证消息队列的高可用 系统复杂度提高,保证消息没有重复消费,怎么处理消息丢失的情况,怎么保证消息传递的顺序性?头大头大,问题一大堆,痛苦不已。 一致性问题 A 系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,要是 BCD 三个系统那里,BD 两个系统写库成功了,结果 C 系统写库失败了,咋整?你这数据就不一致了。 三、如何解决消息丢失? ack(消费者确认)( 消费者手动ack ) 持久化 (交换机、队列、消息) 不推荐使用消息事务,会验证降低性能 生产者确认(publisher confirm):生产者发送消息后,等待mq的ACK,如果没有收到或者收到失败信息,则重试。如果收到成功消息则业务结束。 channel.waitForConfirmsOrDie(10000); 可靠消息服务(可选,自己编写逻辑):对于部分不支持生产者确认的消息队列,可以发送消息前

mq消息发送

空扰寡人 提交于 2020-01-16 00:52:50
钩子的注册: DefaultMQProducerImpl#registerSendMessageHook注册钩子处理类,可注册多个。 public SendResult sendMessage( final String addr, final String brokerName, final Message msg, final SendMessageRequestHeader requestHeader, final long timeoutMillis, final CommunicationMode communicationMode, final SendCallback sendCallback, final TopicPublishInfo topicPublishInfo, final MQClientInstance instance, final int retryTimesWhenSendFailed, final SendMessageContext context, final DefaultMQProducerImpl producer ) throws RemotingException, MQBrokerException, InterruptedException { long beginStartTime = System

消息中间件介绍

纵饮孤独 提交于 2020-01-15 01:15:30
题目 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景? 消息中间件各种面试题: 消息中间件面试题:消息丢失怎么办? 消息中间件面试题:消息队列的优缺点,区别 消息中间件面试题:消息中间件的高可用 消息中间件面试题:如何保证消息的顺序性 消息中间件面试题:如何保证消息不被重复消费 消息中间件面试题:如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时呢? 消息中间件面试题:如果让你写一个消息队列,该如何进行架构设计? 面试题剖析 为什么使用消息队列 先说一下消息队列常见的使用场景吧,其实场景有很多,但是比较核心的有 3 个:解耦、异步、削峰。 解耦 看这么个场景。A 系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这个数据呢?那如果 C 系统现在不需要了呢?A 系统负责人几乎崩溃… mq-1 在这个场景中,A 系统跟其它各种乱七八糟的系统严重耦合,A 系统产生一条比较关键的数据,很多系统都需要 A 系统将这个数据发送过来。A 系统要时时刻刻考虑 BCDE 四个系统如果挂了该咋办?要不要重发,要不要把消息存起来?头发都白了啊! 如果使用 MQ,A 系统产生一条数据,发送到 MQ 里面去,哪个系统需要数据自己去 MQ 里面消费

RabbitMQ学习一环境搭建

别来无恙 提交于 2020-01-11 08:02:25
RabbitMq学习一环境搭建 一、下载及安装 (一)访问官网并进行下载https://www.rabbitmq.com RabbitMq基于Erlang开发因此还需下载和安装Mq的运行环境Erlang,注意Mq的版本要与Erlang相匹配,版本相兼容信息可在Mq官网查阅 (二)安装 先安装Erlang再安装Mq默认都是下一步直至结束。 再安装RabbitMq默认下一步直到结束。 下载地址:https://pan.baidu.com/s/1QWM8ZhuFE5hS1CMaWdAehw 经过测试新版本下安装可以直接访问RabbitMq的UI控制界面 http://localhost:15672 默认用户名和密码都是guest 二、在MQ中UI控制界面中进行用户管理 (一)创建用户 以超管身份登录http://localhost:15672选择Admin功能页进行用户的新增 (二)virtual hosts virtual hosts就相当于数据库(mySql的DB),只有给用户进行了授权那么用户才能进行访问和使用数据库 进行virtual hosts的创建,创建中一般以“/”进行开头 (三)对用户进行授权 (四)MQ中UI界面相关功能的介绍 实际开发中使用代码控制和操作mq,使用的就是amqp通信协议 来源: CSDN 作者: 平凡一哥 链接: https://blog.csdn

windows系统下安装RocketMQ

我怕爱的太早我们不能终老 提交于 2020-01-10 20:21:44
下载RocketMQ RocketMQ官网 根据版本,选择下载Binary的版本,我是下载的4.5.2的 部署RocketMQ 配置一下系统环境变量,和JDK的环境变量类似 变量名:ROCKETMQ_HOME 变量值:你本地下载的zip的解压路径 同时需要把新添加的变量,增加到系统变量 path 里面。配置 %ROCKETMQ_HOME%\bin; 配置到 path 里面即可。 启动name server 进入到RocketMQ的解压目录的bin目录,执行启动name server的命令: start mqnamesrv.cmd 可以把该启动命令编写一个简单的启动脚本:(该脚本放在解压出来的MQ同级目录) @echo off START %~dp0\rocketmq-all-4.5.2-bin-release\bin\mqnamesrv.cmd 启动broker 执行启动命令: start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true 或者新建可执行脚本:roketmq-mqbroker-start.bat @echo off START %~dp0\rocketmq-all-4.5.2-bin-release\bin\mqbroker.cmd -n 127.0.0.1:9876

MQ的定义

﹥>﹥吖頭↗ 提交于 2020-01-09 23:54:54
来自森大科技官方博客 http://www.cnsendblog.com/index.php/?p=263 GPS平台、网站建设、软件开发、系统运维,找森大网络科技! http://cnsendnet.taobao.com 介绍: 它提供了强大、 安全、 稳定的消息传递主干, 在世界屡获殊荣。 它帮您搭建企业服务总线(ESB)的基础传输层。 IBM WebSphere MQ为SOA提供可靠的消息传递。它为SOA连通性提供可靠、 经过验证的消息传递主干, 全方位、 多用途的数据传输, 并帮助您搭建企业服务总线的传输基础设施。 • 跨任何商业IT系统连接应用程序和Web服务, 提供完整的JMS(Java消息服务)支持, 包括发布-订阅。 • 对Web服务的整合化支持。 • 基于Eclipse的新工具—MQ Explorer, 适用于Windows和Intel(x86), 支持整个消息传递主干的远程和安全配置。 • WebSphere MQ V6.0.2增强了JMS和安全性, 构建在WebSphere MQ V6.0中引入的新配置工具之上, 该工具以新Eclipse插件的形式提供, 可增强您的MQ Explorer控制台。 • 与WebSphere Application Server的消息传递服务无缝互操作。 • 支持行业标准安全套接字层(Secure Sockets Layer,

rabbitmq数据备份与还原

半世苍凉 提交于 2020-01-09 01:58:36
一、场景 现在有服务器A和服务器B ,由于业务需要,要求把服务器A上mq的数据迁移到服务器B上,rabbitmq的数据包括元数据(RabbitMQ用户、vhost、队列、交换和绑定)和消息数据,而消息数据存储在单独的消息存储库中。 A:192.168.2.58 B:192.168.1.60 二、元数据备份和还原 1、操作 在服务B上搭建rabbitmq服务,注意,主机名最好和A上的MQ保持一致。避免后面的数据存储节点名不一致,导致启动失败 安装过程详见: 2、导出数据 用管理员账号登录到A服务器上的管理后台 http://192.168.2.58:15672,按如下所示把备份的数据下载到本地 3、导入数据 登录到B服务器上的MQ管理后台 http://192.168.1.60:15672,进入如下图所示的位置,导入数据,大概10秒钟左右。 4、验证数据 刷新页面,查看用户、队列、vhost 等信息是否存在 三、消息数据备份和还原 1、确定数据目录 登录到A服务器,执行如下命令,确定消息数据存储目: [root@rabbitmq-ipr-service-test opt]# rabbitmqctl eval 'rabbit_mnesia:dir().' "/var/lib/rabbitmq/mnesia/rabbit@rabbitmq-ipr-service-test" 2

腾讯自研万亿级消息中间件TubeMQ为什么要捐赠给Apache?

家住魔仙堡 提交于 2020-01-08 12:01:14
导语 | 近日,云+社区技术沙龙“腾讯开源技术”圆满落幕。本次沙龙邀请了多位腾讯技术专家围绕腾讯开源与各位开发者进行探讨,深度揭秘了腾讯开源项目TencentOS tiny、TubeMQ、Kona JDK、TARS以及MedicalNet。本文是对张国成老师演讲的整理。 本文要点: Message Queue 的原理和特点; TubeMQ相关实现原理及使用介绍; TubeMQ后续的发展和探讨。 一、Message Queue 简介 对于Message Queue(以下简称MQ),Wiki百科上的定义指:不同进程之间或者相同进程不同线程之间的一种通讯方式,它是一种通讯方式。 那我们为什么要采用MQ呢?这是由MQ的特点来决定的。第一是因为它可以整合多个不同系统共同协作;第二是它可以解耦,进行数据传递和处理;第三是它可以做峰值的缓冲处理,我们平常接触到的像Kafka、RocketMQ、Pulsar等基本上也都有这样的特点。 那作为大数据场景下的MQ又有什么特点呢?从我个人的理解来说,就是 高吞吐低延时,系统尽可能地稳定,成本尽可能地低,协议也不需要特别地复杂,特别是水平扩展能力要尽可能的高。 因为像海量数据基本上都是到百亿、千亿、万亿,比方说我们自己的生产环境可能一个月、一年的时间就会翻一番,如果没有横向的扩展能力,系统就很容易出现各种问题。 二、TubeMQ实现原理及使用介绍 1