消息队列

软件-MQ-RabbitMQ:RabbitMQ

你。 提交于 2020-01-10 02:57:56
ylbtech-软件-MQ-RabbitMQ:RabbitMQ RabbitMQ是实现了 高级消息队列协议(AMQP) 的 开源消息代理软件 (亦称 面向消息的中间件 )。RabbitMQ服务器是用 Erlang 语言编写的,而集群和故障转移是构建在 开放电信平台 框架上的。所有主要的编程语言均有与代理接口通讯的客户端 库 。 1. 返回顶部 1、 中文名:消息队列 外文名:Message Queue 简 称:MQ 释 义:一种程序对程序的通信方法 目录 1 简介 2 历史 3 基本概念 4 主要特性 5 安装 6 参见 2、 2. 返回顶部 1、 简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用 Erlang 语言编写的,而群集和故障转移是构建在 开放电信平台 框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。 历史 Rabbit科技有限公司开发了RabbitMQ,并提供对其的支持。起初,Rabbit科技是LSHIFT和CohesiveFT在2007年成立的合资企业,2010年4月被 VMware 旗下的SpringSource收购。RabbitMQ在2013年5月成为GoPivotal的一部分。 基本概念 RabbitMQ是一套 开源(MPL) 的消息队列服务软件,是由 LShift

MessageQueue之IdleHandler

北战南征 提交于 2020-01-09 04:21:03
​IdleHandler是什么? IdleHandler是包含在MessageQueue类中的一个接口,内部只包含一个方法,在消息队列空闲(没有消息或者第一个需要处理的消息在将来执行)时被回调 public static interface IdleHandler { // 当消息队列空闲时会被回调, 返回值表示是否会被重复执行 // 返回true,会在mIdleHandlers列表中保留,在下次空闲时还会被调用; // 返回false,会从mIdleHandlers列表中删除,下次不在被调用 boolean queueIdle(); } mIdleHandlers是一个ArrayList,用于存放需要执行的IdleHandler IdleHandler是怎么工作的? IdleHandler的工作过程分为两步: 添加IdleHandler 执行IdleHandler 首先需要知道IdleHandler是如何储存的,在MessageQueue的变量定义部分可以找到如下代码 // Idler列表,保存着MessageQueue空闲时需要执行的idlers,生命周期和MessageQueue一致 private final ArrayList<IdleHandler> mIdleHandlers = new ArrayList<IdleHandler>(); // 待执行Idler列表

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

swoole通往大神之路——swoole任务中心说明及进程任务架构搭建

狂风中的少年 提交于 2020-01-08 22:26:39
Swoole多任务处理中心 如果你还不会用swoole就out了,swoole通往大神之路——swoole任务中心说明及进程任务架构搭建 教学视频: www.bilibili.com/video/av779… 一、 进程的基本知识 什么是进程,所谓进程其实就 是操作系统中一个正在运行的程序,我们在一个终端当中,通过php,运行一个php文件,这个时候就相当于我们创建了一个进程,这个进程会在系统中驻存,申请属于它自己的内存空间系统资源并且运行相应的程序 对于一个进程来说,它的核心内容分为两个部分,一个是它的内存,这个内存是这进程创建之初从系统分配的,它所有创建的变量都会存储在这一片内存环境当中 一个是它的上下文环境我们知道进程是运行在操作系统的,那么对于程序来说,它的运行依赖操作系统分配给它的资源,操作系统的一些状态。 在操作系统中可以运行多个进程的,对于一个进程来说,它可以创建自己的子进程,那么当我们在一个进程中创建出若干个子进程的时候那么可以看到如图,子进程和父进程一样,拥有自己的内存空间和上下文环境 二、进程间通讯 进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法。每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。

RabbitMQ面试题解析

一世执手 提交于 2020-01-08 13:54:03
1.消息队列的作用与使用场景? 异步:批量数据异步处理。例:批量上传文件,比如代发代扣文件 削峰:高负载任务负载均衡。例:电商秒杀抢购 解耦:串行任务并行化。例:退货流程解耦。 广播:基于Pub/Sub实现一对多通信 2.多个消费者监听一个队列时,消息如何分发? 1.Round-Robin(轮询) 默认的策略,消费者轮流,平均地收到消息。 2.Fair dispatch(公平分发) 如果要实现根据消费者的处理能力来分发消息,给空闲的消费者发送更多消息,可以用basicQos(int prefetch_count)来设置。prefetch_count的含义:当消费者有多少条消息没有响应ACK时,不再给这个消费者发送消息。 3.无法被路由的消息,去了哪里? 如果没有任何设置,无法路由的消息会被直接丢弃。 无法路由的情况:Routing key不正确 解决方案: 1.使用mandatory = true配合ReturnListener,实现消息回发 2.声明交换机时,指定备份交换机。 4.消息在什么时候会变成Dead Letter(死信)? 1.消息被拒绝并且没有设置重新入队:(NACK || Reject)&&requeue == false 2.消息过期(消息或者队列的TTL设置) 3.消息堆积,并且队列达到最大长度,先入队的消息会变成DL。 可以在声明队列的时候,指定一个Dead

RabbitMQ工作模型

梦想与她 提交于 2020-01-08 13:52:49
典型应用场景 1、跨系统的异步通信 人民银行二代支付系统,使用重量级消息队列 IBM MQ,异步,解耦,削峰都有体现。 2、应用内的同步变成异步 3、基于Pub/Sub模型实现的事件驱动 放款失败通知、提货通知、购买碎屏保 系统间同步数据 摒弃ELT(比如全量 同步商户数据); 摒弃API(比如定时增量获取用户、获取产品,变成增量广播)。 4、利用RabbitMQ实现事务的最终一致性。 基本介绍 AMQP协议 AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应 用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户 端/中间件同产品、不同的开发语言等条件的限制。 AMQP的实现有:RabbitMQ、OpenAMQ、Apache Qpid、Redhat Enterprise MRG、AMQP Infrastructure、 ØMQ、Zyre等。 RabbitMQ的特性 RabbitMQ使用Erlang语言编写,使用Mnesia数据库存储消息。 (1)可靠性(Reliability) RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认。(2)灵活的路由(Flexible Routing) 在消息进入队列之前,通过 Exchange

消息中间件之ActiveMQ

旧街凉风 提交于 2020-01-08 13:51:42
什么是消息中间件? 消息中间件是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据 通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,可以在分布式架构下扩展进程之间的通信。 消息中间件能做什么? 消息中间件主要解决的就是分布式系统之间消息传递的问题,它能够屏蔽各种平台以及协议之间的特性,实现引用程序之间的协同。举个非常简单的例子,就拿一个电商平台的注册功能来简单分析下,用户注册这一个服务,不单单只是insert一条数据到数据库里面就完事了,还需要发送激活邮件、发送新人红包或者积分、发送营销短信等一系列操作。假如说这里面的每一个操作,都需要消耗1s,那么整个注册过程就需要耗时4s才能响应给用户。 但是我们从注册这个服务可以看到,每一个子操作都是相对独立的,同时,基于领域划分以后,发送激活邮件、发送营销短信、赠送积分及红包都属于不同的子域。所以我们可以对这些子操作进行来实现异步化执行,类似于多线程并行处理的概念。如何实现异步化呢?用多线程能实现吗?多线程当然可以实现,只是,消息的持久化、消息的重发这些条件,多线程并不能满足。所以需要借助一些开源中间件来解决。而分布式消息队列就是一个非常好的解决办法,引入分布式消息队列以后,架构图就变成这样了(下图是异步消息队列的场景)。通过引入分布式队列,就能够大大提升程序的处理效率,并且还解决了各个模块之间的耦合问题

Windows 安装Rabbitmq

巧了我就是萌 提交于 2020-01-08 13:49:40
Windows 安装Rabbitmq Rabbitmq是基于erlang开发的消息队列,客户端支持主流的开发语言(java、C#、Python等)。 环境:windows server 2012(x64) 1、下载安装 http://www.erlang.org/downloads 下载安装erlang运行环境(OTP) http://www.rabbitmq.com/download.html 下载安装Rabbitmq server 安装完成,可在开始菜单,应用程序中,找到服务启动、服务关闭、服务卸载、服务安装等快捷方式,以及数据、日志、运行等目录。 点击服务启动,rabbitmq服务启动,可在服务管理器(services.msc)中看到“RabbitMQ"服务,服务默认监听端口5672。 2、服务配置 windows 配置文件默认所在位置:”%APPDATA%\RabbitMQ\“ 例如: “C:\Users\Administrator\AppData\Roaming\RabbitMQ\” linux 配置文件默认所在位置"/etc/rabbitmq/“ 根据官方网站文档说明,有3种不同类型的配置。 环境变量( environment variables ),定义端口,文件存储位置和名称。linux一般在"/etc/rabbitmq/rabbitmq-env.conf

【Kafka】——概述

别等时光非礼了梦想. 提交于 2020-01-08 12:17:10
背景 随着现在业务量的增大,高并发的场景也是越来越多,但是在这种高并发的场景下,服务端是不及处理客户端的请求,可能会造成一致阻塞,所以我们考虑是不是应该将这些请求保存下来,然后异步慢慢消化,所以就有了消息队列。对于单个服务来说其实这样没有问题,但是现在基本都是微服务架构,所以简单的运用消息队列已经解决不了我们的需求,我们还希望能够管理这些数据,比如存储和操作,使用的过程中还需要保证高可用性等等,于是市场上就诞生了很多的消息系统平台,如:Kafka、RabbitMQ、RocketMQ等,这里我们就来说下Kafka。 一、介绍 Apache Kafka是一个分布式流处理平台 首先是一些概念: Kafka作为一个集群,运行在一台或者多台服务器上. Kafka 通过 topic 对存储的流数据进行分类。 每条记录中包含一个key,一个value和一个timestamp(时间戳)。 Kafka有四个核心的API: The Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。 The Consumer API 允许一个应用程序订阅一个或多个 topic ,并且对发布给他们的流式数据进行处理。 The Streams API 允许一个应用程序作为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或多个topic中去

转载:android Handler详细使用方法实例

被刻印的时光 ゝ 提交于 2020-01-08 11:57:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文主要介绍Android中Handler的简单使用方法,Handler跟多线程,消息队列联系很紧密,在平常的实际程序开发中比较常见。本文分为4个简单的例子来学校handler 开发环境为android4.1. Handler使用例1 这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中. 本次实验完成的功能是:单击Start按钮,程序会开始启动线程,并且线程程序完成后延时1s会继续启动该线程,每次线程的run函数中完成对界面输出nUpdateThread...文字,不停的运行下去,当单击End按钮时,该线程就会停止,如果继续单击Start,则文字又开始输出了。 软件界面如下: 实验主要部分代码和注释: MainActivity.java: 复制代码 代码如下: package com.example.handler1; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import