RabbIT

2019年rabbitMQ面试高频题(java)

强颜欢笑 提交于 2020-04-27 20:37:14
前言 2019即将过去,伴随我们即将迎来的又是新的一年,过完春节,马上又要迎来新的金三银四面试季。那么,作为程序猿的你,是否真的有所准备的呢,亦或是安于本职工作,继续做好手头上的事情。 当然,不论选择如何,假如你真的准备在之后的金三银四跳槽的话,那么作为一个Java工程师,就不可不看了。如何在几个月的时间里,快速的为即将到来的面试进行充分的准备呢? 1. RabbitMQ 的使用场景有哪些? 抢购活动,削峰填谷,防止系统崩塌。 延迟信息处理,比如 10 分钟之后给下单未付款的用户发送邮件提醒。 解耦系统,对于新增的功能可以单独写模块扩展,比如用户确认评价之后,新增了给用户返积分的功能,这个时候不用在业务代码里添加新增积分的功能,只需要把新增积分的接口订阅确认评价的消息队列即可,后面再添加任何功能只需要订阅对应的消息队列即可。 2. RabbitMQ 有哪些重要的角色? RabbitMQ 中重要的角色有:生产者、消费者和代理: 生产者: 消息的创建者,负责创建和推送数据到消息服务器; 消费者: 消息的接收方,用于处理数据和确认消息; 代理: 就是 RabbitMQ 本身,用于扮演“快递”的角色,本身不生产消息,只是扮演“快递”的角色。 3. RabbitMQ 有哪些重要的组件? ConnectionFactory(连接管理器):应用程序与Rabbit之间建立连接的管理器

Spring Boot 2.X

╄→гoц情女王★ 提交于 2020-04-27 19:55:29
文章目录 Spring Boot 2.X - Spring Boot整合AMQP之RabbitMQ RabbitMQ简介 引入依赖 编写配置 编写接口 启用Rabbit注解 消息监听 消息测试 Spring Boot 2.X - Spring Boot整合AMQP之RabbitMQ Spring Boot 2 整合RabbitMQ案例。 RabbitMQ简介 简介 RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现。 核心概念 Message 消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组 成,这些属性包括routing-key(路由键)、 priority(相对于其他消息的优先权)、 delivery-mode(指出 该消息可能需要持久性存储)等。 Publisher 消息的生产者,也是一个向交换器发布消息的客户端应用程序。 Exchange 交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。 Exchange有4种类型: direct(默认), fanout, topic, 和headers,不同类型的Exchange转发消息的策略有 所区别。 Queue 消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息

RabbitMQ可靠性投递及高可用集群

倾然丶 夕夏残阳落幕 提交于 2020-04-27 19:41:28
可靠性投递:    首先需要明确,效率与可靠性是无法兼得的,如果要保证每一个环节都成功,势必会对消息的收发效率造成影响。如果是一些业务实时一致性要求不是特别高的场合,可以牺牲一些可靠性来换取效率。   要保证消息的可靠性投递,首先需要从以下几方面来确保,其次考虑其他的原因: 1、确保消息发送到RabbitMQ服务器(发送)。    可能因为网络或者Broker的问题导致①失败,而生产者是无法知道消息是否正确发送到Broker的。有两种解决方案,第一种是Transaction(事务)模式,第二种Confirm(确认)模式。   在通过channel.txSelect方法开启事务之后,我们便可以发布消息给RabbitMQ了,如果事务提交成功,则消息一定到达了RabbitMQ中,如果在事务提交执行之前由于RabbitMQ异常崩溃或者其他原因抛出异常,这个时候我们便可以将其捕获,进而通过执行channel.txRollback方法来实现事务回滚。使用事务机制的话会“吸干”RabbitMQ的性能,一般不建议使用。 try {   channel.txSelect();   // 发送消息   // String exchange, String routingKey, BasicProperties props, byte[] body   channel.basicPublish("",

1.RabbitMQ工作模型与基本原理

*爱你&永不变心* 提交于 2020-04-27 19:31:53
1、了解 MQ 的本质和 RabbitMQ 的特性; 2、掌握 RabbitMQ 的 Java API 编程和 Spring 集成 RabbitMQ 1. MQ 了解 1.1. 消息队列简介 1.1.1.MQ 的诞生历程 我们要去用 MQ,先来了解一下 MQ 是怎么诞生的,这样对于它解决了什么问题理 解会更加深刻。世界上第一个 MQ 叫什么名字,是什么时候诞生的? 1983 年的时候,有个在 MIT 工作的印度小伙突发奇想,以前我们的软件相互通信, 都是点对点的,而且要实现相同的协议,能不能有一种专门用来通信的中间件,就像主 板(BUS)一样,把不同的软件集成起来呢?于是他搞了一家公司(Teknekron),开发 了世界上第一个消息队列软件 The Information Bus(TIB)。最开始的时候,它被高盛这 些公司用在金融交易里面。因为 TIB 实现了发布订阅(Publish/Subscribe)模型,信息的 生产者和消费者可以完全解耦,这个特性引起了电信行业特别是新闻机构的注意。1994 年路透社收购了 Teknekron。 TIB 的成功马上引起了业界大佬 IBM 的注意,他们研发了自己的 IBM MQ(IBM Wesphere)。后面微软也加入了这场战斗,研发了 MSMQ。这个时候,每个厂商的产 品是孤立的,大家都有自己的技术壁垒。比如一个应用订阅了 IBM MQ

2019年12道RabbitMQ高频面试题你都会了吗?(含答案解析)

狂风中的少年 提交于 2020-04-27 18:57:32
RabbitMQ 面试题 1、什么是 rabbitmq 2、为什么要使用 rabbitmq 3、使用 rabbitmq 的场景 4、如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息? 5.如何避免消息重复投递或重复消费? 6、消息基于什么传输? 7、消息如何分发? 8、消息怎么路由? 9、如何确保消息不丢失? 10、使用 RabbitMQ 有什么好处? 11、RabbitMQ 的集群 12、mq 的缺点 1、什么是 rabbitmq 采用 AMQP 高级消息队列协议的一种消息队列技术,最大的特点就是消费并不需要确保提供方存在,实现了服务之间的高度解耦 2、为什么要使用 rabbitmq (1)在分布式系统下具备异步,削峰,负载均衡等一系列高级功能; (2)拥有持久化的机制,进程消息,队列中的信息也可以保存下来。 (3)实现消费者和生产者之间的解耦。 (4)对于高并发场景下,利用消息队列可以使得同步访问变为串行访问达到一定量的限流,利于数据库的操作。 (5)可以使用消息队列达到异步下单的效果,排队中,后台进行逻辑下单。 3、使用 rabbitmq 的场景 (1)服务间异步通信 (2)顺序消费 (3)定时任务 (4)请求削峰 4、如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息? 发送方确认模式 将信道设置成 confirm 模式

CentOS7.4安装部署openstack [Liberty版] (二)

左心房为你撑大大i 提交于 2020-04-27 14:03:28
继上一篇博客 CentOS7.4安装部署openstack [Liberty版] (一) ,本篇继续讲述后续部分的内容 一、添加块设备存储服务 1.服务简述: OpenStack块存储服务为实例提供块存储。存储的分配和消耗是由块存储驱动器,或者多后端配置的驱动器决定的。还有很多驱动程序可用:NAS/ SAN,NFS,ISCSI,Ceph等等。块存储API和调度程序服务通常运行在控制节点上。取决于所使用的驱动程序,卷服务可以运行在控制,计算节点或者独立的存储节点上。 OpenStack块存储服务(cinder)为虚拟机添加持久的存储,块存储提供一个基础设施为了管理卷,以及和OpenStack计算服务交互,为实例提供卷。此服务也会激活管理卷的快照和卷类型的功能。 块存储服务通常包含下列组件: cinder - api   接受API请求,并将其路由到"cinder - volume"执行。 cinder - volume   与块存储服务和例如"cinder -scheduler"的进程进行直接交互。它也可以与这些进程通过一个消息队列进行交互。"cinder- volume"服务响应送到块存储服务的读写请求来维持状态。它也可以和多种存储提供者在驱动架构下进行交互。 cinder - scheduler守护进程   选择最优存储提供节点来创建卷。其与"nova - scheduler

rabbitmq生产者的消息确认

荒凉一梦 提交于 2020-04-27 08:49:46
通过Publisher Confirms and Returns机制,生产者可以判断消息是否发送到了exchange及queue,而通过消费者确认机制,Rabbitmq可以决定是否重发消息给消费者,以保证消息被处理。 1.什么是Publisher Confirms and Returns? Delivery processing acknowledgements from consumers to RabbitMQ are known as acknowledgements in AMQP 0-9-1 parlance; broker acknowledgements to publishers are a protocol extension called publisher confirms. 地址: http://www.rabbitmq.com/confirms.html 根据RabbitMq官网定义,rabbitmq代理(broker)对发布者(publishers)的确认被称作发布者确认(publisher confirms),这种机制是Rabbitmq对标准Amqp协议的扩展。因此通过这种机制可以确认消息是否发送给了目标。 2.如何通过Spring amqp来使用Publisher Confirms and Returns机制? Confirmed and

springboot 集成 rabbitMQ

限于喜欢 提交于 2020-04-27 03:24:16
rabbitMQ:先放两张图 方便记忆 视频教程: https://study.163.com/course/courseMain.htm?courseId=1004576013 环境:首先要安装好 rabbitMQ springboot 集成 rabbitMQ还是挺简单的。 rabbitMQ的原理是(个人理解),自己做好的demo已经保存到百度网盘下。 生产者:发送消息给交换器 exchange 消费者:监听队列消息 队列:队列和交换器绑定 交换器:生产者发送消息给路由器 交换器根据规则发送消息到队列 1.创建一个springboot项目 依赖:web,rabbitMQ 2.配置properties spring.application.name= rabbitMQ server.port = 8080 spring.rabbitmq.host = 172.17 . 0.50 spring.rabbitmq.port = 5672 spring.rabbitmq.username = hanhao spring.rabbitmq.password =hanhao 第二种配置:direct spring.application.name= rabbitDirectProvider server.port = 9999 spring.rabbitmq.host = 172.17 .

Windows下载安装RabbitMQ教程

我只是一个虾纸丫 提交于 2020-04-27 03:03:17
原文链接: http://www.studyshare.cn/software/details/1171/0 一、下载 1、下载Erlang 官网下载:去 下载 百度网盘下载:去 下载 提取码:m1q0 2、下载Windows版RabbitMq 官网下载:去 下载 百度网盘下载:去 下载 提取码:rvo3 java开发工具下载地址及安装教程大全,点 这里 。 更多深度技术文章,在 这里 。 二、安装 1、双击安装Erlang及RabbitMq 注意:安装路径不要有空格,如果安装路径存在空格,会出现常见错误2。 2、配置环境变量 (1)增加ERLANG_HOME变量,变量值:C:\Program Files\erl10.4 (2)Path下追加:%ERLANG_HOME%\bin (3)增加RABBITMQ_BASE变量,变量值:C:\RabbitMQ_Server\rabbitmq_server-3.7.17 (4)Path下追加:%RABBITMQ_BASE%\sbin;%RABBITMQ_BASE%\ebin 三、启动服务 1、开始菜单中 2、验证是否安装成功 进入:C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.6\sbin 执行:rabbitmqctl.bat status 安装成功! 四、常见问题 1

SpringBoot集成rabbitmq(二)

痴心易碎 提交于 2020-04-27 02:35:48
前言 在使用rabbitmq时,我们可以通过消息持久化来解决服务器因异常崩溃而造成的消息丢失。除此之外,我们还会遇到一个问题,当消息生产者发消息发送出去后,消息到底有没有正确到达服务器呢?如果不进行特殊配置,默认情况下发送的消息是不会给生产者返回任何响应的,也就是默认情况下生产者并不知道消息是否正常到达了服务器。对于数据必达的需求,你肯定对消息的来龙去脉都有个了接,这种情况下就需要用到rabbitmq消息确认。 消息确认 rabbitmq消息确认分为生产者确认和消费者确认。 生产者消费确认提供了两种机制: 通过事务机制实现 通过confirm机制实现 事务机制则用到channel.txSelect、channel.txCommit、channel.txRollback。可以参考下面AMQP协议流转过程(参考Rabbitmq实战指南) 事务机制在一条消息发送之后会阻塞发送端,以等待rabbitmq回应,之后才继续发送下一条消息。所以相对来说事务机制的性能要差一些。事务机制会降低rabbitmq的吞吐量,所以又引入了另一种轻量级的方式: confirm机制。 生产者通过调用channel.confirmSelect将信道设置为confirm模式,之后Rabbitmq会返回Confirm.Select-Ok命令表示同意生产者将当前信道设置为confirm模式