Work Queues

工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。

相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。

代码实现

抽取工具类

public class RabbitMqUtils {//得到一个连接的 channelpublic static Channel getChannel() throws Exception{//创建一个连接工厂ConnectionFactory factory = new ConnectionFactory();factory.setHost("182.92.234.71");factory.setUsername("admin");factory.setPassword("123");Connection connection = factory.newConnection();Channel channel = connection.createChannel();return channel;} }

启动两个工作线程

package com.atguigu.two;import com.atguigu.utils.RabbitMqUtils;
import com.rabbitmq.client.CancelCallback;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;/**** 这是一个工作线程(相当于消费者)*/
public class Worker01 {//队列的名称public static final String QUEUE_NAME = "hello";//接收消息public static void main(String[] args) throws Exception {Channel channel = RabbitMqUtils.getChannel();//消息的接收DeliverCallback deliverCallback = (consumerTag,message)->{System.out.println("接收到的消息:"+ new String (message.getBody()));};//消息接收被取消时,执行下面的内容CancelCallback cancelCallback = consumerTag->{System.out.println(consumerTag+ "消息被消费者取消消费接口回调逻辑");};/*** 消费者消费消息* 1.消费哪个队列* 2.消费成功之后是否要自动应答 true 代表的自动应答 false 代表手动应答* 3.当消息传达到后(成功之后)的回调* 4.消费者取消消费的回调*/System.out.println("C1等待接收消息......");channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback);}}

生产者代码

package com.atguigu.two;import com.atguigu.utils.RabbitMqUtils;
import com.rabbitmq.client.Channel;import java.util.Scanner;/*** 生产者 发送大量的消息**/
public class Task01 {//队列名称public static final String QUEUE_NAME = "hello";//发送大量消息public static void main(String[] args) throws Exception {Channel channel = RabbitMqUtils.getChannel();//队列的声明/*** 生成一个队列* 1.队列名称* 2.队列里面的消息是否持久化(磁盘) 默认情况消息存储在内存中* 3.该队列是否只供一个消费者进行消费 是否进行消费共享,false可以多个消费者消费 true:只能一个消费者消费* 4.是否自动删除 最后一个消费者端开连接以后 该队列是否自动删除 true自动删除 false不自动删除* 5.其他参数*/channel.queueDeclare(QUEUE_NAME,false,false,false,null);//从控制台当中接受信息Scanner scanner = new Scanner(System.in);while(scanner.hasNext()){String message = scanner.next();/**** 发送一个消息* 1.发送到哪个交换机* 2.路由的Key值是哪个 本次是队列的名称* 3.其他参数信息* 4.发送消息的消息体*/channel.basicPublish("",QUEUE_NAME,null,message.getBytes());System.out.println("发送消息完成:"+message);}}}

测试



[RabbitMQ]工作队列原理_代码实现相关推荐

  1. [RabbitMQ]工作原理_原理名词解释

    RabbitMQ 核心部分 各个名词介绍 RabbitMQ工作原理 Broker: 接收和分发消息的应用,RabbitMQ Server 就是 Message Broker Virtual host: ...

  2. python多线程原理_代码详解Python多线程、多进程、协程-阿里云开发者社区

    云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 一.前言 很多时候我们写了一个爬虫,实现了需求后会发现了很多值得改进的地方,其中很重要的一点就是爬 ...

  3. python解析原理_代码详解:Python虚拟环境的原理及使用

    Python的虚拟环境极大地方便了人们的生活.本指南先介绍虚拟环境的基础知识以及使用方法,然后再深入介绍虚拟环境背后的工作原理. 注意:本指南在macOS Mojave系统上使用最新版本的Python ...

  4. (需求实战_进阶_07)SSM集成RabbitMQ 订阅模式 关键代码讲解、开发、测试

    接上一篇:(企业内部需求实战_进阶_06)SSM集成RabbitMQ 订阅模式 关键代码讲解.开发.测试 https://gblfy.blog.csdn.net/article/details/104 ...

  5. r k-means 分类结果_《机器学习》之 Kmeans聚类的原理及代码

    1 介绍 聚类算法是机器学习中经典的无监督学习算法,聚类算法有多种:Kmeans.Kmedians.Mean-shift.DBSCAN.层次聚类.EM等. 本文只介绍Kmeans原理及代码,之后会陆续 ...

  6. ehcache缓存原理_贼厉害,手撸的 SpringBoot缓存系统,性能杠杠的!

    缓存是最直接有效提升系统性能的手段之一.个人认为用好用对缓存是优秀程序员的必备基本素质. 本文结合实际开发经验,从简单概念原理和代码入手,一步一步搭建一个简单的二级缓存系统. 一.通用缓存接口 1.缓 ...

  7. PHP网站安装程序的原理及代码

    原文:PHP网站安装程序的原理及代码 原理: 其实PHP程序的安装原理无非就是将数据库结构和内容导入到相应的数据库中,从这个过程中重新配置连接数据库的参数和文件,为了保证不被别人恶意使用安装文件,当安 ...

  8. 【深度学习】搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了

    作者丨科技猛兽 编辑丨极市平台 导读 本文对Vision Transformer的原理和代码进行了非常全面详细的解读,一切从Self-attention开始.Transformer的实现和代码以及Tr ...

  9. 深入了解RabbitMQ工作原理及简单使用

    深入了解RabbitMQ工作原理及简单使用 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchange介绍 ...

最新文章

  1. Linux的shell scripts
  2. 北邮国院c语言期末考试题,北邮C语言复习题2014.ppt
  3. huggingface实操_Transformers 简介(上)
  4. Modelsim se仿真Xilinx IPcore
  5. The Joy of Clojure – Clojure philosophy(1)
  6. 反馈网络信息改善用户体验
  7. android tv字体,best登陆「永久地址0365.tv」android默认字体android使用代码使用新的字体的常用代码...
  8. android 监测bug上传到服务器,基于Android 错误信息捕获发送至服务器的详解
  9. CAN总线技术 | 物理层01 - CAN信号电平
  10. 关于android开源类库StickyListHeaderAdapter 的写法注意
  11. 蓝桥杯 友好数 数论
  12. ZigBee协议栈点播
  13. Python基础PTA习题答案
  14. html5转ipk,OpenWrt更新ipk教程
  15. WordPress站点上传文件插件WordPress File Upload
  16. 分治策略-股票获取最大收益-最大子数组问题
  17. 狂神Springboot笔记
  18. 前端校验还是后端校验
  19. excel不显示0_Excel中把0显示为空白的三种解决方法
  20. 还在自建代码仓库?阿里云 云效 的这款企业级代码管理工具免费、还香!

热门文章

  1. Excel抽奖小程序
  2. C#趣味程序---车牌号判断
  3. 剑指offer之用链表实现栈(带头节点)
  4. Android之解决java.lang.NoSuchMethodError:android.os.powerManager.isInteractive问题
  5. chmod 777 修改权限
  6. php基础教程 第五步 逻辑控制
  7. 有哪些小游戏的java代码_求一个Java小游戏代码(鼠标点击类小游戏)最好代码里面不要有中文...
  8. 成年人改变生活的方式,都是从它开始
  9. 男人都应该懂的一张图。。 | 今日趣图
  10. 接好!畅销数学界的科普书,我们免费送!