当前位置:首页 > Java

java如何监听rabbit

2026-03-21 06:39:54Java

监听 RabbitMQ 消息的方法

在 Java 中监听 RabbitMQ 消息通常使用 amqp-client 库,以下是具体实现步骤。

添加依赖

在 Maven 项目中添加以下依赖:

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.12.0</version>
</dependency>

创建连接工厂

配置 RabbitMQ 连接参数:

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setUsername("guest");
factory.setPassword("guest");

建立连接和通道

创建连接和通道对象:

Connection connection = factory.newConnection();
Channel channel = connection.createChannel();

声明队列

确保队列存在,如果不存在则创建:

java如何监听rabbit

channel.queueDeclare("queue_name", false, false, false, null);

创建消费者

实现 DefaultConsumer 或使用 Lambda 表达式:

DeliverCallback deliverCallback = (consumerTag, delivery) -> {
    String message = new String(delivery.getBody(), "UTF-8");
    System.out.println("Received: " + message);
};

开始消费消息

绑定消费者到队列:

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

完整示例代码

import com.rabbitmq.client.*;

public class RabbitMQListener {
    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare("test_queue", false, false, false, null);
        System.out.println("Waiting for messages...");

        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), "UTF-8");
            System.out.println("Received: " + message);
        };
        channel.basicConsume("test_queue", true, deliverCallback, consumerTag -> {});
    }
}

高级配置选项

消息确认机制

关闭自动确认,手动确认消息:

java如何监听rabbit

channel.basicConsume("queue_name", false, (consumerTag, delivery) -> {
    String message = new String(delivery.getBody(), "UTF-8");
    channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
}, consumerTag -> {});

设置 QoS

限制未确认消息的数量:

channel.basicQos(1);

绑定交换机

将队列绑定到交换机:

channel.exchangeDeclare("exchange_name", "direct");
channel.queueBind("queue_name", "exchange_name", "routing_key");

异常处理

确保资源正确关闭:

try {
    // RabbitMQ 操作代码
} finally {
    if (channel != null) channel.close();
    if (connection != null) connection.close();
}

标签: javarabbit
分享给朋友:

相关文章

java如何打开

java如何打开

安装Java开发环境 下载并安装Java Development Kit (JDK),推荐从Oracle官网或OpenJDK获取最新版本。安装完成后配置环境变量,确保JAVA_HOME和PATH变量正…

如何自学java

如何自学java

选择合适的学习资源 从官方文档开始,Oracle提供的Java官方教程(Java Tutorials)是权威且免费的学习资料。在线平台如Codecademy、Coursera或Udemy提供互动式课程…

java如何创建类

java如何创建类

创建类的基本语法 在Java中,类通过class关键字定义,语法如下: [访问修饰符] class 类名 { // 成员变量(属性) // 构造方法 // 成员方法 }…

java如何输入数组

java如何输入数组

输入数组的方法 在Java中,可以通过多种方式输入数组,具体取决于输入源(如控制台、文件等)和数组类型(如基本类型或对象类型)。以下是几种常见的方法: 使用Scanner从控制台输入 对于基本数据类…

如何学好java

如何学好java

理解基础概念 掌握Java的核心概念是学习的基础。包括数据类型、变量、运算符、控制流(如循环和条件语句)、数组等。理解面向对象编程(OOP)的四大特性:封装、继承、多态和抽象。 实践编程练习 通过实…

java如何避免死锁

java如何避免死锁

避免死锁的方法 固定顺序获取锁 确保所有线程按照相同的顺序获取多个锁。例如,若需要获取锁A和锁B,所有线程必须先获取A再获取B,避免交叉依赖导致的死锁。这种方式破坏了“循环等待”条件。 使用锁超时机…