栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

RabbitMQ---Workqueue模型&&多劳多得

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

RabbitMQ---Workqueue模型&&多劳多得

Provicer
package WorkQuene;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import utils.RabbitMQUtil;

import java.io.IOException;


public class Provider {
    public static void main(String[] args) throws IOException {
        //获取连接对象
        Connection connection = RabbitMQUtil.getConnection();
        //获取通道对象
        Channel channel = connection.createChannel();
        //通过通道声明队列
        channel.queueDeclare("work", true, false, false, null);
        //生产消息
        for (int i = 0; i < 100; i++) {
            channel.basicPublish("", "work", null, (i + "work queue").getBytes());
        }
        //关闭
        RabbitMQUtil.closeAll(channel, connection);

    }
}
consumer1(处理的慢)
package WorkQuene;

import com.rabbitmq.client.*;
import utils.RabbitMQUtil;

import java.io.IOException;


public class Customer1 {

    public static void main(String[] args) throws IOException {
        //获取连接对象
        Connection connection = RabbitMQUtil.getConnection();
        //获取通道对象
        final Channel channel = connection.createChannel();
        //每次只能消费一个消息,避免一下消费了多个消息,但是在处理的过程中宕机导致未被处理的消息丢失
        channel.basicQos(1);
        //通过通道声明队列
        channel.queueDeclare("work", true, false, false, null);
        //参数1:队列名称
        //队列2:消息自动确认 消费者自动向RabbitMQ确认消息消费 false 不会自动确认消息,即使消息被消费了,未被处理也不会显示被消费
        channel.basicConsume("work",false,new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("消费者-1:"+new String(body));
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                channel.basicAck(envelope.getDeliveryTag(),false);
            }
        });
    }
}
消费者2(处理的快)
package WorkQuene;

import com.rabbitmq.client.*;
import utils.RabbitMQUtil;

import java.io.IOException;


public class Customer2 {

    public static void main(String[] args) throws IOException {
        //获取连接对象
        Connection connection = RabbitMQUtil.getConnection();
        //获取通道对象
        final Channel channel = connection.createChannel();
        //每次只能消费一个消息,避免一下消费了多个消息,但是在处理的过程中宕机导致未被处理的消息丢失
        channel.basicQos(1);
        //通过通道声明队列
        channel.queueDeclare("work", true, false, false, null);

        channel.basicConsume("work",false,new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("消费者-2:"+new String(body));
                //手动确认,参数1:手动确认消息标识 确认队列中的消息的具体标识 参数2:是否开启多个消息同时确认 false:一次确认一个消息
                channel.basicAck(envelope.getDeliveryTag(),false);
            }
        });
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/704369.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号