RabbitMQ 普通模式

RabbitMQ 普通模式

一、普通模式示意图

二、普通模式介绍

RabbitMQ 普通模式也称为点对点模式,它是消息队列的一种基本实现方式。在这种模式下,生产者将消息发送到队列中,消费者从队列中接收并处理消息。每条消息只会被一个消费者接收,其他消费者无法重复消费。

特点:

  1. 单一消费者模式:生产者发送的每条消息只能被一个消费者处理,适用于需要确保每条消息只被处理一次的场景。
  2. 消息持久化:通过将队列设置为持久化,可以在RabbitMQ服务重启后保留消息,防止数据丢失。
  3. 自动应答机制:消费者可以选择是否自动应答,以便在处理消息失败时重新接收未确认的消息。
  4. 消息确认机制:RabbitMQ 支持手动和自动消息确认,确保消息可靠传递。

使用场景:

  • 简单任务队列
  • 需要确保任务不被重复处理的场景
  • 点对点通讯的应用

三、普通模式代码

1. 生产者端代码

java 复制代码
package com.lucifer.rabbitmq.one;

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

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class producer {

    // 队列名
    public static final String QUEUE_NAME = "hello";

    // 发消息
    public static void main(String[] args) throws IOException, TimeoutException {
        // 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        // 工厂ip
        factory.setHost("1.94.97.29");
        // 设置用户名和密码
        factory.setUsername("guest");
        factory.setPassword("123456");

        // 创建连接
        Connection connection = factory.newConnection();

        // 获取信道
        Channel channel = connection.createChannel();

        // 生成一个队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);

        // 消息内容
        String message = "hello world";

        // 发送消息到队列
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
    }
}

2. 消费者端代码

java 复制代码
package com.lucifer.rabbitmq.one;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class consumer {

    // 队列名
    public static final String QUEUE_NAME = "hello";

    public static void main(String[] args) throws IOException, TimeoutException {
        // 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("1.94.97.29");
        factory.setUsername("guest");
        factory.setPassword("123456");

        // 创建连接
        Connection connection = factory.newConnection();

        // 获取信道
        Channel channel = connection.createChannel();

        // 声明消息接收回调函数
        DeliverCallback deliverCallback = (consumerTag, message) -> {
            System.out.println(new String(message.getBody()));
        };

        // 声明取消消息的回调函数
        CancelCallback cancelCallback = consumerTag -> {
            System.out.println("消费消息被中断");
        };

        // 消费消息
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback);
    }
}
相关推荐
灯澜忆梦20 小时前
【RabbitMQ #3】 | Go 客户端 + SpringAMQP
分布式·golang·rabbitmq
Q26433650231 天前
【有源码】基于Spark的电商客户细分与盈利洞察分析系统-面向精准营销的电商客户细分模型构建与盈利能力可视化研究
大数据·hadoop·分布式·数据挖掘·数据分析·spark·毕业设计
晴空蓝天1 天前
RabbitMQ 消息可靠投递:confirm 确认 + 消费重试 + 死信队列
rabbitmq
驭渊的小故事1 天前
RabbitMQ 环境配置和 DirectRabbitConfig 的 SpringBoot 4.0.X 版本
spring boot·rabbitmq·java-rabbitmq
新思维软件1 天前
基于无线传输的地衡系统:三节点 LoRa 组网与 MQTT 上云的分布式称重方案
分布式·stm32·单片机·嵌入式硬件·物联网·物联网开发
俊哥大数据1 天前
Flink1.20.3 实时消费 Kafka 数据并解析入湖 Paimon1.4.2 全流程实战
分布式·flink·kafka·数据湖·paimon
宸津-代码粉碎机1 天前
OpenAI 连夜迎战 Grok Bot 和 Muse:AI 智能体从 “会聊天” 到 “能办事”,现在入场还来得及吗
java·大数据·人工智能·分布式·python
程序猿乐锅1 天前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存
ly76891 天前
RabbitMQ 消费确认与预取:manual ack、reject、nack 与 QoS 的取舍
rabbitmq·死信队列·消息可靠性·消费确认·qos 预取
灯澜忆梦1 天前
【RabbitMQ #7】 | 消息转换器
分布式·rabbitmq·ruby