RabbitMQ简介

RabbitMQ是一个流行的开源消息代理,它遵循AMQP(高级消息队列协议)标准,提供了可靠的消息传递机制。它支持多种消息传递模式,包括点对点(P2P)和发布/订阅(Pub/Sub),并且具有高度的可扩展性和灵活性。

安装和配置RabbitMQ

步骤1:安装RabbitMQ

根据你的操作系统,选择合适的方式安装RabbitMQ。你可以从RabbitMQ官方网站下载安装程序或使用包管理工具进行安装。

步骤2:启动RabbitMQ服务器

安装完成后,启动RabbitMQ服务器。在大多数情况下,你只需在终端中运行以下命令

rabbitmq-server

步骤3:管理界面(可选)

RabbitMQ提供了一个Web管理界面,方便监视和管理消息队列。你可以通过以下方式启用管理界面:

 rabbitmq-plugins enable rabbitmq_management

然后,通过浏览器访问http://localhost:15672/,并使用默认的用户名和密码(guest/guest)登录管理界面。 

一、工作队列模式

一个生产者一个队列,对应多个消费者

消费者之间是竞争关系,一条消息只能让一个消费者去消费

用于任务过重或者任务比较多的情况,工作队列可以提高任务的处理速度


二、订阅模式

一个生产者一个交换机(类型:Fanout),多个队列多个消费者

交换机与队列进行绑定,路由K可以为空字符串,一条消息交换机会分发给订阅自己的队列

交换机的作用:接受消息且自己明确该给把消费发给那个队列


三、路由模式

一个生产者一个交换机(类型Direct)多个队列,交换机和队列绑定的时候,需要定义RoutingKey(路由K)

生产者生产消息的时候,需要标识路由K的名字

应用场景:日记收集 error info warning(分别对应三个队列),如果是error日志就走eroor队列,如果是info就走info队列


四、通配符模式

一个生产者一个交换机(类型、Topic)多个队列,交换机和队列绑定的时候,需要定义RoutingKey(路由K)

既能实现订阅模式也能实现路由模式

*代表一个单词

#代表0个或多个

使用RabbitMQ创建消息队列

步骤1:创建连接

首先,你需要创建一个与RabbitMQ服务器的连接。可以使用RabbitMQ的Java客户端库进行连接。

import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class RabbitMQConnection {
    public static Connection getConnection() throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost"); // RabbitMQ服务器的地址
        factory.setUsername("guest");
        factory.setPassword("guest");
        return factory.newConnection();
    }
}
步骤2:创建通道

在建立连接之后,需要创建一个通道(Channel),用于发送和接收消息。

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

public class RabbitMQChannel {
    public static Channel getChannel() throws Exception {
        Connection connection = RabbitMQConnection.getConnection();
        return connection.createChannel();
    }
}
步骤3:声明队列

在发送和接收消息之前,你需要声明一个队列。

import com.rabbitmq.client.Channel;

public class QueueDeclare {
    public static void main(String[] args) throws Exception {
        Channel channel = RabbitMQChannel.getChannel();
        String queueName = "my_queue";
        channel.queueDeclare(queueName, false, false, false, null);
        System.out.println("Queue declared: " + queueName);
    }
}
步骤4:发送消息

发送消息到队列:

import com.rabbitmq.client.Channel;

public class SendMessage {
    public static void main(String[] args) throws Exception {
        Channel channel = RabbitMQChannel.getChannel();
        String exchangeName = "";
        String routingKey = "my_queue";
        String message = "Hello, RabbitMQ!";
        channel.basicPublish(exchangeName, routingKey, null, message.getBytes());
        System.out.println("Message sent: " + message);
    }
}
步骤5:接收消息

从队列接收消息:

import com.rabbitmq.client.*;

public class ReceiveMessage {
    public static void main(String[] args) throws Exception {
        Channel channel = RabbitMQChannel.getChannel();
        String queueName = "my_queue";
        channel.basicConsume(queueName, true, new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) {
                String message = new String(body);
                System.out.println("Received message: " + message);
            }
        });
    }
}

RabbitMQ主要解决什么问题 

abbitMQ是一个开源的消息代理(Message Broker),它主要用于解决以下问题和应用场景:

  1. 异步通信:RabbitMQ允许应用程序在异步模式下进行通信,发送者将消息放入队列中,而接收者从队列中获取消息。这种异步通信方式可以提高系统的可伸缩性和性能,允许不同部分的应用程序独立运行和扩展。
  2. 解耦:通过将消息队列引入应用程序架构,不同组件之间可以通过发送和接收消息来解耦。这意味着生产者和消费者可以独立开发和部署,不需要知道彼此的存在,从而降低了系统的复杂性。
  3. 消息传递:RabbitMQ提供了可靠的消息传递机制,确保消息在传输过程中不会丢失。这对于需要可靠消息传递的应用程序非常重要,如金融交易系统或电子商务应用程序。
  4. 负载均衡:使用RabbitMQ可以轻松实现负载均衡。多个消费者可以订阅同一个队列,从而确保消息被均匀地分发给不同的消费者,以提高系统的性能和吞吐量。
  5. 消息持久化:RabbitMQ允许将消息持久化存储,即使在RabbitMQ服务器重启后,消息也不会丢失。这对于关键的业务数据非常重要,以确保数据的安全性和可靠性。
  6. 延迟处理:RabbitMQ可以用于实现延迟处理,将消息发送到队列后,可以设置消息的过期时间,以便在一定时间后才被消费者处理。这对于需要执行定时任务或调度的应用程序非常有用。
  7. 日志传输:RabbitMQ可以用于将日志消息从应用程序发送到集中式日志系统,以便监控和分析应用程序的性能和健康状况。
  8. 事件驱动架构:RabbitMQ可以用于构建事件驱动的架构,使不同部分的应用程序可以相应事件进行协作和通信,从而更容易构建响应式和可扩展的系统。

总之,RabbitMQ解决了分布式系统中的消息传递、异步通信、解耦、负载均衡、消息持久化、延迟处理等一系列与消息相关的问题,使得构建复杂的分布式应用变得更加容易和可靠。它在各种应用场景中得到广泛应用,包括微服务架构、云计算、大数据处理等。

总结

RabbitMQ是一个强大的消息代理,可以帮助你实现可靠的消息传递,用于构建分布式系统和微服务架构。通过以上步骤,你可以轻松地开始使用RabbitMQ来创建消息队列,发送和接收消息。这只是RabbitMQ的入门,它还提供了更多高级特性,如交换机、持久化消息、消息确认机制等,可以满足不同应用场景的需求。继续学习和探索RabbitMQ,你将能够更好地应对