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方法。

相关推荐
前端世界29 分钟前
从0到1实现鸿蒙智能设备状态监控:轻量级架构、分布式同步与MQTT实战全解析
分布式·架构·harmonyos
koping_wu11 小时前
【Redis】用Redis实现分布式锁、乐观锁
数据库·redis·分布式
Lansonli12 小时前
大数据Spark(六十八):Transformation转换算子所有Join操作和union
大数据·分布式·spark
Logintern0913 小时前
遇到RabbitMQ 的 `channel_max` 限制报错
rabbitmq
ICollection18 小时前
RabbitMQ的安装集群、仲裁队列配置
rabbitmq·集群·银河麒麟
Z_z在努力18 小时前
【rabbitmq】RabbitMQ 全面详解:从核心概念到高级应用
分布式·rabbitmq
2301_7720935621 小时前
Fastdfs_MinIO_腾讯COS_具体逻辑解析
数据库·redis·分布式·中间件
Light6021 小时前
《领码 SPARK 融合平台》投资研究报告(最终完整版)
分布式·架构·spark·零信任·安全运营
shinelord明1 天前
【大数据开发实践】Kafka REST Proxy~无缝集成 Kafka
大数据·分布式·架构·kafka
笨蛋少年派1 天前
操作Hadoop时,慎用sudo
大数据·hadoop·分布式