rocketmq

消息队列activemq

柔情痞子 提交于 2019-12-20 17:14:12
消息队列activemq 首先,我们为什么需要消息队列? 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么? 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务场景有个什么技术挑战,如果不用MQ可能会很麻烦,但是你现在用了MQ之后带给了你很多的好处! 先说一下消息队列的常见使用场景吧,其实场景有很多,但是比较核心的有3个:解耦、异步、削峰 1.解耦:现场画个图来说明一下 A系统发送个数据到BCD三个系统,接口调用发送,那如果E系统也要这个数据呢?那如果C系统现在不需要了呢?现在A系统又要发送第二种数据了呢?A系统负责人濒临崩溃中。。。再来点更加崩溃的事儿,A系统要时时刻刻考虑BCDE四个系统如果挂了咋办?我要不要重发?我要不要把消息存起来?头发都白了啊。。。 面试技巧 :你需要去考虑一下你负责的系统中是否有类似的场景,就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。但是其实这个调用是不需要直接同步调用接口的,如果用MQ给他异步化解耦,也是可以的,你就需要去考虑在你的项目里,是不是可以运用这个MQ去进行系统的解耦。在简历中体现出来这块东西,用MQ作解耦。 2.异步:现场画个图来说明一下, A系统接收一个请求,需要在自己本地写库,还需要在BCD三个系统写库

大厂面试必知必会:图解分布式事务实现原理

让人想犯罪 __ 提交于 2019-12-19 17:12:33
问题场景 什么是事务? 事务是数据库从一个稳定状态变迁到另一个稳定状态的保证,具备 ACID 这 4 个特性: 原子性(Atomicity):一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态。 一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性限制没有被破坏。 隔离性(Isolation):两个事务的执行是互不干扰的,两个事务时间不会互相影响。 持久性(Durability):在事务完成以后,该事务对数据库所作的更改便持久地保存在数据库之中,并且是完全的。 例如应用程序需要更新多条相关数据时就需要进行事务处理。 什么是分布式事务? 当遇到复杂业务调用时,可能会出现跨库多资源调用(一个事务管理器,多个资源)/多服务调用(多个事务管理器,多个资源),期望全部成功或失败回滚,这就是分布式事务,用以保证“操作多个隔离资源的数据一致性”。 分布式事务与 XA 规范 分布式事务是指会涉及到操作多个数据库的事务,同样必须保证 ACID。其就是将对同一库事务的概念扩大到了对多个库的事务:对同一库的 SQL 操作对应了分布式事务中对一个库的事务。 X/Open XA 定义了分布式事务处理的规范,并由数据库厂商在驱动层面进行实现。XA 规范的基础是两阶段提交协议

第一个开源框架的issue(RocketMQ)

荒凉一梦 提交于 2019-12-19 03:35:22
之前在学习RocketMQ的时候发现了一个问题,客户端和broker之间关于topic的长度判断不一致,客户端发消息的判断为org.apache.rocketmq.client.Validators#checkTopic,这里的CHARACTER_MAX_LENGTH为255 if (topic.length() > CHARACTER_MAX_LENGTH) { throw new MQClientException("The specified topic is longer than topic max length 255.", null); } broker端处理请求时会进行topic长度判断,这里的判断条件如下所示,这里Byte.MAX_VALUE为127,主要有三处地方org.apache.rocketmq.store.DefaultMessageStore#putMessage org.apache.rocketmq.broker.processor.SendMessageProcessor#sendBatchMessage org.apache.rocketmq.broker.processor.AbstractSendMessageProcessor#msgContentCheck if (requestHeader.getTopic().length() >

RocketMQ在windows上安装和开发使用

南笙酒味 提交于 2019-12-18 21:46:34
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 概述 RocketMQ是alibaba公司开源的一个纯java的开源消息中间件。 开发测试环境搭建 1. 安装&启动 进入到RocketMQ下载包解压的路径下 D:\machine\RocketMQ-3.0.8\RocketMQ-3.0.8> 接下来安装 执行下边的命令或者执行install.bat(在这个bat文件中的命令如下)对maven熟悉的一眼就知道是执行clean package install assembly等操作。 mvn -Dmaven.test.skip=true clean packageinstall assembly:assembly –U 操作信息如下: [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] rocketmq-all 3.0.8 [INFO] rocketmq-remoting 3.0.8 [INFO] rocketmq-common 3.0.8 [INFO] rocketmq-client 3.0.8 [INFO]

rocketMQ集群双主双从同步模式(2m-2s-sync)搭建

拜拜、爱过 提交于 2019-12-18 19:41:05
目标: 简单搭建一个双主双从同步的rocketMq集群。 包含一个nameserver集群,一个broker集群。部署一个监控端。 去apache官网( http://rocketmq.apache.org/release_notes/release-notes-4.6.0/ ) 下载最新的rocketmq发行版, 我用的是4.6版本( rocketmq-all-4.6.0-bin-release.zip ); 下载二进制包(zip),解压路径我指定的是/usr/local/mq/rocketmq/目录下 另外需要JDK环境,此处不做详细说明; 一、准备工作 1)、服务器环境 规划:本地启动两台虚拟机; 序号 IP 角色 架构模式 1 192.168.75.128 nameserver,brokerserver Master1,Slave2 2 192.168.75.129 nameserver,brokerserver Master2,Slave1 2)、Host添加信息(两台机器都要执行) 编辑hosts文件,添加域名信息 vim /etc/hosts # nameserver 192.168.75.128 rocketmq-nameserver1 192.168.75.129 rocketmq-nameserver2 # broker 192.168.75.128

构建企业级业务高可用的延时消息中台

无人久伴 提交于 2019-12-18 16:41:56
1.业务场景剖析 公司业务系统(比如:电商系统)中有大量涉及定时任务的业务场景,例如:实现买卖双方在线沟通的IM系统,为了确保接收方能够收到消息,服务端一般都会有重试策略,即服务端在消息发出的一段时间内,如果没收到接收方的确认信息,则重新发送消息。这就是一个典型的定时任务场景—消息发出等待固定的时间后,触发消息重发逻辑,重发逻辑首先判断所发消息是否收到确认信息,如果没有就将对应的消息再发送一次。类似的场景有很多,例如:自动取消长时间未支付的订单、买家收货一段时间以后自动确认打款等等。 应对上述场景比较粗暴的解决方案是定时扫库,例如:业务将订单的支付超时时间定义为2小时。可以每1分钟扫一次订单库,将超时订单取消。显然,此方案不够优雅,主要问题如下: 1.增加数据库读压力; 2.不够精确,会有最长1分钟的滞后; 扫库的方案一般体量不大时可以使用,当业务发展到一定规模后就不再适用。对IM消息重发秒级别的定时需求,只能增加扫库的频率,但过于频繁的扫库很可能会将数据库拖垮。显然需要更优雅的技术方案解决定时任务问题。 2.时间轮算法剖析 时间轮算法可以高效的处理定时任务,并且有非常高的精度。我们以IM的消息重发功能为例介绍下时间轮算法的应用。假设消息发出15秒后触发重发逻辑,可以设计如图1所示的数据结构: 图1 时间轮算法 1.一个包含15个元素的数组,数组每个元素指向一个链表

聊聊rocketmq的RemotingSendRequestException

∥☆過路亽.° 提交于 2019-12-16 22:53:21
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 序 本文主要研究一下rocketmq的RemotingSendRequestException RemotingSendRequestException rocketmq-remoting-4.6.0-sources.jar!/org/apache/rocketmq/remoting/exception/RemotingSendRequestException.java public class RemotingSendRequestException extends RemotingException { private static final long serialVersionUID = 5391285827332471674L; public RemotingSendRequestException(String addr) { this(addr, null); } public RemotingSendRequestException(String addr, Throwable cause) { super("send request to <" + addr + "> failed", cause); } }

玩转MQTT-阿里云之MQTT使用

南楼画角 提交于 2019-12-16 14:11:37
引言 前两年买一款物联网控制板,当时把玩了一阵之后,验证了下串口通讯、MODBUS协议实现、TCP/UDP/DNS/MQTT通讯(基于GPRS)后,就放到角落里吃灰了呵。 最近收到阿里云的优惠推送,说是什么每月百万条次使用免费,于是想起了这套吃灰装备,是不是也高大上一把,体验下支持高可用、高并发的阿里云,玩下阿里云的MQTT服务呢? 说干就干。 阿里云服务 许多人对云服务一知半解,以为知道个ECS/云主机,就是云服务的全部了。其实,云服务有许多内容,消息中间件服务也是其中一种。 本次我们要使用的MQTT消息服务也是消息中间件的一种。 笔者所知道的消息中间件 ActiveMQ Aopllo RabbitMQ Kafka RocketMQ 消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋和消息通讯四个场景,具体内容园中相关文章不少,笔者不再此献丑了呵。 本文主要对具体实战应用进行说明。 登录阿里云 首先,我们打开阿里云。 https://www.aliyun.com/ 右上角,登录 支持多种方式登录 可用阿里系旗下的淘宝、支付宝、钉钉等帐号登录而无需注册呵,真是方便啊 不过当中,还夹了一个微博登录,不知是什么个情况,本人不用这个,不管也罢。 选择淘宝登录 消息队列MQ 登录阿里云后,找到管理控制台,在如下位置,找到MQ相关服务 阿里云中的产品太多

rocketMQ、DefaultMQ自己的笔记

≡放荡痞女 提交于 2019-12-16 03:12:29
rocketMQ: 生产者: @Autowired RocketMQTemplate rocketMQTemplate; @Autowired private MqConfig mqConfig; 将需要添加到消息队列的属性添加进去: Map<String, Object> map = new HashMap<String, Object>(3) {{ put(" ", dataRealtime.getIotId()); put(" ", dataRealtime.getDataTime().getTime()); put(" ", Float.parseFloat(dataRealtime.getDataValue())); }}; SendResult send = rocketMQTemplate.syncSend(mqConfig.getStandardCheckTopic(),map); if (!send.getSendStatus().equals(SendStatus.SEND_OK)) { logger.error("发送至检查队列失败>>" + JsonMapper.toJsonString(map)); } 需要配置的config:其中包括消费时候的topic: @ConfigurationProperties("q") @Component public

Docker中RocketMQ的安装与使用

独自空忆成欢 提交于 2019-12-15 10:21:39
搜索RocketMQ的镜像,可以通过docker的hub.docker.com上进行搜索,也可以在Linux下通过docker的search命令进行搜索,不过最近防火墙升级后,导致国外的网站打开都很慢,通过命令搜索反而会更加方便,操作Docker命令一定要是root用户或者具有root权限的用户。查询操作如下: docker search rocketmq 可以得到如下的结果: 镜像倒是蛮多的,不过看来看去没有一个是官方发布的,我就随便选一个吧,如foxiswho/rocketmq,以下是一个查看当前镜像所有的版本shell命令: curl https://registry.hub.docker.com/v1/repositories/foxiswho/rocketmq/tags\ | tr -d '[\[\]" ]' | tr '}' '\n'\ | awk -F: -v image='foxiswho/rocketmq' '{if(NR!=NF && $3 != ""){printf("%s:%s\n",image,$3)}}' 如果要查看其它的镜像,只需要将其中的镜像名称foxiswho/rocketmq替换为其它镜像即可,执行该命令得到大致如下结果: 下面的就是分步启动nameserver和broker。 启动NameServer: docker run -d -p