rabbitmq 消费端代码获取队列名称_RabbitMQ

本文详细介绍了RabbitMQ的各个方面,包括MQ的作用、衡量标准、主流竞品如ActiveMQ、Kafka和RocketMQ的分析。重点讲解了RabbitMQ的特性、整体架构、消息流转、组件功能以及各种Exchange类型。此外,还讨论了TTL、死信队列、消费端的ACK与NACK机制。最后提到了RabbitMQ集群的部署及其在保证消息可靠性上的策略。
摘要由CSDN通过智能技术生成

本文可以转载,引用烦请表明出处。

目录:

1、什么是MQ

2、MQ是干什么用的?

3、MQ衡量标准

4、主流竞品分析

4.1、ActiveMQ

4.2、Kafka

4.3、RocketMQ

5、技术背景知识介绍

5.1、AMQP高级消息队列协议

5.2、Erlang语言

6、RabbitMQ

6.1、RabbitMQ的优势:

6.2、RabbitMQ的整体架构

6.3、RabbitMQ的消息流转

6.4、RabbitMQ各组件功能

6.5、RabbitMQ的多种Exchange类型

6.5.1、direct

6.5.2、fanout

6.5.3、topic

6.6、TTL

6.7、死信队列DLX

6.8、消费端ACK与NACK

6.9、生产者Confirm机制

6.10、Return消息机制

6.11、消费端自定义监听(推模式和拉模式pull/push)

6.12、如何保证幂等性

6.13、如何保证可靠性?

6.14、消费端如何限流

6.15、Channel模式和Connection模式

6.16、消费端的Concurrency和Prefetch模式

6.17、RabbitMQ集群

什么是MQ?

消息总线(Message Queue),是一种跨进程、异步的通信机制,用于上下游传递消息。由消息系统来确保消息的可靠传递。

MQ是干什么用的?

应用解耦、异步、流量削锋、数据分发、错峰流控、日志收集等等...

MQ衡量标准

服务性能、数据存储、集群架构

主流竞品分析

当前市面上mq的产品很多,比如RabbitMQ、Kafka、ActiveMQ、ZeroMQ和阿里巴巴捐献给Apache的RocketMQ。甚至连redis这种NoSQL都支持MQ的功能。

ActiveMQ

ActiveMQ是apache出品,最流行的,能力强劲的开源消息总线,并且它一个完全支持JMS规范的消息中间件。其丰富的API、多种集群构建模式使得它成为业界老牌消息中间件,在中小型企业中应用广泛。

但是其性能稍差,在面对高并发的情况下,会出现消息阻塞、堆积、延迟等问题。

默认采用了基于内存的kahaDB进行存储,如果需要保证消息的可靠性,也可以选择关系行数据库进行存储。

集群架构模式如下:

ActiveMQ集群.png

Master-Slave模式:通过zookeeper对主从进行管理,正常情况下,从节点不会提供服务。当主节点出现问题后,zookeeper会高效的将主节点下掉,从节点来提供服务。

NetWork模式:两套主从Master-Slave节点。由网络联通,将其变为分布式的集群架构。

Kafka

Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目。Kafka主要特点就是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。能够支持廉价的服务器上以每秒100k条数据的吞吐量。(有ack机制,可以保证不丢失,不能保证不重复。)

高效的读写基于操作系统低层的Page Cache。仅仅使用内存管理,不存在内存和磁盘之间的IO操作。

集群架构模式如下:

Kafka集群.png

通过replicate进行节点间数据的复制,尽量保证数据的可靠性。

RocketMQ

RocketMQ是阿里开源的消息中间件,目前也已经孵化为Apache顶级项目,它是纯Java开发,具有高吞吐量、高可靠性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,它对消息的可靠传输以及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binlog分发等场景。

在2.0版本,RocketMQ集群也是通过Zookeeper进行管理。在3.0之后,放弃Zookeeper,使用NameServer进行集群的管理和协调。

能够保障消息的顺序消费,提供了丰富的消息拉取等处理模式,消费者可以高效进行水平扩展,能够承载上亿级别数据量级。

可以支持多种集群架构模式:Master-Slave模式、双Master-Slave模式、多主多从模式等等。

支持多种刷盘策略:同步双写、异步复制。借助了零拷贝等技术。

集群架构模式如下:

RocketMQ集群.png

收费版本集群

技术背景知识介绍

AMQP高级消息队列协议

AMQP(Advanced Message Queuing Protocol)高级消息队列协议:高级消息队列协议。它是应用层协议的一个开放标

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取 RabbitMQ 中所有队列名称,可以使用 RabbitMQ 的 Java 客户库,例如 `amqp-client` 库。以下是一个简单的 Java 代码示例,可以使用 `amqp-client` 库获取所有队列名称: ```java import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.GetResponse; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class GetAllQueues { public static void main(String[] args) throws IOException { // 创建连接工厂并设置连接参数 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setUsername("guest"); factory.setPassword("guest"); // 创建连接 Connection connection = factory.newConnection(); // 创建通道 Channel channel = connection.createChannel(); // 获取所有队列名称 List<String> queueNames = new ArrayList<>(); for (String queueName : channel.getQueueNames()) { queueNames.add(queueName); } // 输出所有队列名称 System.out.println("All queues: " + queueNames); // 关闭通道和连接 channel.close(); connection.close(); } } ``` 在这个例子中,我们先创建了一个连接工厂并设置了连接参数,然后创建了一个连接和一个通道。接着,我们通过调用 `channel.getQueueNames()` 方法获取了所有队列名称,并将它们保存在一个列表中。最后,我们输出了所有队列名称。注意,在获取队列名称后,我们需要及时关闭通道和连接以释放资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值