1 - maven依赖

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

2 - 生产者

public class Provider {public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory factory = new ConnectionFactory();factory.setHost("192.168.181.133");factory.setPort(5672);factory.setVirtualHost("/ems");factory.setUsername("root");factory.setPassword("root");Connection connection = factory.newConnection();Channel channel = connection.createChannel();/*** 获取队列信息*      参数1:队列名称 (没有自动创建)*      参数2:队列是否持久化*      参数3:线程是否独占队列*      参数4:是否在消费完成后删除数据*      参数5:添加额外数据*/channel.queueDeclare("workqueue", true, false, false, null);for (int i = 0; i < 20; i++) {/*** 发布消息*      参数1:交换机的名称(直连式没有涉及到交换机)*      参数2:发布消息的队列名称*      参数3:额外参数*      参数4:发布的消息(二进制方式)*/channel.basicPublish("","workqueue", null, ("张三" + i).getBytes());}channel.close();connection.close();}
}

3 - 消费者 1 (让消费者1睡眠10ms)

public class Consumer1 {public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory factory = new ConnectionFactory();factory.setHost("192.168.181.133");factory.setVirtualHost("/ems");factory.setPort(5672);factory.setUsername("root");factory.setPassword("root");Connection connection = factory.newConnection();Channel channel = connection.createChannel();channel.basicQos(1); // 设置我一次只能处理一个 其它的消息在队列里等着就行  能够完成按捞分配/*** 获取队列:*      参数1:队列的名称*      参数2:是否持久化*      参数3:是否独占队列*      参数4:是否完成消费后删除消息*      参数5:额外参数*/channel.queueDeclare("workqueue", true, false, false , null);/*** 消费消息*      参数1:队列名称*      参数2:消费者完成消费后是否通知rabbitmq删除已被消费消息*      参数3:回调函数(获取消费的消息信息)*/channel.basicConsume("workqueue", false,new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("consumer1 --> " + new String(body));channel.basicAck(envelope.getDeliveryTag(), false); //告诉 rabbitmq 我消费完了 你把记录删除}});}
}

4 - 消费者 2

public class Consumer2 {public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory factory = new ConnectionFactory();factory.setHost("192.168.181.133");factory.setVirtualHost("/ems");factory.setPort(5672);factory.setUsername("root");factory.setPassword("root");Connection connection = factory.newConnection();Channel channel = connection.createChannel();channel.basicQos(1); //设置我一次只能处理一个 其它的消息在队列里等着就行  能够完成按捞分配/*** 获取队列:*      参数1:队列的名称*      参数2:是否持久化*      参数3:是否独占队列*      参数4:是否完成消费后删除消息*      参数5:额外参数*/channel.queueDeclare("workqueue", true, false, false , null);/*** 消费消息*      参数1:队列名称*      参数2:消费者完成消费后是否通知rabbitmq删除已被消费消息*      参数3:回调函数(获取消费的消息信息)*/channel.basicConsume("workqueue", false,new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("consumer2 --> "+ new String(body));channel.basicAck(envelope.getDeliveryTag(), false); //告诉rabbitmq我已经消费完成,删除已被消费的数据}});}
}

5 - 测试

1 - 先开启两个消费者
2 - 在启动生产者
查看结果

消费者1

消费者2

由于让消费者1睡眠10ms,这样就完成了按劳分配

RabbitMQ(Java操作工作队列-按劳分配方式)相关推荐

  1. java 操作 ES 的方式 整理总结

    一.操作ES 的方式大题有这么三种 1. TransportClinet客户端 2. REST Client 3. SpringDateES 二.第一种 TransportClinet客户端 首先要讲 ...

  2. 一文快速回顾 Java 操作数据库的方式-JDBC

    前言 数据库的重要性不言而喻,不管是什么系统,什么应用软件,也不管它们是 Windows 上的应用程序,还是 Web 应用程序,存储(持久化)和查询(检索)数据都是核心的功能. 大家学习数据库时,比如 ...

  3. HRM人力资源系统-Day07-RabbitMQ java操作

    RabbitMQ安装 MQ全称为Message Queue,即消息队列. 它也是一个队列,遵循FIFO原则. RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message ...

  4. 理解Java操作数据库原理

    2019独角兽企业重金招聘Python工程师标准>>> 参考:https://blog.csdn.net/xiaozhegaa/article/details/70208646 上面 ...

  5. java操作excel常用的两种方式

    转载自:https://www.cnblogs.com/wangyang108/p/6030420.html Excel是我们平时工作中比较常用的用于存储二维表数据的,JAVA也可以直接对Excel进 ...

  6. java操作RabbitMQ

    1.创建虚拟主机.交换机.队列 RabbitMQ提供了自己的管理界面,可以通过管理界面来完成VirtualHost.Exchange.queue的创建. 1.1创建VirtualHost 1.2创建交 ...

  7. Java操作数据库方式(六)DataSource详解

    ##概述 在java世界里操作数据库有很多方式,在众多方式中除了JDBC外都有DataSource对象. DataSource可以看作数据源,它封装了数据库参数,连接数据库,程序中操作DataSour ...

  8. Java操作Excel三种方式POI、Hutool、EasyExcel

    Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...

  9. Java操作数据库方式二DBCP使用详解

    ##概述 DBCP的全称是:DataBase connection pool,翻译是:数据库连接池. 在Java操作数据库方式一JDBC使用详解中说到直接使用JDBC非常消耗资源.为了避免频繁关闭链接 ...

最新文章

  1. 你知道Redis可以实现延迟队列吗?
  2. visual c++ 6.0原版_C/C++编程笔记:C语言函数指针的理解与使用,就是这么简单明了!...
  3. 为开源软件评级—商业就绪分级(BRR)模型
  4. html+设置img+src属性值,javascript获取、设置修改img的src属性(get/setAttribute)
  5. Mybatis学习之配置优化
  6. 一个SAP开发人员的养蚕流水帐
  7. 面试必备:HashMap底层数据结构?jdk1.8算法优化,hash冲突,扩容等问题
  8. 有BRT,为啥还建公交港湾
  9. 第十七篇 --ANDROID DisplayManager 服务解析一
  10. 解码(五):sws_getContext和sws_scale像素格式和尺寸转换函数详解
  11. 使用instantclient_11_2和PL/SQL Developer工具包连接oracle 11g远程数据库
  12. 微软CRM记录列表每页显示超过250个记录解决办法
  13. class ts 扩展方法_一个class文件到底包含了哪些东西?
  14. Ubuntu 16.04 利用Sakurafrp工具管理多节点多隧道ID 实现 ssh 内网穿透
  15. 基于PYNQ-Z2的手写数字识别卷积加速器设计【持续更新】
  16. Win10下用Strokeit的方法
  17. Linux系统mysql 查看当前使用的配置文件my.cnf的方法
  18. 计算机核心期刊论文审回,专家审回一般要多长时间
  19. 日志打印利器logback的使用和配置
  20. 微信小程序进度条样式_微信小程序——自定义圆形进度条

热门文章

  1. Windows下暗黑风格设置
  2. 如何重现难以重现的bug
  3. 娱乐直播一对一交友APP源码,开发更多功能优化用户体验
  4. R语言︱SNA-社会关系网络—igraph包(中心度、中心势)(二)
  5. ATMEGA88PA-AU与ATMEGA88-20AU的区别
  6. 农产品电子商务行业研究及十四五规划分析报告
  7. openGauss中Schema赋权小试
  8. 两种方法解决口算练习题
  9. SharePoint Silverlight Clock 时钟
  10. 扩散模型的基本内容介绍