消息中间件

ActiveMQ-为什么需要消息中间件?

匆匆过客 提交于 2020-01-03 20:28:27
消息中间件的优势 UNIX的进程间通信就开始运用消息队列技术,一个进程将数据写入某个特定的队列中,其它进程可以读取队列中的数据,从而实现异步通信。对于如今的分布式系统,消息队列已经演变为独立的消息中间件产品,相比于RPC同步通信的方式来说有几个明显的优势: 低耦合,不管是程序还是模块之间,使用消息中间件进行间接通信。 消息的顺序性,消息队列可以保证消息的先进先出。 消息可靠传输,持久化的存储使得消息只有在被消费之后才会删除。 异步通信能力,相对于RPC来说,异步通信使得生产者和消费者得以充分执行自己的逻辑而无需等待。 缓冲能力,消息中间件像是一个巨大的蓄水池,将高峰期大量的请求存储下来慢慢交给后台进行处理,对于秒杀业务来说尤为重要。 但是异步通信也存在程序设计和编程方面的复杂,同时对于实时性要求较高的业务也不能采用异步通信,所以要根据业务具体分析。 J2EE和JEE是什么? J2EE全称是Java to Enterprise Edition,是一套企业级技术规范,包含:JMS Servlet JSP EJB JPA 等。J2EE发展到1.5版本改名为JEE5,所以JEE是J2EE规范的延续。 消息中间件的发展历程 J2EE时代,消息中间件强调企业级特性,比如消息持久化和事务性要求,全部遵循JMS规范。典型的ActiveMQ、HornetQ,后者现在已经发展成ActiveMQ

消息中间件(RabbitMQ)04

有些话、适合烂在心里 提交于 2020-01-01 15:16:31
一、rabbitmq实现了AMQP协议 AMQP是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。目标是实现一种在全行业广泛使用的标准消息中间件技术,以便降低企业和系统集成的开销,并且向大众提供工业级的集成服务。主要实现有 RabbitMQ。 二、AMQP包含的要素 生产者 :消息的创建者,发送到rabbitmq; 消费者 :连接到rabbitmq,订阅到队列上,消费消息,持续订阅(basicConsumer)和单条订阅(basicGet). 消息: 包含有效载荷和标签,有效载荷指要传输的数据,,标签描述了有效载荷,并且rabbitmq用它来决定谁获得消息,消费者只能拿到有效载荷,并不知道生产者是谁。 信道 ,概念:信道是生产消费者与rabbit通信的渠道,生产者publish或是消费者subscribe一个队列都是通过信道来通信的。信道是建立在TCP连接上的虚拟连接,什么意思呢?就是说rabbitmq在一条TCP上建立成百上千个信道来达到多个线程处理,这个TCP被多个线程共享,每个线程对应一个信道,信道在rabbit都有唯一的ID ,保证了信道私有性,对应上唯一的线程使用 (为什么不建立多个TCP连接呢?原因是rabbit保证性能,系统为每个线程开辟一个TCP是非常消耗性能

中间件

守給你的承諾、 提交于 2019-12-26 10:39:08
中间件 1. 什么是中间件? 中间件(middleware)是一种独立的系统软件或服务程序, 它在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件. 2. 为什么使用中间件? 具体地说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担。中间件带给应用系统的,不只是开发的简便、开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。 3. 中间件的分类 中间件所包括的范围十分广泛,针对不同的应用需求涌现出多种各具特色的中间件产品。但至今中间件还没有一个比较精确的定义,因此,在不同的角度或不同的层次上,对中间件的分类也会有所不同。由于中间件需要屏蔽分布环境中异构的操作系统和网络协议,它必须能够提供分布环境下的通讯服务,我们将这种通讯服务称之为平台。基于目的和实现机制的不同,我们将平台分为以下主要几类: 远程过程调用(Remote Procedure Call) 面向消息的中间件(Message-Oriented Middleware) 对象请求代理(Object Request Brokers) 4.

“云时代架构”经典文章阅读感想十五

烂漫一生 提交于 2019-12-26 09:54:13
云时代架构”经典文章阅读感想十五 (阿里面试,我挂在了第四轮 ……) 这一篇文章讲的是一个在 电商这块的经验不是很足 的在职技术人员,它主要的工作经历主要与法院等部门有关,这次在阿里面试时在第四轮被刷下来到经历。之所以读者一篇文章主要还是对找工作面试比较感兴趣。 阿里的面试 一般有四到五轮,我这次的流程是第一轮技术面、第二轮写代码、第三轮 boss 面、第四轮 boss 面、第五轮 HR 面。 而作者倒在了第四面上。 第一面中 主要涉及到的有并发问题、消息中间件问题、 JVM 、项目的技术细节讨论等等。 并发问题:例如火车票购买的高并发有化方法有: 优化方向有两个(今天就讲这两个点): ( 1 ) 将请求尽量拦截在系统上游 (不要让锁冲突落到数据库上去)。传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,并发高响应慢,几乎所有请求都超时,流量虽大,下单成功的有效流量甚小。以 12306 为例,一趟火车其实只有 2000 张票, 200w 个人来买,基本没有人能买成功,请求有效率为 0 。 ( 2 ) 充分利用缓存 ,秒杀买票,这是一个典型的读多写少的应用场景,大部分请求是车次查询,票查询,下单和支付才是写请求。一趟火车其实只有 2000 张票, 200w 个人来买,最多 2000 个人下单成功,其他人都是查询库存,写比例只有 0.1% ,读比例占 99.9%

消息中间件ActiveMQ使用详解

六月ゝ 毕业季﹏ 提交于 2019-12-25 05:39:57
一、消息中间件的介绍 1、介绍 ​ 消息队列 是指利用 高效可靠 的 消息传递机制 进行与平台无关的 数据交流,并基于 数据通信 来进行分布式系统的集成。 2、特点(作用): 应用解耦 异步通信 流量削峰 (海量)日志处理 消息通讯 3、应用场景 根据消息队列的特点,可以衍生出很多场景,或者说很多场景都能用到。下面举几个例子: 1)异步通信 ​ 注册时的短信、邮件通知,减少响应时间; 2)应用解耦 ​ 信息发送者和消息接受者无需耦合,比如调用第三方; 3)流量削峰 ​ 例如秒杀系统; 借鉴:https://www.cnblogs.com/yanfei1819/p/10615605.html 来源: CSDN 作者: 深拥不弃0924 链接: https://blog.csdn.net/qq_44746074/article/details/103686534

RabbitMQ快速入门

女生的网名这么多〃 提交于 2019-12-23 01:46:41
目标 1、RabbitMQ简介 2、RabbitMQ安装及使用 3、RabbitMQ快速入门 4、交换机 RabbitMQ简介 各大主流中间件对比 ActiveMQ 是 Apache 出品,最流行的,能力强劲的开源消息总线,并且它一 个完全支持 J M S 规范的消息中间件。 其丰富的 API 、多种集群构建模式使得他成为业界老牌消息中间件,在中 小型企业中应用广泛! MQ 衡量指标:服务性能、数据存储、集群架构 RocketMQ是阿里开源的消息中间件,目前也已经孵化为Apache顶级项目, 它是纯java开发,具有高吞吐量、高可用性、适合大规模分布式系统 应用的特点。 RocketMQ思路起源于Kafka,它对消息的可靠传输及事务 性做了优化, 目前在阿里集团被广泛应用于交易、充值、流计算、消息推 送、日志流式处理、binglog分发等场景 来源: CSDN 作者: qq_45177371 链接: https://blog.csdn.net/qq_45177371/article/details/103654025

微服务技术系列教程(33) - SpringCloud-消息驱动简介&原理

老子叫甜甜 提交于 2019-12-17 10:59:14
1. 消息驱动 SpringCloud Stream消息驱动可以简化开发人员对消息中间件的使用复杂度,让系统开发人员更多尽力专注与核心业务逻辑的开发。SpringCloud Stream基于SpringBoot实现,自动配置化的功能可以帮助我们快速上手学习,类似与我们之前学习的orm框架,可以平滑的切换多种不同的数据库。 目前SpringCloud Stream 目前只支持 rabbitMQ和kafka。 2. 消息驱动原理 「绑定器」 :通过定义绑定器作为中间层,实现了应用程序与消息中间件细节之间的隔离。通过向应用程序暴露统一的Channel,应用程序不需要再考虑各种不同的消息中间件的实现。当需要升级消息中间件,或者是更换其他消息中间件产品时,我们需要做的就是更换对应的Binder绑定器而不需要修改任何应用逻辑 。 在该模型图上有如下几个核心概念: 「Source」 : 当需要发送消息时,我们就需要通过Source,Source将会把我们所要发送的消息(POJO对象)进行序列化(默认转换成JSON格式字符串),然后将这些数据发送到Channel中; 「Sink」 : 当我们需要监听消息时就需要通过Sink来,Sink负责从消息通道中获取消息,并将消息反序列化成消息对象(POJO对象),然后交给具体的消息监听处理进行业务处理; 「Channel」 :

ActiveMQ消息中间件与JMS

大城市里の小女人 提交于 2019-12-17 00:04:19
一.什么是消息中间件 二.消息中间件的使用场景 1.解耦 2.流量消锋: 3.异步处理: *.消息通讯 搭建ActiveMQ 三、JMS简介 1.什么是JMS 2. JMS消息传递类型 一.什么是消息中间件 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。对于消息中间件,常见的角色大致也就有Producer(生产者)、Consumer(消费者) 常见的消息中间件产品: (1)ActiveMQ ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现。 (2)RabbitMQ AMQP协议的领导实现,支持多种场景。淘宝的MySQL集群内部有使用它进行通讯,OpenStack开源云平台的通信组件,最先在金融行业得到运用。 (3)ZeroMQ 史上最快的消息队列系统 (4)Kafka Apache下的一个子项目。特点:高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统。适合处理海量数据。 二.消息中间件的使用场景 消息中间件一般使用场景有3个: 1.解耦 2.流量消锋 3.异步处理 (*)消息通讯 1.解耦

Java-分布式系统---消息中间件

柔情痞子 提交于 2019-12-16 19:10:10
简介 消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。当下主流的消息中间件有RabbitMQ、Kafka、ActiveMQ、RocketMQ等。其能在不同平台之间进行通信,常用来屏蔽各种平台协议之间的特性,实现应用程序之间的协同。其优点在于能够在客户端和服务器之间进行同步和异步的连接,并且在任何时刻都可以将消息进行传送和转发。是分布式系统中非常重要的组件,主要用来解决应用耦合、异步通信、流量削峰等问题 消息中间件的作用 消息中间件几大主要作用如下: 解耦 降低工程间的强依赖程度,针对异构系统进行适配。在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。通过消息系统在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口,当应用发生变化时,可以独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。 冗余(存储) 有些情况下,处理数据的过程会失败。除非数据被持久化,否则将造成丢失。消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的”插入-获取-删除”范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕

消息中间件系列教程(18) -RabbitMQ-基于RabbitMQ解决分布式事务(思想)

给你一囗甜甜゛ 提交于 2019-12-15 04:24:15
经典案例:以目前流行点外卖的案例,用户下单后,调用订单服务,让后订单服务调用派单系统通知送外卖人员送单,这时候订单系统与派单系统采用MQ异步通讯。 RabbitMQ解决分布式事务原理: 采用最终一致性原理。 根据最终一致性,按派单流程提出问题,解决分布式事务: 1.怎么保证订单发送到了订单队列? 答:采用 确认机制 ,在生产者设置确认回调,如果不成功,则一直发送消息到消息队列。 2.怎么保证消费者一定消费了队列消息? 答:使用补偿机制手动ACK模式,一直重试去保存(注意幂等性问题)。 3.订单如果发送到了消息队列,但是后面的代码出异常了,执行了回滚,前面的插入订单代码失效,怎么处理? 答:见上图,有一个补单系统,生产者发送订单到队列的时候,同时发送了给补单系统,补单消费者接受到消息,会比对订单数据库和派单数据库,如果订单数据库内容和派单数据库内容不一致,则插入数据到订单系统。 4.如果第2步的消费者使用补偿机制还是失败了,怎么办? 答:只能使用记录日志,定时健康检查,人工去补偿了。 5.如果第3步的补单消费者消费失败了,怎么办? 答:一样使用记录日志,定时健康检查,人工去补偿了 通过以上的步骤可以完美的解决了分布式事务的问题了。 来源: CSDN 作者: 杨林伟 链接: https://blog.csdn.net/qq_20042935/article/details