消息队列

观极客时间之高并发系统设计40问 后感

与世无争的帅哥 提交于 2019-12-14 07:25:58
文章目录 个人感受 个人解毒(du) 基础篇 (6讲) 01高并发系统:它的通用设计方法是什么? 02 | 架构分层:我们为什么一定要这么做? 03 | 系统设计目标(一):如何提升系统性能? 04 | 系统设计目标(二):系统怎样做到高可用? 05 | 系统设计目标(三):如何让系统易于扩展? 07 | 池化技术:如何减少频繁创建数据库连接的性能损耗? 08 | 数据库优化方案(一):查询请求增加时,如何做主从分离? 09 | 数据库优化方案(二):写入数据量增加时,如何实现分库分表? 10 | 发号器:如何保证分库分表后ID的全局唯一性? 11 | NoSQL:在高并发场景下,数据库和NoSQL如何做到互补? 演进篇 · 缓存篇 (6讲) 12 | 缓存:数据库成为瓶颈后,动态数据的查询要如何加速? 13 | 缓存的使用姿势(一):如何选择缓存的读写策略? 14 | 缓存的使用姿势(二):缓存如何做到高可用? 15 | 缓存的使用姿势(三):缓存穿透了怎么办? 16 | CDN:静态资源如何加速? 加餐 | 数据的迁移应该如何做? 演进篇 · 消息队列篇 (6讲) 17 | 消息队列:秒杀时如何处理每秒上万次的下单请求? 18 | 消息投递:如何保证消息仅仅被消费一次? 19 | 消息队列:如何降低消息队列系统中消息的延迟? 演进篇 · 分布式服务篇 (9讲) 21 |

RabbitMQ整合 SpringCloud

强颜欢笑 提交于 2019-12-14 06:17:18
RabbitMQ整合 SpringCloud实战 注意一点,在发送消息的时候对template进行配置mandatory=true保证监听有效 生产端还可以配置其他属性,比如发送重试,超时时间、次数、间隔等 消费端核心配置 首先配置手工确认模式,用于ACK的手工处理,这样我们可以保证消息的可靠性送达,或者在消费端消费失败的时候可以做到重回队列、根据业务记录日志等处理 可以设置消费端的监听个数和最大个数,用于控制消费端的并发情况 @RabbitListener注解的使用 消费端监听@RabbitListener注解,这个对于在实际工作中非常的好用 @RabbitListener是一个组合注解,里面可以注解配置(@QueueBinding、@Queue、@Exchange)直接通过这个组合注解一次性搞定消费端交换机、队列、绑定、路由、并且配置监听功能等 注:由于类配置写在代码里非常不友好,所以强烈建议大家使用配置文件配置 相关代码 rabbitmq-common子项目 package com.tt.rabbitmqcommon.entity; import java.io.Serializable; public class Order implements Serializable { private String id; private String name; public

RabbitMq入门以及使用教程

淺唱寂寞╮ 提交于 2019-12-14 02:47:30
原文转载:http://blog.csdn.net/whycold/article/details/41119807 推荐文章:SpringBoot+RabbitMq的使用 一、简介 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ等等... 二、使用场景 在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。 三、相关名称介绍 1、ConnectionFactory、Connection、Channel ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。 Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑。 ConnectionFactory为Connection的制造工厂。

分布式之消息队列的特点、选型、及应用场景详解

主宰稳场 提交于 2019-12-13 19:02:21
什么是消息队列 消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列。 消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,有消息系统来确保信息的可靠专递,消息发布者只管把消息发布到MQ中而不管谁来取,消息使用者只管从MQ中取消息而不管谁发布的,这样发布者和使用者都不用知道对方的存在。 Producer:消息生产者,负责产生和发送消息到 Broker; Broker:消息处理中心。负责消息存储、确认、重试等,一般其中会包含多个 queue; Consumer:消息消费者,负责从 Broker 中获取消息,并进行相应处理; 现在常用的MQ组件有ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ,当然近年来火热的Kafka,从某些场景来说,也是MQ,当然kafka的功能更加强大。 虽然不同的MQ都有自己的特点和优势,但是,不管是哪种MQ,都有MQ本身自带的一些特点,下面,咱们谈谈消息队列的的特点、优势、选型、以及应用场景。 为什么需要消息队列 在高并发分布式环境下,由于来不及同步处理,通过使用消息队列,可以异步处理请求,从而缓解系统的压力。 举一个订单系统的例子:用户点击下订单

分布式之消息队列的特点、选型、及应用场景详解

故事扮演 提交于 2019-12-13 16:13:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 什么是消息队列 消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列。 消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,有消息系统来确保信息的可靠专递,消息发布者只管把消息发布到MQ中而不管谁来取,消息使用者只管从MQ中取消息而不管谁发布的,这样发布者和使用者都不用知道对方的存在。 Producer:消息生产者,负责产生和发送消息到 Broker; Broker:消息处理中心。负责消息存储、确认、重试等,一般其中会包含多个 queue; Consumer:消息消费者,负责从 Broker 中获取消息,并进行相应处理; 现在常用的MQ组件有ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ,当然近年来火热的Kafka,从某些场景来说,也是MQ,当然kafka的功能更加强大。 虽然不同的MQ都有自己的特点和优势,但是,不管是哪种MQ,都有MQ本身自带的一些特点,下面,咱们谈谈消息队列的的特点、优势、选型、以及应用场景。 为什么需要消息队列 在高并发分布式环境下,由于来不及同步处理,通过使用消息队列

RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较

非 Y 不嫁゛ 提交于 2019-12-13 12:51:20
RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较 转载 ducode 发布于2015-01-03 10:15:00 阅读数 215 收藏 一.Direct Exchange 任何发送到Direct Exchange的消息都会被转发到RouteKey中指定的Queue。 1.一般情况可以使用rabbitMQ自带的Exchange:”"(该Exchange的名字为空字符串,下文称其为default Exchange)。 2.这种模式下不需要将Exchange进行任何绑定(binding)操作 3.消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。 4.如果vhost中不存在RouteKey中指定的队列名,则该消息会被抛弃。 二.Fanout Exchange 任何发送到Fanout Exchange的消息都会被转发到与该Exchange绑定(Binding)的所有Queue上。 1.可以理解为路由表的模式 2.这种模式不需要RouteKey 3.这种模式需要提前将Exchange与Queue进行绑定,一个Exchange可以绑定多个Queue,一个Queue可以同多个Exchange进行绑定。 4.如果接受到消息的Exchange没有与任何Queue绑定,则消息会被抛弃。 三.Topic Exchange

消息中间件系列教程(04) -RabbitMQ -简介&安装

久未见 提交于 2019-12-13 08:12:40
1. 简介 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。 RabbitMQ是由RabbitMQ Technologies Ltd开发并且提供商业支持的。该公司在2010年4月被SpringSource(VMWare的一个部门)收购。在2013年5月被并入Pivotal。其实VMWare,Pivotal和EMC本质上是一家的。不同的是VMWare是独立上市子公司,而Pivotal是整合了EMC的某些资源,现在并没有上市。 RabbitMQ官网: http://www.rabbitmq.com AMQP协议介绍: https://baike.baidu.com/item/AMQP/8354716?fr=aladdin 注意:RabbitMQ是采用erlang语言开发的,所以必须有erlang环境才可以运行。

Centos7 安装rabbitmq

╄→尐↘猪︶ㄣ 提交于 2019-12-13 06:43:34
一、RabbitMQ简单介绍 RabbitMQ就是当前最主流的消息中间件之一。RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 在目前分布式的大环境下,成为非常常用的消息队列,以下详细说明怎么在centos7 上安装部署rabbitmq,并列举简单的维护,方便运维同学能更好的维护rabbitmq的正常运行。由于一般生产环境,不管是erlang还是 rabbitmq都不能随便进行版本升级,每次升级都是要谨慎的,所以这里推荐都使用源码安装,这样就固定了版本,不会出现通过yum安装的话,不小心升级了版本导致服务故障等的问题。当然yum安装会更简单,这里就不做介绍,有兴趣的参考官方文档即可。 二、Centos7下安装rabbitmq rabbitmq是erlang语言编写的,安装rabbitmq之前,需要先安装erlang,这里用erlang的源码进行安装,erlang安装包官网下载地址:http://erlang.org/download/ wget http://erlang.org/download/otp_src_21.1.tar.gz

MQ消息队列基础1

佐手、 提交于 2019-12-13 03:43:45
消息队列的作用: 异步,削峰,降低系统耦合性。 1.通过异步处理提高系统性能:(削峰,减少响应时间,比如如果没有消息队列,那么可能100条数据同时打入数据库,而有了消息队列,则数据会一条一条写入数据库,遵守消息队列的先进先出规则)。 2.降低系统耦合性:不同进程之间传递消息时,两个进程之间耦合度过高,改动一个进程,则必须修改另一个进程,为了隔离这两个进程,在两进程间抽离出一层(一个模块),两进程之间的通信,必须通过消息队列来传递,单独修改某一个进程,不会影响另一个;(比如你去送信,如果接受人的地址改变了,那么你送信的路线也会改变,但是如果中间多个邮局,那么即使收信人的地址改变了,也和你没关系,你只要把信放在邮局就ok了,你的路线永远是从你家到邮局这条固定的。) 常见的MQ:ActiveMq,RabbitMQ,RocketMQ,Kafka 名称 ActiveMQ RabbitMQ RocketMQ Kafka 单击吞吐量 万级,吞吐量比RockerMQ和Kafka要低了一个数量级 万级,吞吐量比RocketMQ和kafka要低了一个数量级 十万级,RocketMQ也是可以支撑高吞吐的一种MQ 十万级别,这是kafka最大的有点,就是吞吐量高。一般配合大数据类的系统来进行实时数据计算,日志采集等场景 topic数量对吞吐量的影响 topic可以达到几百,几千个的级别

rabbitmq常见面试题

橙三吉。 提交于 2019-12-13 02:21:55
1、使用RabbitMQ有什么好处? 1.解耦,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦! 2.异步,将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度 3.削峰,并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常 2、RabbitMQ 中的 broker 是指什么?cluster 又是指什么? broker 是指一个或多个 erlang node 的逻辑分组,且 node 上运行着 RabbitMQ 应用程序。cluster 是在 broker 的基础之上,增加了 node 之间共享元数据的约束。 3、RabbitMQ 概念里的 channel、exchange 和 queue 是逻辑概念,还是对应着进程实体?分别起什么作用? queue 具有自己的 erlang 进程;exchange 内部实现为保存 binding 关系的查找表;channel 是实际进行路由工作的实体,即负责按照 routing_key 将 message 投递给 queue 。由 AMQP 协议描述可知,channel 是真实 TCP 连接之上的虚拟连接,所有 AMQP 命令都是通过 channel 发送的,且每一个 channel 有唯一的 ID。一个 channel 只能被单独一个操作系统线程使用,故投递到特定