消息中间件基础知识-从RabbitMQ、RocketMQ、Kafka到Pulsar
消息中间件是处理消息传递的软件,可以在分布式系统、系统之间发送消息。主要特点包括异步通信、解耦、缓冲、扩展性和可靠性。
RabbitMQ、RocketMQ、Kafka和Pulsar都是消息队列系统,每个系统都有其特点和适用场景。
- RabbitMQ:RabbitMQ是使用Erlang编写的开源消息代理和队列服务器。支持AMQP(高级消息队列协议),对路由,负载均衡,数据持久化等提供良好支持。
- RocketMQ:RocketMQ是一个分布式消息和流平台,它是阿里巴巴的开源项目,它是一个极易用、高效、稳定、可靠的消息中间件。
- Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消息,但主要是设计用于数据流处理的。
- Pulsar:Apache Pulsar是云原生分布式消息发布-订阅系统,最初是Yahoo开发的,现在是Apache软件基金会的一个顶级项目。
下面是一些代码示例:
RabbitMQ的Python代码示例:
import pika
# 连接到RabbitMQ服务器
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# 声明队列
channel.queue_declare(queue='hello')
# 定义回调函数
def callback(ch, method, properties, body):
print(f" [x] Received {body}")
# 告诉RabbitMQ使用callback函数接收信息
channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
# 开始接收信息
channel.start_consuming()
RocketMQ的Java代码示例:
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;
public class Consumer {
public static void main(String[] args) throws Exception {
// 实例化消费者
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name_4");
// 指定Namesrv地址
consumer.setNamesrvAddr("localhost:9876");
// 订阅主题和标签
consumer.subscribe("TopicTest", "*");
// 设置回调函数
consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
for (MessageExt msg : msgs) {
System.out.println(new String(msg.getBody()));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
});
// 启动消费者
consumer.start();
System.out.printf("Consumer Started.%n");
}
}
Kafka的Python代码示例:
from kafka import KafkaConsumer
# 连接到Kafka服务器
consumer = KafkaConsumer('my-topic', bootstrap_servers=['localhost:9092'])
for message in consumer:
# 打印接收到的消息
print(message.value)
Pulsar的Java代码示例:
import org.apache.pulsar.client.api.Consumer;
import org.apache.pulsar.client.api.Message;
import
评论已关闭