【RabbitMQ笔记03】消息队列RabbitMQ七种模式之WorkQueues工作队列模式

news2024/9/27 23:33:21

这篇文章,主要介绍消息队列RabbitMQ七种模式之WorkQueues工作队列模式。

目录

一、工作队列模式

1.1、什么是Work Queues模式

1.2、工作队列模式的使用

(1)引入依赖

(2)编写生产者

(3)编写两个消费者


一、工作队列模式

1.1、什么是Work Queues模式

在某些情况下,当RabbitMQ中的消息积压的非常多的时候,一个消费者没办法消费,那么这个时候就可以增加消费者数量,以此来加快消息的消费。我们把所有消费者都看作是在同一个队列里面的,那么这个队列就可以理解称为工作队列,因为都是进行消费消息的。

Work Queues模式下,每一个消费者能够分配到的消息数量都是大致相同的,RabbitMQ采用轮询的方式,依次给每一个消费者分发消息。

工作队列模式提高了消息的并发消费,并且每一个消息只会被分发到一个消费者上面。

1.2、工作队列模式的使用

(1)引入依赖

<!-- 引入 RabbitMQ 依赖 -->
<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.16.0</version>
</dependency>

(2)编写生产者

package com.rabbitmq.demo.workqueues;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * @version 1.0.0
 * @Date: 2023/2/25 16:23
 * @Copyright (C) ZhuYouBin
 * @Description: 消息生产者
 */
public class Producer {
    public static void main(String[] args) {
        // 1、创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        // 2、设置连接的 RabbitMQ 服务地址
        factory.setHost("127.0.0.1"); // 默认就是本机
        factory.setPort(5672); // 默认就是 5672 端口
        // 3、获取连接
        Connection connection = null; // 连接
        Channel channel = null; // 通道
        try {
            connection = factory.newConnection();
            // 4、获取通道
            channel = connection.createChannel();
            // 5、指定需要操作的消息队列,如果队列不存在,则会创建
            channel.queueDeclare("queue_demo_2023", false, false, false, null);
            // 6、发送消息
            for (int i = 0; i < 50; i++) {
                String message = "这是Work Queues模式,发送的第【" + (i+1) + "】条消息数据";
                channel.basicPublish("", "queue_demo_2023", null, message.getBytes());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != channel) {
                try {
                    channel.close();
                } catch (Exception e) {}
            }
            if (null != connection) {
                try {
                    connection.close();
                } catch (Exception e) {}
            }
        }
    }
}

(3)编写两个消费者

为了实现Work Queues工作队列模式,需要编写多个消费者,为了简单,这里就编写两个消费者(代码一样)。

package com.rabbitmq.demo.workqueues;

import com.rabbitmq.client.*;

import java.io.IOException;

/**
 * @version 1.0.0
 * @Date: 2023/2/25 16:30
 * @Copyright (C) ZhuYouBin
 * @Description: 消息消费者
 */
public class Consumer {
    public static void main(String[] args) {
        // 1、创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        // 2、设置连接的 RabbitMQ 服务地址
        factory.setHost("127.0.0.1"); // 默认就是本机
        factory.setPort(5672); // 默认就是 5672 端口
        // 3、获取连接
        Connection connection = null; // 连接
        Channel channel = null; // 通道
        try {
            connection = factory.newConnection();
            // 4、获取通道
            channel = connection.createChannel();
            // 5、指定需要操作的消息队列,如果队列不存在,则会创建
            channel.queueDeclare("queue_demo_2023", false, false, false, null);
            // 6、消费消息
            DeliverCallback callback = new DeliverCallback() {
                public void handle(String s, Delivery delivery) throws IOException {
                    // 接收消息
                    try {
                        // 模拟消费者消费消息时候很慢的情况
                        Thread.sleep(2000);
                    } catch (Exception e) {}
                    System.out.println("这是接收的消息:" + new String(delivery.getBody()));
                }
            };
            channel.basicConsume("queue_demo_2023", true, callback, i->{});
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

启动消费者,查看控制台输入日志,此时可以发现,生产者总共发送了50条消息,两个消费者都是消费了25条消息,因为RabbitMQ是采用轮询的方式分发消息的(注意:先启动消费者,在启动生产者,不然看不到效果)。

到此,RabbitMQ中的工作队列模式就介绍完啦。

综上,这篇文章结束了,主要介绍消息队列RabbitMQ七种模式之WorkQueues工作队列模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/371518.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何提高您的网站速度更好的符合SEO规范

如果觉得文章对你有用请点赞与关注&#xff0c;每一份支持都是我坚持更新更优质内容的动力&#xff01;&#xff01;&#xff01;慢速网站会受到用户和搜索引擎的惩罚。用户跳出&#xff0c;搜索引擎可以降低您的排名。为了针对搜索引擎和用户优化您的网站&#xff0c;您的网站…

Golang学习Day3

&#x1f60b; 大家好&#xff0c;我是YAy_17&#xff0c;是一枚爱好网安的小白。 本人水平有限&#xff0c;欢迎各位师傅指点&#xff0c;欢迎关注 &#x1f601;&#xff0c;一起学习 &#x1f497; &#xff0c;一起进步 ⭐ 。 ⭐ 此后如竟没有炬火&#xff0c;我便是唯一的…

Mybatis中的动态SQL

Mybatis中的动态SQL 当存在多条件查询的SQL时&#xff0c;当用户某个条件的属性没有写时&#xff0c;就会存在问题&#xff0c;在test中则不能很好的运行 所以Mybatis提出了动态SQL。 即判断用户是否输入了某个属性 动态SQL中的一些问题 方法一 这个里的and是为了确保if条…

三天吃透MySQL八股文(2023最新整理)

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/…

口红品牌管理APP

伴随着科技的发展&#xff0c;多条产业和产品已经走上了智能化的道路&#xff0c;口红也是如此&#xff0c;口红的品牌众多&#xff0c;格式&#xff0c;色号更是令人难以区分&#xff0c;为了便于顾客选购和产品的科技化整理销售&#xff0c;利用课程所学知识&#xff0c;基于…

服务搭建篇(六) Kafka + Zookeeper集群搭建

一.Zookeeper 1.什么是Zookeeper ZooKeeper 是一个开源的分布式协调框架&#xff0c;是Apache Hadoop 的一个子项目&#xff0c;主要 用来解决分布式集群中应用系统的一致性问题。Zookeeper 的设计目标是将那些复杂且容 易出错的分布式一致性服务封装起来&#xff0c;构成一个…

linux pybind11 python c++ 混合编程(包括具体版本匹配的设置)

pybind11的处理过程 我首先安装了pybind&#xff0c;参考了许多教程&#xff0c;但很多教程的貌似都来自微软导出pyd的方法&#xff0c;但是实际上linux下导出so文件而非pyd文件&#xff0c;后续运行的实例来自https://github.com/tdegeus/pybind11_examples&#xff08;代码就…

设计模式(十一)----结构型模式之装饰者模式

1、概述 我们先来看一个快餐店的例子。 快餐店有炒面、炒饭这些快餐&#xff0c;可以额外附加鸡蛋、火腿、培根这些配菜&#xff0c;当然加配菜需要额外加钱&#xff0c;每个配菜的价钱通常不太一样&#xff0c;那么计算总价就会显得比较麻烦。 使用继承的方式存在的问题&…

为多态基类声明virtual析构函数

我们知道&#xff0c;有时会让一个基类指针指向用 new 运算符动态生成的派生类对象&#xff08;类似接口的作用&#xff09;&#xff1b;同时&#xff0c;用 new 运算符动态生成的对象都是通过 delete 指向它的指针来释放的。如果一个基类指针指向用 new 运算符动态生成的派生类…

算法23:多叉树_派对的最大快乐值

公司的每个员工都符合 Employee 类的描述。整个公司的人员结构可以看作是一棵标准的、 没有环的多叉树。树的头节点是公司唯一的老板。除老板之外的每个员工都有唯一的直接上级。 叶节点是没有任何下属的基层员工(subordinates列表为空)&#xff0c;除基层员工外&#xff0c;每…

MySQL知识点小结

事务 进行数据库提交操作时使用事务就是为了保证四大特性,原子性,一致性,隔离性,持久性Durability. 持久性:事务一旦提交,对数据库的改变是永久的. 事务的日志用于保存对数据的更新操作. 这个操作T1事务操作的会发生丢失,因为最后是T2提交的修改,而且T2先进行一次查询,按照A…

线性回归算法和逻辑斯谛回归算法详细介绍及其原理详解

相关文章 K近邻算法和KD树详细介绍及其原理详解朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解决策树算法和CART决策树算法详细介绍及其原理详解线性回归算法和逻辑斯谛回归算法详细介绍及其原理详解 文章目录相关文章前言一、线性回归二、逻辑斯谛回归总结前言 今天给大家…

2020 NOC 编程猫创新编程全国决赛小学组第一部分(客观题)

Q1. 某角色的造型区及未完成的脚本如下,当前造型名称为猫,若想切换到熊冬眠的 浩型,变量次数的值不可能为( ) A. 2 B. 3 C. 4 D. 5 Q2. 运行下图所示脚本,角色的运动轨迹为( ) Q3. 运行脚本,变量“y”的值为( ) A. 200 B. 2200 C. 2000 D. 4000 Q4. 运行…

盘点:9款身份和访问管理工具

身份和访问管理&#xff08;IAM&#xff09;长期以来一直是安全领导者职业生涯的关键“试炼场”&#xff0c;许多人在身份技术部署方面做出了事关成败的决定。 确保安全访问和身份管理是网络安全态势的两大基础 。同时&#xff0c;人员、应用程序和系统登录的方式以及它们彼此集…

以业务行为驱动的反入侵安全能力建设

0x0 背景 最近听到一些甲方安全领域的专家分享了部分安全建设的经验&#xff0c;对安全运营下的反入侵技术能力建设有了些新的看法&#xff0c;依靠单个/多个异构的安全产品的关联能力形成的安全中台并不能在实际的攻防对抗当中占据主动地位&#xff0c;且很容易达到一个天花板…

Mr. Cappuccino的第45杯咖啡——Kubernetes之部署SpringBoot项目

Kubernetes之部署SpringBoot项目创建一个SpringBoot项目将SpringBoot项目打成Jar包使用Dockerfile制作镜像部署SpringBoot项目创建一个SpringBoot项目 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache…

一、前端稳定性规约该如何制定

前言 稳定性是数学或工程上的用语&#xff0c;判别一系统在有界的输入是否也产生有界的输出。若是&#xff0c;称系统为稳定&#xff1b;若否&#xff0c;则称系统为不稳定。 前端稳定性的体系建设大约可以分为了发布前&#xff0c;发布后&#xff0c;以及事故解决后三个阶段…

建立做机器学习项目的范式

建立起做机器学习项目的范式&#xff0c;萃取出核心步骤&#xff0c;避免后面做项目没有明确的方向。 核心步骤&#xff1a; 1、明确自己想做什么样的项目&#xff0c;感兴趣的领域&#xff1b; 2、找到满足项目的数据集&#xff0c;开源的或者自建数据集&#xff1b; 数据…

《数据结构》二叉树面试题

&#x1f451;作者主页&#xff1a;Java冰激凌 &#x1f4d6;专栏链接&#xff1a;数据结构 目录 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先力扣 思路分析 代码 思路拓展 根据一棵树的前序遍历与中序遍历构造二叉树。力扣 思路分析 代码 根据一棵树的中序遍历与…

Linux系统看门狗应用编程

目录看门狗应用编程介绍打开设备获取设备支持哪些功能&#xff1a;WDIOC_GETSUPPORT获取/设置超时时间&#xff1a;WDIOC_GETTIMEOUT、WDIOC_SETTIMEOUT开启/关闭看门狗&#xff1a;WDIOC_SETOPTIONS喂狗&#xff1a;WDIOC_KEEPALIVE看门狗应用编程实战在产品化的嵌入式系统中&…