MQ(为什么要使用MQ)】的更多相关文章

最近在改造老系统,遇到了需要使用rabbitMq的场景.在以前使用的过程中需要在发送端和消费端各种配置,感觉比较麻烦,然后突然想到了dubbo中@Reference注解的形式,可不可以做一个类似的架子,这样调用MQ的时候就像调用同步接口一样方便简单呢?于是查了相关资料和看了dubbo的源码,之后就有了思路. 总的来说,要实现的目标就是像dubbo一样,消费端暴露接口(甚至可以复用dubbo服务定义的接口,这样写一个dubbo服务即可同步也可MQ异步),发送端通过自定义的注解注入对象调用方法,通过…
mq根据brokerName查找Broker地址的过程 mq根据MessageQueue查找Broker地址的唯一依据是brokerName,同一组Broker(M-S)他们的bokerName相同但brokerId不同,主服务器的brokerId为0,从服务器的brokerId大于0,rokckertMq提供mQClientFactory.findBrokerAddressInSubscribe来实现根据brokerName,brokerId查找Broker地址 org.apache.rock…
看服务器上的mq配置,看看mq_log,是不是存储满了?…
1.检查操作系统及内存情况:lsb_release -a; 2   检查java 环境:java -version 3   新建用户空间.用户和组: //创建用户目录 mkdir /home/mqm //创建用户组 groupadd mqm //创建用户 useradd -g mqm -d /home/mqm -m -s /bin/bash mqm 4 创建MQ安装文件夹: //更改目录权限 chown -R mqm:mqm /home/mqm //创建MQ安装位置和工作空间 mkdir /op…
关于mq食物以什么样的方式解决了什么样的问题可以参考这里: https://www.jianshu.com/p/cc5c10221aa1 上文中示例基于mq版本较低较新的版本中TransactionListener替换掉了TransactionCheckListener,整个流程有了一些改变,但还是小事务+异步的模式 不再详述 具体的实现中: 在本地事务执行之前会先send一个prepare消息.之后执行本地事务,带着一个transactionId. 最后在endTransaction里更新事务…
消息消费以组的的模式开展: 一个消费组内可以包含多个消费者,每一个消费组可订阅多个主题: 消费组之间有集群模式与广播模式两种消费模式:集群模式-主题下的同一条消息只允许被其中一个消费者消费.广播模式-主题下的同一条消息将被集群内的所有消费者消费一次.集群模式下消息队列负载机制遵循一个通用的思想:一个消息队列同一时间只允许被一个消息消费者消费,一个消费者可以消费多个消息队列. 消息服务器与消费者之间的消息传送也有两种方式 推模式,拉模式:拉模式-消费端主动发起啦消息请求.推模式-消息到达服务器后,…
comitlog文件 ConsumerQueue文件 IndexFile文件 RocketMQ将所有主题的消息存储在同一个文件中,确保消息发送时顺序写文件. 为了提高消息消费的效率RocketMQ引入了ConsumeQueue消息队列文件,每个消息主题包含一个多个消息消费队列,每一个消费队列有一个消费文件.消息到达CommitLog文件后,将异步转发到消息消费队列 为了加速消息的检索性能,引入IndexFile索引文件,根据消息的属性快速从Commitlog文件中检索消息.存储消息Key与Off…
钩子的注册: DefaultMQProducerImpl#registerSendMessageHook注册钩子处理类,可注册多个. public SendResult sendMessage( final String addr, final String brokerName, final Message msg, final SendMessageRequestHeader requestHeader, final long timeoutMillis, final Communicati…
路由发现:缓存中的路由信息什么时候更新呢? 由QueueData转topicPublishInfo的List<QueueMessage>: 选择消息队列: sendLatencyFaultEnable=false,默认不启动Broker故障延迟机制, sendLatenFaultEnable=true,启用Broker故障延迟机制 默认情况:TopicPublishInfo#selectOneMessageQueue: lastBrokerName是上一次选择的执行发送消息失败的Broker.…
创建MQClientInstance实例.这里有个实例缓存 clienrId为客户端IP+instance+(unitname)注意到之前把instance替换为进程id,是为了instance为默认值时,同一台物理服务器部署两个应用程序. MQClientInstance封装了RocketMQ网络处理API,是消息生产者(Producer),消息消费者与NameServer,Broker打交到的网络通道. 向MQClientInstance注册,将当前生产者加入到MQClientInstanc…