【认识】RabbitMQ:基本用法和说明

1.简介
2.准备工作
3.引入RabbitMQ和SLF4J
4.生产者示例
5.消费者示例
6.演示结果模拟
7.业务场景的使用

8.总结

1.简介:

RabbitMQ是一个开源的消息代理软件,它接收、存储和转发消息。通过队列来存储消息,并使用交换机来路由消息到相应的队列。在本文中,我们将学习如何使用RabbitMQ的Java客户端库构建生产者和消费者,实现消息的发送和接收。

2.准备工作:

在开始之前,我们需要确保已经安装并配置了RabbitMQ,并且Java开发环境已经准备就绪。

3.引入RabbitMQ和SLF4J:

首先,我们需要在Maven项目的pom.xml文件中引入RabbitMQ和SLF4J的依赖项。在dependencies部分添加以下代码:


<!-- RabbitMQ -->
<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.12.0</version>
</dependency>
<!-- SLF4J API -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.32</version>
</dependency>
<!-- Logback - Logging Implementation -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.6</version>
</dependency>

4.生产者示例:

接下来,我们创建一个生产者示例来发送消息到RabbitMQ队列。以下是示例代码:

package org.example;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.sun.org.slf4j.internal.Logger;
import com.sun.org.slf4j.internal.LoggerFactory;

//创建一生产者类
public class SimpleProducer {
    private final static String QUEUE_NAME = "hello";

    private static final Logger LOGGER = LoggerFactory.getLogger(SimpleProducer.class);

    public static void main(String[] args) throws Exception{
        //创建连接工程
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("192.168.100.146");

        try(
            //创建连接
            Connection connection = factory.newConnection();
            //创建通道
            Channel channel = connection.createChannel();
        ){
            //声明队列
            channel.queueDeclare(QUEUE_NAME,false,false,false,null);
            String message = "Hello, RabbitMQ!";

            //发送消息到队列:
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println(" [√] Sent '" + message + "'");
        }
    }
}

5.消费者示例:

然后,我们创建一个消费者示例来从RabbitMQ队列接收消息。以下是示例代码:

package org.example;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
import com.sun.org.slf4j.internal.Logger;
import com.sun.org.slf4j.internal.LoggerFactory;

public class SimpleConsumer {
    private final static String QUEUE_NAME = "hello";

    private static final Logger LOGGER = LoggerFactory.getLogger(SimpleConsumer.class);

    public static void main(String[] args) throws Exception{
        //创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("192.168.100.146");

        try(
            //创建连接
            Connection connection =factory.newConnection();
            //创建通道
            Channel channel = connection.createChannel();
        ){
            //声明队列
            channel.queueDeclare(QUEUE_NAME,false,false,false,null);
            System.out.println("[*] Waiting for message. To exit press Ctrl+C");

            //创建消费者,并设置消息处理回调
            DeliverCallback deliverCallback = (consumerTag, delivery) -> {
                String message = new String(delivery.getBody(), "UTF-8");
                System.out.println("[√] Received '" + message + " ' ");
            };

            //消费消息
            channel.basicConsume(QUEUE_NAME,true,deliverCallback,consumerTag -> {});
        }
    }
}

6.演示结果模拟:

在完成生产者和消费者示例的编写后,我们模拟演示结果。首先启动消费者程序,然后启动生产者程序,观察控制台输出,确认消息成功发送和接收。

7.业务场景的使用

在一个典型的电子商务网站中,订单处理是一个常见的业务场景,而RabbitMQ可以很好地应用于订单处理系统中。

7.1描述:

假设我们有一个电子商务网站,用户下单后,订单需要经过一系列处理流程,包括库存检查、支付确认、物流安排等。这些处理步骤可能耗时较长,为了提高系统的性能和可伸缩性,我们希望将订单处理流程异步化,即用户下单后立即返回成功响应,后续处理步骤交由后台异步进行。这时候,就可以利用RabbitMQ来实现订单消息的异步处理。

7.2方案设计:

  • 1、用户下单成功后,将订单消息发送到RabbitMQ的订单队列中
  • 2、后台订单处理服务监听订单队列,一旦有新的订单消息到达,即开始处理订单。
  • 3、处理完成后,更新订单状态,并将处理结果发送到消息队列中,以供其他相关服务消费,比如通知用户订单状态更新、更新库存等。

7.3代码示例:

以下是订单处理系统的简化代码示例:

订单生产者:

public class OrderProducer {
    private final static String ORDER_QUEUE = "order_queue";

    public static void main(String[] args) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");

        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
            channel.queueDeclare(ORDER_QUEUE, false, false, false, null);
            String message = "New order placed!";
            channel.basicPublish("", ORDER_QUEUE, null, message.getBytes());
            System.out.println(" [√] Sent '" + message + "'");
        }
    }
}

订单消费者:

public class OrderConsumer {
    private final static String ORDER_QUEUE = "order_queue";

    public static void main(String[] args) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");

        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
            channel.queueDeclare(ORDER_QUEUE, false, false, false, null);
            System.out.println("[*] Waiting for orders. To exit press Ctrl+C");

            DeliverCallback deliverCallback = (consumerTag, delivery) -> {
                String message = new String(delivery.getBody(), "UTF-8");
                System.out.println("[√] Received '" + message + "'");
                // Process order here...
                // Simulating order processing time
                Thread.sleep(2000);
                System.out.println("[√] Order processed successfully!");
            };

            channel.basicConsume(ORDER_QUEUE, true, deliverCallback, consumerTag -> {
            });
        }
    }
}

在这个示例中,我们展示了如何利用RabbitMQ实现订单处理系统的异步处理流程。用户下单后,系统立即响应并将订单信息发送到RabbitMQ队列中,后台订单处理服务监听队列并进行订单处理,处理完成后更新订单状态。这种异步处理方式提高了系统的性能和可伸缩性,确保订单处理流程的高效执行。

该业务场景展示了RabbitMQ在实际应用中的重要作用,它不仅仅用于简单的消息传递,还可以帮助构建复杂的异步处理系统,提高系统的性能和可靠性。

8.总结:

通过本文的学习,我们深入了解了RabbitMQ的基本用法和说明。我们学习了如何引入RabbitMQ和SLF4J,创建生产者和消费者示例,以及模拟演示结果。RabbitMQ作为一个强大的消息代理软件,在分布式应用程序和微服务架构中有着广泛的应用前景。

通过这篇博客文章,读者可以快速上手使用RabbitMQ,并掌握其基本用法,为构建可靠的消息传递系统打下坚实的基础。

参考:

RabbitMQ官方文档
SLF4J官方网站
Logback官方网站

  • 24
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值