rabbitmq 工作队列模式

ops/2024/10/20 20:57:43/

工作队列模式

一、原理流程图

工作队列模式原理流程图

二、基本知识

工作队列模式(Work Queue Model)是一种消息队列模型,生产者将任务分发到队列中,多个消费者从队列中按顺序获取并处理任务。该模式主要用于负载均衡,确保任务能够均匀分配给不同的消费者,提升系统的处理能力。

基本特点:

  1. 消息分发:生产者发送的每个消息只会被一个消费者处理。
  2. 消息持久化:队列可以设置为持久化,以保证在服务重启后,未处理的消息不会丢失。
  3. 负载均衡:多个消费者可以并发消费队列中的消息,实现负载分摊。

三、代码

1. 生产者代码

package com.lucifer.rabbitmq.workQueues;import com.lucifer.rabbitmq.utils.RabbitMqUtils;
import com.rabbitmq.client.Channel;
import java.util.Scanner;/*** @Author:丁浩然* @Package:com.lucifer.rabbitmq.workQueues* @Project:rabbitMq_learning* @Filename:task01* @Date:2024/10/18* @Purpose:生产者,用于产生大量的消息*/
public class Task01 {// 定义队列名称public static final String QUEUE_NAME = "hello";public static void main(String[] args) throws Exception {// 获取通道Channel channel = RabbitMqUtils.getChannel();// 声明队列channel.queueDeclare(QUEUE_NAME, false, false, false, null);// 从控制台接受输入Scanner sc = new Scanner(System.in);System.out.println("请输入消息,按回车发送(输入exit退出):");while (sc.hasNext()) {String message = sc.next();if ("exit".equals(message)) {break;}// 发送消息到队列channel.basicPublish("", QUEUE_NAME, null, message.getBytes());System.out.println("已发送消息:" + message);}sc.close();channel.close();}
}

2. 消费者代码

package com.lucifer.rabbitmq.workQueues;import com.lucifer.rabbitmq.utils.RabbitMqUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;/*** @Author:丁浩然* @Package:com.lucifer.rabbitmq.workQueues* @Project:rabbitMq_learning* @Filename:worker* @Date:2024/10/18* @Purpose:消费者,接收并处理消息*/
public class Worker {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(), "UTF-8"));};// 消费消息channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> {});}
}

四、结果

生产者发送消息,消费者接收消息的结果如下:

  1. 生产者控制台输出

生产者控制台输出

  1. 消费者控制台输出

消费者控制台输出

注意:由于直接打印的是对象而非内容,所以输出格式可能看起来比较奇怪。可以使用 new String(message.getBody(), "UTF-8") 来将消息转换为字符串形式。


http://www.ppmy.cn/ops/127089.html

相关文章

ParallelsDesktop20最新版本虚拟机 一键切换系统 游戏娱乐两不误

让工作生活更高效:Parallels Desktop 20最新版本虚拟机的神奇之处 大家好!👋 今天我要跟大家安利一款让我工作效率飞升的神器——Parallels Desktop 20最新版本虚拟机。作为一个日常需要在不同操作系统间来回穿梭的人,这款软件简直…

白嫖正版xshell和XFTP

在哪里可以下载正版免费的xshell和XFTP,并且还能够获得官网免费持久更新 白嫖步骤 首先直接在浏览器搜索xshell官网 点进官网之后直接点击下载 接着点击免费授权页面 进入之后就可以免费下载了 下载安装完成后填写用户名和邮箱并提交,这里就以xshell为…

os.popen模块

一、前言 有时候在写一些脚本的时候,需要执行一些系统命令(windows/linux),因为这边会比较方便。用python原生的办法就比较复杂。下边就介绍集中常见的方法 二、os.system os.system是python 内置模块,执行命令非常简单。可以将要执行的命令传递进去。…

京存助力北京某电力研究所数据采集

北京某电力研究所已建成了一套以光纤为主,卫星、载波、微波等多种通信方式共存,分层级的电力专用的网络通信架构体系。随着用电、配电对网络的要求提高,以及终端通信入网的迅速发展,迫切地需要高效的通信管理系统来应对大规模、复…

(37)使用MATLAB画出余弦波的频谱

文章目录 前言一、MATLAB仿真代码二、仿真结果画图 前言 首先使用MATLAB生成一段余弦信号,然后对其进行FFT变换,画出其频谱。 一、MATLAB仿真代码 代码如下: f [50, 100]; % 两个余弦波的频率 fs 1000; …

『Mysql集群』Mysql高可用集群之读写分离(二)

前言 主从复制: 解决了Mysql的单点故障问题以及提高MySQL的整体服务性能. 读写分离: 解决的是数据库的读性能问题,分担主库的压力,提高系统的可用性和稳定性。 分库分表: 数据库分表可以解决单表海量数据的查询性能问题,分库可以解决单台数据库的并发…

基于ECS和NAS搭建个人网盘

前言 在数字化时代,数据已成为我们生活中不可或缺的一部分。个人文件、照片、视频等数据的积累,使得我们需要一个安全、可靠且便捷的存储解决方案。传统的物理存储设备(如硬盘、U盘)虽然方便,但存在易丢失、损坏和数据…

ElasticSearch集群搭建及常见问题(三节点)

ElasticSearch集群搭建(三节点) 1.centos7安装了jdk1.8版本 2.下载elasticsearch6.8版本,下载地址为:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-0 3.上传到三台虚拟机上,创建/etc/soft…