RabbitMQ 入门篇

接上一篇《RabbitMQ-安装篇(阿里云主机)-CSDN博客

安装好RabbitMQ后,我们将开始RabbitMQ的使用,根据官网文档RabbitMQ Tutorials | RabbitMQ,我们一步一步的学习。

1. "Hello World!"

这里先说明几个概念:

生产者:指消息的发送方,用图例表示。

消费者:指消息的接收放,用图例表示。

队列(queue):生产者发送的消息将被传递到队列里,消费这从队列中消费消息

下面以 生产者 发送消息到队列,消费者从队列里消费消息为例,演示如何调用(Java代码)。

RabbitMQ支持多种协议。本教程使用AMQP0-9-1,它是一个开放的、通用的消息传递协议。

1.1 下载依赖项

下载客户端库客户端连接库及其依赖项(SLF4J APISLF4J Simple)。将这些文件复制到您的工作目录中,连同教程Java文件。

1.2 生产者代码-Send.java

java 复制代码
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.nio.charset.StandardCharsets;

//生产者
public class Send {

    public static void main(String[] argv) throws Exception {
        // 创建连接
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("【服务器地址】");
        factory.setPort(【端口:默认5672】);
        factory.setUsername("【账号】");
        factory.setPassword("【密码】");
        factory.setVirtualHost("【虚拟主机】");

        // 创建信道,发送消息
        String queueName = "rc.queue";
        try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
            channel.queueDeclare(queueName, true, false, false, null);
            String message = "Hello World!";
            channel.basicPublish("", queueName, null, message.getBytes(StandardCharsets.UTF_8));
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}

请将代码中相关配置项设置为您自己的配置。

运行代码,即可向RabbitMQ中的rc.queue队列发送一条Hello World消息。(rc.queue为我自己创建的,请根据实际情况调整)

在RabbitMQ后台可以查看到该队列里的消息。

1.3 消费者代码-Recv.java

java 复制代码
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
import java.nio.charset.StandardCharsets;

//消费者
public class Recv {

    public static void main(String[] argv) throws Exception {
        // 创建连接
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("【服务器地址】");
        factory.setPort(【端口:默认5672】);
        factory.setUsername("【账号】");
        factory.setPassword("【密码】");
        factory.setVirtualHost("【虚拟主机】");

        // 创建连接通道
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        String queueName = "rc.queue";
        channel.queueDeclare(queueName, true, false, false, null);
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), StandardCharsets.UTF_8);
            System.out.println(" [x] Received '" + message + "'");
        };
        channel.basicConsume(queueName, true, deliverCallback, consumerTag -> {
        });
    }
}

运行结果

2.其他模式

调通了1种模式,其他模式类似的方式调试即可。RabbitMQ Tutorials | RabbitMQ

3.在Springboot中使用RabbitMQ

3.1 添加依赖

pom.xml中添加Spring Boot的RabbitMQ依赖。

XML 复制代码
<!--RabbitMQ-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

3.2 配置RabbitMQ

application.propertiesapplication.yml中配置RabbitMQ连接信息。

XML 复制代码
# application.properties
spring.rabbitmq.host=【服务器地址】
spring.rabbitmq.port=【端口:默认5672】
spring.rabbitmq.username=【用户名】
spring.rabbitmq.password=【密码】
XML 复制代码
spring:
  rabbitmq:
    host: 【服务器地址】
    port: 【端口:默认5672】
    username: 【用户名】
    password: 【密码】

配置Queue、Exchange和Binding:

通过Java配置类定义消息队列、交换器和它们之间的绑定关系。

(如果在RabbitMQ控制台设置好了Queue、Exchange和Binding,无需下面的配置)

XML 复制代码
@Configuration
public class RabbitMQConfig {
 
    @Bean
    Queue myQueue() {
        return new Queue("your-queue-name", true);
    }
 
    @Bean
    DirectExchange myExchange() {
        return new DirectExchange("your-exchange");
    }
 
    @Bean
    Binding binding(Queue myQueue, DirectExchange myExchange) {
        return BindingBuilder.bind(myQueue).to(myExchange).with("your-routingKey");
    }
}

3.3 创建消息生产者

定义一个简单的消息生产者类,使用@RabbitTemplate注解来发送消息到队列:

java 复制代码
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MessageProducer {

    private final RabbitTemplate rabbitTemplate;

    @Autowired
    public MessageProducer(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }

    public void sendMessage(String message) {
        rabbitTemplate.convertAndSend("your-queue-name", message);
    }
}

3.4.创建消息消费者

定义一个消息消费者类,使用@RabbitListener注解来监听特定的队列:

java 复制代码
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class MessageConsumer {

    @RabbitListener(queues = "your-queue-name")
    public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
    }
}

3.5.启动和测试

确保你的应用启动类上有@EnableRabbit注解启用RabbitMQ。确保你的RabbitMQ服务正在运行,并尝试从你的应用中发送和接收消息。你可以通过调用MessageProducer中的sendMessage方法来测试发送功能,而接收功能应该自动触发MessageConsumer中的receiveMessage方法。

相关推荐
茶杯梦轩2 天前
从零起步学习RabbitMQ || 第三章:RabbitMQ的生产者、Broker、消费者如何保证消息不丢失(可靠性)详解
分布式·后端·面试
回家路上绕了弯3 天前
深入解析Agent Subagent架构:原理、协同逻辑与实战落地指南
分布式·后端
用户8307196840823 天前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
用户8307196840825 天前
RabbitMQ vs RocketMQ 事务大对决:一个在“裸奔”,一个在“开挂”?
后端·rabbitmq·rocketmq
初次攀爬者6 天前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
初次攀爬者8 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
让我上个超影吧9 天前
消息队列——RabbitMQ(高级)
java·rabbitmq
塔中妖9 天前
Windows 安装 RabbitMQ 详细教程(含 Erlang 环境配置)
windows·rabbitmq·erlang
断手当码农9 天前
Redis 实现分布式锁的三种方式
数据库·redis·分布式
初次攀爬者10 天前
Redis分布式锁实现的三种方式-基于setnx,lua脚本和Redisson
redis·分布式·后端