mq

消息队列MQ简介

拥有回忆 提交于 2019-12-02 21:45:43
  项目中要用到RabbitMQ,领导让我先了解一下。在之前的公司中,用到过消息队列MQ,阿里的那款RocketMQ,当时公司也做了简单的技术分享,自己也看了一些博客。自己在有道云笔记上,做了一些整理,但后来也就搁在那了。现在有时间,就对MQ的一些简单的概念做下整理吧。   RabbitMQ的一些介绍,请参考 https://www.jianshu.com/p/e55e971aebd8 ,里面对一些概念和使用的讲解还是非常详细的。 什么是消息队列-定义   我们来看下维基百科上面的定义:   是一种进程间通信或同一进程的不同线程间的通信方式,软件的软件的贮列用来处理一系列的输入,通常是来自用户。   消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数。   也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,知道接收者取回它。 下面是架构图 : Producer:消息生产者,负责生产和发送消息到Broker; Broker:消息处理中心,负责消息存储、确认、重试等; Consumer:消息消费中心,负责从Broker中获取消息并处理。 消息队列-特性   异步性:将耗时的同步任务通过发送消息的方式进行异步处理,减少等待时间。   松耦合:不同系统、服务之间可以通过消息队列进行通信

利用zabbix监控RocketMQ

核能气质少年 提交于 2019-12-02 21:39:46
根据需求,监控三个指标: MQ进程、自定义监控项订阅组的未消费值Diff Total和TPS。 创建 MQ 状态的监控模板,进程监控利用zabbix自带的模板; 监控订阅组的Diff Total和TPS 因为每个 Nameserver的订阅组可能会实时改变,所以采用自动发现的方式获取所有的订阅组信息。再根据nameserver 和订阅组获取其Diff Total和TPS。 步骤: 编写订阅组自动发现和自定义监控项的脚本。 #!/bin/bash GroupInfo=`sh /opt/rocketmq/incubator-rocketmq-rocketmq-all-4.1.0-incubating/distribution/target/apache-rocketmq/bin/mqadmin consumerProgress -n "ip:port;ip:port;ip:port" 2>/dev/null` #echo "$GroupInfo" GroupName=`echo "$GroupInfo"|grep -v "#Group"|awk '{print $1}'` subgroup_discovery () { COUNT=`echo "$GroupName" |wc -l` INDEX=0 echo '{"data":[' echo "$GroupName" | while

Rabbit MQ

一个人想着一个人 提交于 2019-12-02 19:43:18
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-deve wget http://erlang.org/download/otp_src_18.3.tar.gz tar -xvf otp_src_18.3.tar.gz ./configure --prefix=/usr/local/erlang --with-ssl -enable-threads -enable-smmp-support -enable-kernel-poll --enable-hipe --without-javac make make install vim /etc/profile #在文件末尾添加下面代码 'ERLANG_HOME'等于上一步'--prefix'指定的目录 ERLANG_HOME=/usr/local/erlang PATH=$ERLANG_HOME/bin:$PATH export ERLANG_HOME export PATH #使环境变量生效 source /etc/profile #输入命令检验是否安装成功 erl wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-generic-unix

消息队列的相关知识

孤街浪徒 提交于 2019-12-02 19:41:42
使用消息队列的好处以及使用场景还有引发的问题 1.流量削峰,用于短时间高并发流量情况,如秒杀活动,双11活动 在传统模式中,用户请求到达服务器后,再由服务器将数据写入数据库,在高并发情况下,流量暴增,数据库写入压力剧增,造成服务器响应时间漫长. 使用消息队列后,服务器将数据发送到消息队列服务器,然后将响应结果返回给用户,消息队列的数据由其消费者去读取并异步的写入到数据库.通过拉长数据处理时间来减少数据库瞬时压力达到流量削峰的目的 2,服务解耦 假设有这样一个场景, 服务A产生数据, 而服务B,C,D需要这些数据, 那么我们可以在A服务中直接调用B,C,D服务,把数据传递到下游服务即可 但是,随着我们的应用规模不断扩大,会有更多的服务需要A的数据,如果有几十甚至几百个下游服务,而且会不断变更,再加上还要考虑下游服务出错的情况,那么A服务中调用代码的维护会极为困难 使用消息队列后, A服务只需要向消息服务器发送消息,而不用考虑谁需要这些数据;下游服务如果需要数据,自行从消息服务器订阅消息,不再需要数据时则取消订阅即可 3.异步调用 考虑定外卖支付成功的情况 支付后要发送支付成功的通知,再寻找外卖小哥来进行配送,而寻找外卖小哥的过程非常耗时,尤其是高峰期,可能要等待几十秒甚至更长 这样就造成整条调用链路响应非常缓慢 而如果我们引入消息队列,订单数据可以发送到消息队列服务器

通过Lts实现定时任务

久未见 提交于 2019-12-02 19:16:33
1、LTS初步认识 1.1、lts是什么? LTS(light-task-scheduler)是一个分布式任务调度框架,支持设置节点组搭建多节点集群水平拓展框架架构,提供多种任务类型包括实时任务、定时任务、corn任务的支持, 主要用于系统中的任务调度以及调度信息监控等 1.2、lts能够解决什么问题? 支持分布式,避免单点故障,支持动态扩容,容错重试 Spring扩展支持,SpringBoot支持,Spring Quartz Cron任务的无缝接入支持 节点监控、任务执行状态监控、jvm等信息监控 多节点任务单一执行、故障转移 1.3、lts相比于其它任务调度框架的优势? 参考文档LTS业务场景说明.pdf 2、LTS架构说明 2.1、lts节点类型 JobClient:主要负责提交任务, 并接收任务执行反馈结果。 JobTracker:负责接收并分配任务,任务调度。 TaskTracker:负责执行任务,执行完反馈给JobTracker。 LTS-Admin:(管理后台)主要负责节点管理,任务队列管理,监控管理等。 2.2、注册中心支持 zookeeper redis 2.3、节点通信方式 netty 2.4、任务队列和日志存储 mysql mongodb 2.5、任务类型 实时任务:提交了之后立即就要执行的任务。 定时任务:在指定时间点执行的任务,譬如 今天3点执行(单次)。

Difference between queue manager and message broker

烂漫一生 提交于 2019-12-02 19:13:22
What is the difference between a Websphere Message Broker and a Queue Manager. I guess the queue manager puts messages in the queue, takes messages out of the queue, moves messages to backout queues etc. So what is the job of the broker? Does it sit between the publisher and the Queue Manager or between the consumer and the Queue Manager? Websphere MQ is a software which uses the AMQ(Asynchronous messaging protocol) . You can achieve asynchronous messaging between your applications via Websphere MQ, which will make your infrastructure loosely coupled(Applications can keep working even though

java架构之路-(MQ专题)RabbitMQ安装和基本使用

◇◆丶佛笑我妖孽 提交于 2019-12-02 19:12:45
RabbitMQ安装   我这里安装是使用阿里云的CentOS7.5来安装的,使用CentOS版本低于7的可能会报错。 1. 安装rabbitmq所需要的依赖包 输入$ yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc- c++ kernel-devel m4 ncurses-devel tk tc xz 2.下载安装包 $ wget www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm $ wget http://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-5.el7.lux.x86_64.rpm $ wget www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm 3.安装服务命令 #第一步:安装erlang语言环境 $ rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm #第二步:安装socat加解密软件 $ rpm -ivh socat-1.7.3.2-5.el7.lux

java架构之路-(MQ专题)RabbitMQ安装和基本使用

£可爱£侵袭症+ 提交于 2019-12-02 19:03:06
RabbitMQ安装   我这里安装是使用阿里云的CentOS7.5来安装的,使用CentOS版本低于7的可能会报错。 1. 安装rabbitmq所需要的依赖包 输入$ yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc- c++ kernel-devel m4 ncurses-devel tk tc xz 2.下载安装包 $ wget www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm $ wget http://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-5.el7.lux.x86_64.rpm $ wget www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm 3.安装服务命令 #第一步:安装erlang语言环境 $ rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm #第二步:安装socat加解密软件 $ rpm -ivh socat-1.7.3.2-5.el7.lux

Java服务MQ消息队列容灾方案

烈酒焚心 提交于 2019-12-02 18:58:12
背景介绍 在前一段时间线上出现过一次事故,一个非常重要的消息生产者服务,由于MQ出现问题,消息大量积压,导致了该服务线程被打满,外部请求返回502,服务采用Springboot搭建,使用Springboot的Tomcat容器。 原因分析 消息的生产者服务是一个高并发量的服务,接受外部方的接口调用,并将消息推送至MQ,调用流程示意图如下: 而事故当天的情况是,MQ消息大量积压,基本等同于MQ挂掉, 大量的请求积压在推送消息到MQ的地方,导致外部的大量的请求在Tomcat的线程池积压,当Tomcat的线程池全部被打满后,服务不能再接受新的请求进入,导致抛出大量的502错误。 容灾方案分析 一、发送消息超时时间设定 首先可以想到的是,在MQ发送消息处,设置推送消息的超时时间,超过超时时间,认为消息发送失败,将消息写入文件中,当时这个方案并没有根本上解决,如果MQ挂掉,Tomcat不被打满的问题,虽然可以解决目前的生产场景的情况,但是当后续请求量更大时候,不能保证Tomcat不被打满,同时,消息推送的超时时间的设定也不好进行把握,如果由于网络波动或其他情况,导致消息推送慢,但是是可以推送成功的,但是万一超过了超时时间,消息直接不会发送,反而会影响目前的业务逻辑。 二、调整Tomcat线程池大小 事故的起因是因为Tomcat被打满,那调整Tomcat的线程池大小,调整大一些不就可以了吗

RabbitMQ队列

一个人想着一个人 提交于 2019-12-02 16:42:07
为啥要使用MQ 以常见的订单系统为例,用户点击【下单】按钮之后的业务逻辑可能包括:扣减库存、生成相应单据、发红包、发短信通知。在业务发展初期这些逻辑可能放在一起同步执行,随着业务的发展订单量增长,需要提升系统服务的性能,这时可以将一些不需要立即生效的操作拆分出来异步执行,比如发放红包、发短信通知等。这种场景下就可以用 MQ ,在下单的主流程(比如扣减库存、生成相应单据)完成之后发送一条消息到 MQ 让主流程快速完结,而由另外的单独线程拉取MQ的消息(或者由 MQ 推送消息),当发现 MQ 中有发红包或发短信之类的消息时,执行相应的业务逻辑。 MQ的介绍 MQ 全称为 Message Queue , 消息队列( MQ )是一种应用程序对应用程序的通信方法。 MQ 是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。 你可以想想在生活中的一种场景:当你把信件的投进邮筒,邮递员肯定最终会将信件送给收件人。我们可以把MQ比作 邮局和邮递员。 MQ和邮局的主要区别是,它不处理消息,但是,它会接受数据、存储消息数据、转发消息 队列,生产者,消费者 队列是RabbitMQ的内部对象,用于存储消息。生产者