RabbitMq 实现一条消息被多个客户端消费

本文介绍了RabbitMQ中如何实现一条消息被多个客户端消费,详细讲解了RabbitMQ的通道、交换器、路由和队列四大模块。通过创建通道、交换器和队列,将队列绑定到交换器,生产者发送消息到交换器,由交换器根据路由分发到不同的队列。消费者在创建通道后,指定交换器、路由和队列来接收消息。通过示例代码展示了如何在SpringBoot环境下配置临时队列并将其绑定到交换器和路由,从而实现多客户端共享消息。
摘要由CSDN通过智能技术生成

RabbitMQ接口分为 通道、交换器、路由、和队列4个模块

生产者/消费者连接消息队列,创建通道,创建交换器,创建队列。把队列绑定到交换器上。

生产者发送消息到交换器,交换器根据路由把消息转到不同队列上。

消费者创建通道后,指定交换器,路由,和队列。

交换器:

DIRECT("direct"), FANOUT("fanout"), TOPIC("topic"), HEADERS("headers");

测试代码

package com.cn.rabbitmq.cp1.exchange;

import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.impl.ErrorOnWriteListener;

import java.io.IOException;

public class BaseQueue {

    public static Connection getConnection()  throws  Exception{
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
        factory.setUsername("guest");
        factory.setPassword("guest");
        factory.setErrorOnWriteListener(new ErrorOnWriteListener() {
            public void handle(Connection connection, IOException exception) throws IOException {

            }
        });
        return factory.newConnection();
    }

}

服务端发送消息:

package com.cn.rabbitmq.cp1.exchange.topic;

import com.cn.rabbitmq.cp1.exchange.BaseQueue;
import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

/**
 *  队列参数说明:
 *      队列名称  queue :队列名
 *      是否持久队列 durable  :true  持久队列,该队列将在服务器重新启动后继续存在。当然了,队列的消息内容也会被写入磁盘
 *      是否独占队列 (单消费者队列)exclusive : 如果需要消费者独占队列,在队列创建的时候,设定属性exclusive为true。 只能有一个消费者
 *      是否自动删除 autoDelete :自动删除队列,客户端连接时自动删除。 服务端会连接会不会删除?
 *
 *
 *      其他参数  arguments
 *              参数名 	                    目的
 *              x-dead-letter-exchange      死信交换器
 *              x-dead-letter-routing-key 	 死信消息的可选路由键
 *              x-expires 	                 队列在指
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ可以通过工作队列模式实现多个消费者可以处理一条信息。 在工作队列模式,生产者发送消息到一个队列多个消费者从队列获取消息进行处理。为了实现多个消费者可以处理一条信息,需要使用RabbitMQ提供的消息确认机制。当一个消费者获取到一个消息进行处理时,需要RabbitMQ确认该消息已经被处理。如果该消费者在处理消息的过程出现异常,RabbitMQ会重新将该消息发送给其他消费者进行处理。 在Java使用RabbitMQ实现工作队列模式可以使用以下步骤: 1. 引入RabbitMQ客户端依赖。 2. 创建一个连接和通道,用于和RabbitMQ建立连接和发送消息。 3. 创建一个消息队列。 4. 将消息发送到队列。 5. 创建消费者监听队列,并实现消息处理方法。 6. 手动确认消息已经被处理。 示例代码: // 创建连接和通道 Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); // 创建队列 channel.queueDeclare("my-queue", false, false, false, null); // 发送消息队列 channel.basicPublish("", "my-queue", null, "Hello RabbitMQ".getBytes()); // 创建消费者 Consumer consumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { // 处理消息 String message = new String(body, "UTF-8"); System.out.println("Received message: " + message); // 手动确认消息已经被处理 channel.basicAck(envelope.getDeliveryTag(), false); } }; // 开始监听队列 channel.basicConsume("my-queue", false, consumer);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值