消息队列

RabbitMQ

最后都变了- 提交于 2020-01-15 05:52:49
1、RabbitMQ 简介   MQ全称为Message Queue, 消息队列 (MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。 MQ是消费-生产者模型的一个典型的代表,一端往 消息队列 中不断写入消息,而另一端则可以读取或者订阅队列中的消息。   RabbitMQ 是一个消息代理。主要的原理就是通过接受和转发消息。RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,消息中间件主要用于组件之间的解耦。   RabbitMQ服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。 2、使用场景 例如:应用程序A向应用程序B发送请求并期望得到响应 。 发送方 (应用程序A)向 消息中间件 (RabbitMQ) 发送请求, 接受方 (应用程序B)订阅请求。发送方将消息发送给消息中间件后,异步执行程序。 发送方 (应用程序B) 向 消息中间件 (RabbitMQ) 发送请求 , 接受方 (应用程序A)订阅请求。发送方将消息发送给消息中间件后,异步执行程序。 在项目中,将一些无需即时返回且耗时的操作提取出来,进行了 异步处理 ,而这种异步处理的方式大大的节省了服务器的

SpringBoot使用消息队列RabbitMQ

末鹿安然 提交于 2020-01-15 05:51:44
RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲、消息分发的作用。RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,AMQP,即Advanced Message Queuing Protocol, 高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。在项目中,将一些无需即时返回且耗时的操作提取出来,进行了 异步处理 ,而这种异步处理的方式大大的节省了服务器的请求响应时间, 提高了系统的吞吐量。 简单概念 几个名词术语:           Broker - 简单来说就是消息队列服务器的实体。       Exchange - 消息路由器 ,转发消息到绑定的队列上,指定消息按什么规则,路由到哪个队列。       Queue - 消息队列 ,用来存储消息,每个消息都会被投入到一个或多个队列。       Binding - 绑定 ,它的作用就是把 Exchange 和 Queue 按照路由规则绑定起来。       RoutingKey - 路由关键字 ,Exchange 根据这个关键字进行消息投递。       Producter - 消息生产者 ,产生消息的程序。       Consumer - 消息消费者 ,接收消息的程序。       Channel - 消息通道

Spring Boot中使用RabbitMQ

折月煮酒 提交于 2020-01-15 05:50:36
很久没有写Spring Boot的内容了,正好最近在写Spring Cloud Bus的内容,因为内容会有一些相关性,所以先补一篇关于AMQP的整合。 Message Broker与AMQP简介 Message Broker是一种消息验证、传输、路由的架构模式,其设计目标主要应用于下面这些场景: 消息路由到一个或多个目的地 消息转化为其他的表现方式 执行消息的聚集、消息的分解,并将结果发送到他们的目的地,然后重新组合相应返回给消息用户 调用Web服务来检索数据 响应事件或错误 使用发布-订阅模式来提供内容或基于主题的消息路由 AMQP是Advanced Message Queuing Protocol的简称,它是一个面向消息中间件的开放式标准应用层协议。AMQP定义了这些特性: 消息方向 消息队列 消息路由(包括:点到点和发布-订阅模式) 可靠性 安全性 RabbitMQ 本文要介绍的RabbitMQ就是以AMQP协议实现的一种中间件产品,它可以支持多种操作系统,多种编程语言,几乎可以覆盖所有主流的企业级技术平台。 安装 详情见《 安装RabbitMQ 》 Rabbit管理 我们可以直接通过配置文件的访问进行管理,也可以通过Web的访问进行管理。下面我们将介绍如何通过Web进行管理。 执行 rabbitmq-plugins.bat enable rabbitmq

消息中间件介绍

纵饮孤独 提交于 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 里面消费

数据收集之flume与kafka

孤者浪人 提交于 2020-01-14 09:10:35
概念 Flume是管道流方式,提供了很多的默认实现。 Kafka是一个可持久化的分布式的消息队列。 对比 Kafka 是一个通用的系统,可以有许多生产者和消费者共享多个主题。相比之下,Flume是一个专用工具,被设计为旨在往HDFS,HBase发送数据。如果数据被多个系统消费,使用kafka;如果数据被设计给Hadoop使用,使用Flume。 使用Kafka意味着你准备好了编写你自己的生产者和消费者代码。如果已经存在的Flume Sources和Sinks满足你的需求,并且你更喜欢不需要任何开发的系统,请使用Flume。 Flume可以使用拦截器实时处理数据。这些对数据屏蔽或者过量是很有用的。Kafka需要外部的流处理系统才能做到。 Flume不支持副本事件。于是,如果Flume代理的一个节点崩溃了,即使使用了可靠的文件管道方式,你也将丢失这些事件直到你恢复这些磁盘。如果你需要一个高可靠行的管道,那么使用Kafka是个更好的选择。 应用 Flume和Kafka可以结合起来使用。通常会使用Flume + Kafka的方式。其实如果为了利用Flume已有的写HDFS功能,也可以使用Kafka + Flume的方式。 来源: CSDN 作者: Leticia的博客 链接: https://blog.csdn.net/weixin_40213018/article/details

分布式事务,EventBus 解决方案:CAP【中文文档】

可紊 提交于 2020-01-14 03:00:47
原文: 分布式事务,EventBus 解决方案:CAP【中文文档】 最新文档地址: https://github.com/dotnetcore/CAP/wiki 前言 很多同学想对CAP的机制以及用法等想有一个详细的了解,所以花了将近两周时间写了这份中文的CAP文档,对 CAP 还不知道的同学可以先看一下 这篇文章 。 本文档为 CAP 文献(Wiki),本文献同时提供中文和英文版本,英文版本目前还在翻译中,会放到Github Wiki 中。 目录 前言 1、Getting Started 1.1 介绍 1.2 应用场景 1.3 Quick Start 2、API接口 2.1 发布/发送 2.1.1 事务 2.2 订阅/消费 2.2.1 例外情况 3、配置 3.1 Cap Options 3.2 RabbitMQ Options 3.3 Kafka Options 3.4 SqlServer Options 3.5 MySql Options 4、设计原理 4.1 动机 4.2 持久化 4.3 通讯数据流 4.4 一致性 5、实现 5.1 消息表 5.2 消息格式 5.3 EventBus 5.4 重试 6、分布式事务 6.1 异步确保 7、FAQ 1、Getting Started 1.1 介绍 CAP 是一个遵循 .NET Standard 标准库的C#库

使用事件和消息队列实现分布式事务

◇◆丶佛笑我妖孽 提交于 2020-01-14 02:59:39
原文: http://skaka.me/blog/2016/04/21/springcloud1/ 不同于单一架构应用(Monolith), 分布式环境下, 进行事务操作将变得困难, 因为分布式环境通常会有多个数据源, 只用本地数据库事务难以保证多个数据源数据的一致性. 这种情况下, 可以使用两阶段或者三阶段提交协议来完成分布式事务.但是使用这种方式一般来说性能较差, 因为事务管理器需要在多个数据源之间进行多次等待. 有一种方法同样可以解决分布式事务问题, 并且性能较好, 这就是我这篇文章要介绍的使用事件,本地事务以及消息队列来实现分布式事务. 我们从一个简单的实例入手. 基本所有互联网应用都会有用户注册的功能. 在这个例子中, 我们对于用户注册有两步操作: 1. 注册成功, 保存用户信息. 2. 需要给用户发放一张代金券, 目的是鼓励用户进行消费. 如果是一个单一架构应用, 实现这个功能非常简单: 在一个本地事务里, 往用户表插一条记录, 并且在代金券表里插一条记录, 提交事务就完成了. 但是如果我们的应用是用微服务实现的, 可能用户和代金券是两个独立的服务, 他们有各自的应用和数据库, 那么就没有办法简单的使用本地事务来保证操作的原子性了. 现在来看看如何使用事件机制和消息队列来实现这个需求.(我在这里使用的消息队列是kafka, 原理同样适用于ActiveMQ

RabbitMQ(二)

此生再无相见时 提交于 2020-01-14 02:42:24
(1) MQ的概念 Message Queue :消息队列,存放消息的一个容器(先进先出) (2)MQ的优点 解耦 、 异步提速 、 削峰填谷 (3)MQ的缺点 可用性减弱 、复杂性提供、处理一致性 MQ是需要成本的,适合的地方使用。 (4)MQ的实现 RabbitMQ(erlang AMQP协议) ActiveMQ(java JMS接口规范) RocketMQ(java) Kafka(大数据) (5)MQ的工作模式 简单模式、工作队列模式、发布订阅模式、路由模式、通配符模式 (6)编写代码 JAVA ConnectionFactory host / port / username/ password/ virtualHost Connection Channel Channel.exchangeDeclare(exchangeName,exchangeType[fanout\direct\topic]) Channel.queueDeclare(queueName,true,false,false,null); Channel.queueBind(queue,exchange,routingKey); Channel.basicPublish(exchange,routingKey,null,body); Consumer consumer = new

(安卓)Toast消息队列输出

我怕爱的太早我们不能终老 提交于 2020-01-14 02:07:06
package sc.tool; import java.util.ArrayList; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.widget.Toast; /** 示例:ToastQueue.ShowToastQueue(this, "Toast消息队列逐个输出"); * * ToastQueue.java: Toast消息队列输出,Android 9.0 版本后Toast消息连续输出,后出现的Toast会替换掉之前的Toast消息,使得Toast展示不全(同一时间,仅展示最后一条); * 此类用于实现Toast消息的队列输出,按调用顺序,逐个展示,不覆盖、不丢失。 * * ----- 2020-1-10 下午2:56:44 scimence */ public class ToastQueue { // 示例:ToastQueue.ShowToastQueue(this, ""); // Toast.makeText(activity, info, Toast.LENGTH_SHORT).show(); // ShowToastQueue(activity.getApplicationContext(), info);

linux各种IPC机制

别等时光非礼了梦想. 提交于 2020-01-13 19:50:47
linux各种IPC机制   docker中的资源隔离,一种就是IPC的隔离。IPC是进程间通信。 下面的文章转载自https://blog.csdn.net/yyq_9623/article/details/78794775 原帖发表在IBM的developerworks网站上,是一个系列的文章,作者郑彦兴,通过讲解和例子演示了Linux中几种IPC的使用方式,我觉得很好,在这里做一个保留,能看完的话Linux IPC的基础是没有问题的了。 一)Linux环境进程间通信(一)管道及有名管道 http://www.ibm.com/developerworks/cn/linux/l-ipc/part1/ 二)Linux环境进程间通信(二): 信号 上: http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html 下: http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index2.html 三)Linux环境进程间通信(三)消息队列 http://www.ibm.com/developerworks/cn/linux/l-ipc/part3/ 四)Linux环境进程间通信(四)信号灯 http://www.ibm.com/developerworks