RabbitMQ work quene 模式

本文介绍了RabbitMQ的work queue模式,用于解决生产者消息过快,消费者消费过慢导致的消息堆积问题。通过多个消费者共同消费同一队列中的消息,确保任务不会重复执行。同时,讨论了如何优化分配机制,使得完成任务速度快的消费者能处理更多消息。此外,还涵盖了Publish/Subscribe模型、Routing模式和Topic模式,详细阐述了各个模式的工作原理和代码实现。
摘要由CSDN通过智能技术生成

直连模式的缺点

在这里插入图片描述

当生产者生产消息过快,消费者消费过慢的情况下,会造成消息的大量堆积。因此这个时候就可以使用work模型:让多个消费者绑定到一个队列,共同消费队列中的消息。队列的消息一旦消费就不会存在,所以任务也是不会被重复执行的。

在这里插入图片描述

角色:
P: 生产者:任务的发布者
C1: 消费者1,领取任务并且完成任务,假设完成速度较慢
C2: 消费者2:领取任务并且完成任务,假设完成速度快。

创建提供者

package com.wang.rabbitmq.work;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.wang.rabbitmq.utils.RabbitMQUtils;

import java.io.IOException;


public class Provider {
   
    public static void main(String[] args) throws IOException {
   
//         获取连接对象
        Connection connection= RabbitMQUtils.getConnetion();
//        获取通道对象
        Channel channel=connection.createChannel();
//         通过通道声明队列
        /*
        queue是 队列名称
        durable 声明是否持久化
        exclusive是否独占
        autoDelete: 是否在队列为空的时候自动删除
        arguments: 设置的队列的参数
         */
        channel.queueDeclare("work",true,false,false,null);

//         生产消息
        for(int i=0;i<10;i++){
   
            channel.basicPublish("","work",null,(i+"hello work quenet").getBytes());
        }
//      关闭通道和连接
        RabbitMQUtils.closeConnectionAndChanel(channel,connection);
    }

}

创建消费者1

package com.wang.rabbitmq.work;

import com.rabbitmq.client.*;
import com.wang.rabbitmq.utils.RabbitMQUtils;

import java.io.IOException;

public class consumer1 {
   
    public static void main(String[] args) throws IOException {
   
        Connection connection= RabbitMQUtils.getConnetion();
        Channel channe=connection.createChannel();
        channe.queueDeclare("work",true,false,false,null);
        channe.basicConsume("work",true,new DefaultConsumer(channe){
   
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
   
                System.out.println("消费者-1"+new String(body));
            }
        });
    }
}

创建消费

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值