Rabbitmq 从零入门

1 RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总
http://blog.csdn.net/linsongbin1/article/details/47781187

2 在 Windows 上安装Rabbit MQ 指南
http://www.cnblogs.com/shanyou/p/4067250.html

3 RabbitMq 简单的Java Demo
http://www.cnblogs.com/luxiaoxun/p/3918054.html

Hello World Demo
CSDN私人版 http://blog.csdn.net/mydreamongo/article/details/8272025
官网详解版 https://www.rabbitmq.com/tutorials/tutorial-one-java.html

4 RabbitMQ (五)主题(Topic)
http://blog.csdn.net/lmj623565791/article/details/37706355

5 RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
http://www.gaort.com/index.php/archives/366/

6 Spring整合Rabbitmq
(1)http://blog.csdn.net/liuzhigang1237/article/details/12058357
(2)http://blog.csdn.net/jacman/article/details/50261915

7 总结消息队列RabbitMQ的基本用法
http://www.cnblogs.com/zuowj/p/4971123.html
http://lynnkong.iteye.com/blog/1699684





Maven jar包依赖
<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.4.1</version>
</dependency>
RabbitMQ 是一个开源的消息中间件,主要用于实现系统间的异步通信和解耦。其核心概念包括生产者(Producer)、消费者(Consumer)、队列(Queue)、交换机(Exchange)和绑定(Binding)。生产者将消息发送到交换机,交换机根据绑定规则将消息路由到一个或多个队列中,消费者从队列中获取并处理消息 [^3]。 ### 核心组件与工作流程 - **生产者(Producer)**:负责生成消息并将其发送到交换机。 - **交换机(Exchange)**:接收来自生产者的消息,并根据绑定规则决定将消息发送到哪些队列。RabbitMQ 支持多种类型的交换机,如直连(Direct)、扇出(Fanout)、主题(Topic)和头部(Headers)交换机 [^2]。 - **队列(Queue)**:存储消息的缓冲区,直到消费者处理它们。 - **消费者(Consumer)**:从队列中获取消息并进行处理。 - **绑定(Binding)**:定义了交换机与队列之间的关系,通常通过路由键(Routing Key)来指定消息的路由规则 [^3]。 ### 消息确认机制 为了确保消息不会因为消费者崩溃而丢失,RabbitMQ 提供了手动确认(ACK)机制。消费者在处理完消息后,必须显式地向 RabbitMQ 发送确认信号,告知该消息已经成功处理。如果消费者在处理消息时发生错误或崩溃,RabbitMQ 将不会收到确认信号,并会将消息重新放入队列中,以便其他消费者可以处理它 [^1]。 ### 流量控制与公平分发 当多个消费者同时从同一个队列中消费消息时,可能会出现某些消费者负载过高的情况。为了解决这个问题,RabbitMQ 提供了 `basicQos` 方法,允许设置 `prefetchCount` 参数。通过将 `prefetchCount` 设置为 1,可以确保 RabbitMQ 不会在消费者尚未确认前一条消息之前向其发送新的消息。这样可以实现更公平的消息分发,避免某些消费者过载 [^1]。 ### 主题交换机(Topic Exchange) 主题交换机是一种灵活的路由方式,它使用通配符来匹配路由键。`*` 可以匹配一个单词,而 `#` 可以匹配个或多个单词。这种方式非常适合需要根据多个条件进行路由的场景 [^2]。 ### 示例代码:使用 Python 和 `pika` 库发送和接收消息 ```python import pika # 连接到 RabbitMQ 服务器 connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() # 声明一个名为 'hello' 的队列 channel.queue_declare(queue='hello') # 发送消息到 'hello' 队列 channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') print(" [x] Sent 'Hello World!'") # 关闭连接 connection.close() ``` ```python import pika # 连接到 RabbitMQ 服务器 connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() # 声明一个名为 'hello' 的队列 channel.queue_declare(queue='hello') # 定义回调函数,用于处理接收到的消息 def callback(ch, method, properties, body): print(f" [x] Received {body}") # 手动确认消息 ch.basic_ack(delivery_tag=method.delivery_tag) # 开始消费消息 channel.basic_consume(queue='hello', on_message_callback=callback) print(' [*] Waiting for messages. To exit press CTRL+C') # 启动消费者循环 channel.start_consuming() ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值