Fanout

java RabbitMQ面试题附pdf答案(最全版本持续更新)

放肆的年华 提交于 2020-05-09 20:26:25
前言 涵盖各大公司会问到的面试点,同时随着版本的升级,可能也会有一些面试题更新,也会同步保持更新,因为篇幅原因(其实是我懒,哈哈)所以列了一部分答案,所有的答案见下文,总共485页合计20个技术点,文末自取pdf. 1、什么是 rabbitmq 采用 AMQP 高级消息队列协议的一种消息队列技术,最大的特点就是消费并不需要确保提供方存在,实现了服务之间的高度解耦. 2、为什么要使用 rabbitmq 1、在分布式系统下具备异步,削峰,负载均衡等一系列高级功能; 2、拥有持久化的机制,进程消息,队列中的信息也可以保存下来。 3、实现消费者和生产者之间的解耦。 4、对于高并发场景下,利用消息队列可以使得同步访问变为串行访问达到一定量的限流,利于数据库的操作。 5.可以使用消息队列达到异步下单的效果,排队中,后台进行逻辑下单。 3、使用 rabbitmq 的场景 1、服务间异步通信 2、顺序消费 3、定时任务 4、请求削峰 4、如何确保消息正确地发送至 RabbitMQ? 如何确保消息接. 收方消费了消息? 发送方确认模式 将信道设置成 confirm 模式(发送方确认模式),则所有在信道上发布的消息都会被指派一个唯一的 ID。一旦消息被投递到目的队列后,或者消息被写入磁盘后(可持久化的消息),信道会发送一个确认给生产者(包含消息唯一 ID)。 如果 RabbitMQ

RabbitMQ学习笔记(四、RabbitMQ队列)

放肆的年华 提交于 2020-05-02 01:20:39
目录: 消息路由失败了会怎样 备份交换器 TTL与DLX 如何实现延迟队列 RabbitMQ的RPC实现 持久化 事务 发送方确认机制 消息路由失败了会怎样: 在RabbitMQ中,如果消息路由失败了,一般会有两种情况。要么是把消息回退给客户端处理,要么就把消息丢弃。 处理逻辑是根据basicPublish方法的 mandatory 和 immediate 两个参数来控制。 1、 mandatory :当mandatory=true时,如果交换器无法根据自身类型和路由键匹配到符合条件的队列,便会调用Basic.Return命令将消息会推给生产者;当mandatory=false时,不满足条件则丢弃此条消息。 1 channel.addReturnListener( new ReturnListener() { 2 public void handleReturn( int replyCode, String replyText, String exchange, String routingKey, 3 AMQP.BasicProperties properties, byte [] body) throws IOException { 4 // 具体处理逻辑 5 } 6 }); 2、 immediate :当immediate=true时,交换器将消息路由到队列后

聊一聊xilinx 7系列推荐使用的复位方式

末鹿安然 提交于 2020-04-30 01:51:32
  在一个FPGA项目中,全局网络的建立至关重要,其中包括时钟网络和复位网络,通常我们在设计的时候对时钟网络的规划格外小心,却忽视了复位网络,其实复位是需要在设计中考虑和实现的最常见也更重要的控制信号之一,它跟时钟一样也是一个覆盖全局、高扇出的信号,复位会给用户设计的性能、使用面积和功耗产生显著影响,这个复位如果处理不当也会导致意想不到的错误。那么复位信号选择同步还是异步、高电平还是低电平有效?对于这个问题,针对Xilinx 7系列FPGA,就聊一聊这个问题。Xiinx 7系列FPGA推荐使用同步高电平复位,这与我们平时用到的异步低电平复位有很大出入,至于为何如此且听细细道来。 1 什么情况下使用复位信号   很多工程师习惯于对FPGA设计进行上电复位,总担心如果不复位,触发器就处于不定状态,导致系统跑飞。事实上,每个触发器都有明确的初始值,这个初始值与是否复位无关。因此,一旦系统上电,即使没有复位,对于FDSE和FDPE,其初始值为1,对于FDRE和FDCE,其初始值为0。Block RAM和DSP48内部触发器初始值为0。   1.如果只是上电复位,那么这种复位是不需要的   对于控制路径,例如状态机,这种复位通常是必需的。相比之下,数据路径的复位通常是不需要的。因为,老的数据总会被新数据“冲走”   2. 通常,控制路径需要复位,数据路径不需要复位   从功能仿真的角度看

SignalTap II Logic Analyzer 无法观测到信号?

旧城冷巷雨未停 提交于 2020-04-29 20:53:46
在Quartus SignalTap 工具中加入信号,发现加入的信号变成红色,如图所示的 data_slave[7..0] : 这样的信号是没有办法观测的,不会根据SignalTap 的Clock和Trigger进行更新,原因是Synthesis过程将它省略, 添加综合选项(Synthesis Attribute)可以让综合器保留这些对顶层模块输入输出没有帮助的信号,常用的有: wire[ 7 : 0 ] cnt /* synthesis keep */ ; // Keep the Entity of Wire reg signed[11:0] corr_i_out/*synthesis preserve*/; // Keep the Entity of Register 实际上,对于组合逻辑的输出可以用keep,而时序逻辑块的输出信号常用preserve选项。 同时,红色的无效SignalTap信号会影响SignalTap中其他的信号。这样的空头支票放入SignalTap组件之中,很大概率会影响系统的时序,比如,使得其他待观测的信号全部观察不到了! 在设计调试的时候一定要取消这样的“空头支票”。 ***************************************************************************** ***************

django+celery+redis错误

旧时模样 提交于 2020-04-28 05:45:51
python——3.7 django——2.1 centos——7 redis——4.0.6 celery——4.3 1、配置redis.conf文件 celery和redis在centos虚拟机上, 所以redis需要设置远程连接 注释#127.0.0.1表示为任何ip地址可以访问 修改为no表示关闭安全模式 daemonize表示守护进程,默认为no需改为yes 错误1: error) DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients, In thi mode connections are only accepted from the loopback interface. If you want to connec from external computers to Redis you may adopt one of the following solutions: 1 ) Jus.disable protected mode sending the command 'CONEIG SET

rabbitmq消息中间件读后感

寵の児 提交于 2020-04-27 22:07:41
四.RabbitMQ安装与使用 1.安装(rpm方式) 下载对应版本的Erlang和RabbitMQ。 安装erlang: 安装socat密钥: 要先安装socat再安装rabbitmq,不然会报错。 安装rabbitmq: 2.修改配置文件 vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app 默认端口号5672 修改loopback_users:(保留guest也可) 3.RabbitMq基本命令 关于服务的操作: 服务启动:rabbitmqctl start_app / rabbitmq-server start & 这里有用到主机名,可以通过vim /etc/hostname来配置。 可以看到rabbitmq已经启动: 查看服务是否启动 lsof -i:5672 服务停止:rabbitmqctl stop_app / rabbitmq-server stop 服务重启:service rabbitmq-server restart 节点状态:rabbitmqctl status 启动管理控制台: 管理插件:rabbitmq-plugins enable rabbitmq_management 控制台访问地址:http://192.168.58.129:15672 如果既修改过配置文件,又开启了插件

python-RabbtiMQ消息队列

懵懂的女人 提交于 2020-04-27 21:08:05
1.RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布 / 订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 2.RabbitMQ能为你做些什么? 消息系统允许软件、应用相互连接和扩展.这些应用可以相互链接起来组成一个更大的应用,或者将用户设备和数据进行连接.消息系统通过将消息的发送和接收分离来实现应用程序的异步和解偶. 或许你正在考虑进行数据投递,非阻塞操作或推送通知。或许你想要实现发布/订阅,异步处理,或者工作队列。所有这些都可以通过消息系统实现。 RabbitMQ是一个消息代理 - 一个消息系统的媒介。它可以为你的应用提供一个通用的消息发送和接收平台,并且保证消息在传输过程中的安全。 3.RabbitMQ 安装使用 4

1.RabbitMq 基础入门

馋奶兔 提交于 2020-04-27 20:30:53
0.介绍 ​   RabbitMQ是一个消息代理:它接受并转发消息。你可以把它当成一个邮局:当你想邮寄信件的时候,你会把信件放在投递箱中,并确信邮递员最终会将信件送到收件人的手里。在这个例子中,RabbitMQ就相当与投递箱、邮局和邮递员。   RabbitMQ与邮局的区别在于:RabbitMQ并不处理纸质信件,而是接受、存储并转发二进制数据---消息。   谈到RabbitMQ的消息,通常有几个术语: 生产者:是指发送消息的程序 队列:相当于RabbitMQ的投递箱。尽管消息在RabbitMQ和你的应用之间传递,但是消息仅仅会在队列之中存储。队列只能存储在内存或磁盘中,本质上是一个大的消息缓冲区。不同的生产者可以发送消息到同一个对队列,不同的消费者也可以从同一个队列中获取消息。 消费者:等待接受消息的程序。   注意,生产者、消费者以及RabbitMQ并不一定要在同一个主机上,在绝大部分的应用中它们都不在同一主机上。 RabbitMQ 一般工作流程 ​   生产者和RabbitMQ服务器建立连接和通道,声明路由器,同时为消息设置路由键,这样,所有的消息就会以特定的路由键发给路由器,具体路由器会发送到哪个或哪几个队列,生产者在大部分场景中都不知道。(1个路由器,但不同的消息可以有不同的路由键)。   消费者和RabbitMQ服务器建立连接和通道,然后声明队列,声明路由器

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 核心概念及与 Spring Boot 2 的整合

限于喜欢 提交于 2020-04-27 19:31:27
RabbitMQ 简介 RabbitMQ 是什么 RabbitMQ 是一个用 Erlang 编写的开源的消息队列中间件,它实现了 AMQP 协议(其实还实现了 MTQQ 等消息协议)。和其他两个主流的消息队列中间件 Kafka 和 RocketMQ 相比,拥有更低的延迟、更高的稳定性、更完备的功能、更完善的文档支持以及较活跃的开源社区支持,但是在吞吐量上和分布式扩展能力上逊色一些。 AMQP 是什么 AMQP(Advanced Message Queuing Protocol),高级消息队列协议,是一个语言无关的面向消息中间件的开放标准,它定义了一套消息中间件的模型架构,即生产者将消息发送给交换机,交换机根据路由键将消息路由到队列,消费者通过订阅队列来获取消息。从更低的层面来看,AMQP是一套应用层的通信协议,它跟 HTTP 这样的协议一样提供了 TCP 之上的报文封装定义,定义了协议命令的交互规则。RabbitMQ 就用 Erlang 实现了 AMQP。 Exchange(交换机) 是什么 通常消息队列只会有生产者、队列和消费者三个概念,而 AMQP 多引入了一个概念 Exchange 交换机(也译交换器),生产者会将消息发送到交换机,交换机再根据自身的路由策略和 routing key(路由键)将消息转发到合适的队列上。这里 Exchange 其实更应该叫 Router