RabbitMQ系列(三)RabbitMQ进阶-Queue队列特性 (一)简单队列

2023-11-10

RabbitMQ Spring 项目整合

一 构建Maven工程
1.新建mave项目

1.1 新建 maven项目,后期咱们再整合spring boot amqp新建spring boot项目,路要一步一步走,先从简单的maven项目,了解原理,再从spring boot项目 看spring boot封装了什么东西,到底简化了我们的哪些操作
在这里插入图片描述
1.2 设置 groupId和artifactId 及maven配置
在这里插入图片描述
1.3 选择项目文件夹
在这里插入图片描述
1.4 项目新建完成,目录结构如下
在这里插入图片描述

2.配置mq依赖

1.5 pom中添加 RabbitMQ 客户端依赖

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

二 RabbitMQ 简单 Queue队列

1.简单队列描述

简单队列就是 1对1, 1个生产者对应1个消费者
在这里插入图片描述

2.代码实战

java目录新建coon包及simple1包

2.1 MqConnectUtil 工具类

coon 包下面新建MqConnectUtil 连接类

package conn;

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

/**
 * 当前描述:
 *
 * @author: jiazijie
 * @since: 2020/6/10 下午11:12
 */
public class MqConnectUtil {
    /**
     * 默认链接 / vhost
     *
     * @return
     * @throws Exception
     */
    public static Connection getConnectionDefault() throws Exception {
        //定义连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置服务地址
        factory.setHost("127.0.0.1");
        //端口
        factory.setPort(5672);
        //设置账号信息,用户名、密码、vhost
        factory.setVirtualHost("/");
        factory.setUsername("guest");
        factory.setPassword("guest");
        // 通过工程获取连接
        Connection connection = factory.newConnection();
        return connection;
    }


    /**
     * 链接 jzj vhost
     *
     * @return
     * @throws Exception
     */
    public static Connection getConnectionJzj() throws Exception {
        //定义连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置服务地址
        factory.setHost("127.0.0.1");
        //端口
        factory.setPort(5672);
        //设置账号信息,用户名、密码、vhost
        factory.setVirtualHost("jzj");
        factory.setUsername("guest");
        factory.setPassword("guest");
        // 通过工程获取连接
        Connection connection = factory.newConnection();
        return connection;
    }
}
2.2 Producer 生产者

Producer 生产者-产生消息->发送到交换机->转发到队列存着
在simple1包下新建 SimpleQueueProducer

package simple1;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import conn.MqConnectUtil;

import java.time.LocalDate;
import java.time.LocalTime;

/**
 * 当前描述:生产者
 *
 * @author: jiazijie
 * @since: 2020/6/10 下午11:14
 */
public class SimpleQueueProducer {
    /**
     * 队列名字
     */
    private final static String QUEUE_NAME = "test_simple_queue";

    public static void main(String[] argv) throws Exception {
        // 获取到连接以及mq通道
        Connection connection = MqConnectUtil.getConnectionDefault();
        // 从连接中创建通道
        Channel channel = connection.createChannel();

        /* 声明(创建)队列  queueDeclare( String queue, boolean durable, boolean exclusive, boolean autoDelete,  Map<String, Object> arguments)
         * queue - 队列名
         * durable - 是否是持久化队列, 队列的声明默认是存放到内存中的,如果rabbitmq重启会丢失
         * exclusie - 是否排外的,仅限于当前队列使用
         * autoDelete - 是否自动删除队列,当最后一个消费者断开连接之后队列是否自动被删除,可以通过界面 查看某个队列的消费者数量,当consumers = 0时队列就会自动删除
         * arguments - 队列携带的参数 比如 ttl-生命周期,x-dead-letter 死信队列等等
         */
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);

        // 消息内容
        String message = "Hello World! Time:" + LocalDate.now() + " " + LocalTime.now();
        System.out.println(message);

        /* 发送消息 String exchange, String routingKey, BasicProperties props, byte[] body
         * exchange - 交换机 ,"" 空时候指定的是 获取的virtualHost 虚拟服务器的 默认的exchang,每个virtualHost都有一个AMQP default type:direct 直接转发
         * queuename - 队列信息
         * props - 参数信息
         * message 消息体 byte[]类型
         */
        channel.basicPublish("", "", null, message.getBytes());

        System.out.println(" **** Producer  Sent Message: '" + message + "'");
        //关闭通道和连接
        channel.close();
        connection.close();
    }
}

!!!!! 这个地方很关键
!!!!! 这个地方很关键
!!!!! 这个地方很关键
第一个参数 是exchange 传空就是默认的交换机
第二个参数是 routingKey,这里没有设置routingKey,用了简单队列名字作为routingKey
channel.basicPublish("", SIMPLE_QUEUE_NAME, null, message.getBytes());

运行 Produce三次,产生3条消息,可以看下监控界面 localhost:15672 guest/guest
在这里插入图片描述

2.3 Consumer 消费者

Consumer 消费者->监听队列,有消息就从队列中取出来消息进行消费
在 simple1包下,新建SimpleQueueConsumer

package simple1;


import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.QueueingConsumer;
import conn.MqConnectUtil;

/**
 * 当前描述:消费者
 *
 * @author: jiazijie
 * @since: 2020/6/10 下午11:30
 */
public class SimpleQueueConsumer {
    /**
     * 队列名字
     */
    private final static String SIMPLE_QUEUE_NAME = "simple_queue_name_A";

    public static void main(String[] argv) throws Exception {
        Connection connection = MqConnectUtil.getConnectionDefault();
        Channel channel = connection.createChannel();

        /*确保这里的队列是存在的*/
        channel.queueDeclare(SIMPLE_QUEUE_NAME, false, false, false, null);
        System.out.println(" **** Consumer Waiting for messages. To exit press CTRL+C");


        QueueingConsumer consumer = new QueueingConsumer(channel);

        /* 消息确认机制
         * autoAck true:表示自动确认,只要消息从队列中获取,无论消费者获取到消息后是否成功消费,都会认为消息已经成功消费
         * autoAck false:表示手动确认,消费者获取消息后,服务器会将该消息标记为不可用状态,等待消费者的反馈,如果消费者一直没有反馈,那么该消息将一直处于不可用状态
         *          并且服务器会认为该消费者已经挂掉,不会再给其发送消息,直到该消费者反馈
         */
        channel.basicConsume(SIMPLE_QUEUE_NAME, true, consumer);

        while (true) {
            QueueingConsumer.Delivery delivery = consumer.nextDelivery();
            String message = new String(delivery.getBody());
            System.out.println(" **** Consumer Received '" + message + "'");
        }
    }

}

消费者 声明了队列,而且指定了消息确认机制
channel.queueDeclare(SIMPLE_QUEUE_NAME, false, false, false, null);
channel.basicConsume(SIMPLE_QUEUE_NAME, true, consumer);
正常接收 队列中过来的消息

2.4启动消费者

看下监控界面
在这里插入图片描述

看下消费者日志

可以看到,Producer生产者生产一条消息,Consumer 就能够消费一条消息
!!!!!!注意 我们在Producer中并没有指定 exchange,传入的exchange也是字符串,它使用的是每一个VirtualHost 下面默认的AMQP default exchange
如下图:
在这里插入图片描述

下一篇 我们介绍 RabbitMQ系列(四)RabbitMQ进阶-Queue队列特性 (二)工作队列 Work模式

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RabbitMQ系列(三)RabbitMQ进阶-Queue队列特性 (一)简单队列 的相关文章

  • Node.js 中的作业队列

    我正在node js 中寻找一个可以由php 调用的作业队列管理器 这是一个需要发送电子邮件 创建 pdf 文件等的 Web 应用程序 我想对这些应用程序执行异步 php 进程 流程示例 用户请求 php 页面 Php调用作业队列管理器并添
  • java队列中Queue.Poll()返回null但Queue.size()>0

    My code while Memo qRcv size gt 0 MessageReceived msg Memo qRcv poll 然后我得到了 2014 03 01 11 09 36 DEBUG Thread 16 threadQu
  • 无法从 docker 将 RabbitMQ 连接到我的应用程序 [重复]

    这个问题在这里已经有答案了 我目前被这个问题困扰了大约一周 确实找不到合适的解决方案 问题是 当我尝试连接到 dockerized RabbitMQ 时 它每次都会给出相同的错误 wordofthedayapp wordofthedayap
  • RabbitMQ 中多个消费者如何订阅同一主题并获取同一消息

    首先 我知道类似问题已经有答案了here https stackoverflow com questions 10620976 rabbitmq amqp single queue multiple consumers for same m
  • 何时使用 RabbitMQ 而不是 Kafka? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我被要求评估 RabbitMQ 而不是 Kafka 但发现很难找到消息队列比 Kafka 更合适的情况 有谁知道消息队列在吞吐量 耐用性 延迟或
  • NestJS Bull 队列:如何跳过测试环境中的处理?

    我在用着通过 Bull 的 NestJS 队列 https docs nestjs com techniques queues并用 Jest 编写单元测试 我想跳过测试期间触发的作业的处理 存在 GH 问题Bull 的测试模式 https
  • 死信交换 RabbitMQ 丢弃消息

    我正在尝试在 RabbitMQ 中实现 dlx 队列 场景很简单 我有 2 个队列 1 活着 2 死亡 x dead letter exchange 立即 x message ttl 5000 以及 立即 交换 这必然是 1 活着 我尝试运
  • springrabbitmq:无法将id设置为属性?

    我有一个属性文件 其中包含队列 其值为queue name 如果我在其他请使用该属性 那么它可以工作 但如果我在 id 上使用它 那么它会失败
  • NodeJS 推送队列,由 Laravel Worker 消耗

    我正在尝试使用节点应用程序发送到 SQS 的消息 因此 推送 操作由服务器 A 上的 Node App 执行 监听 操作由服务器 B 上的 Laravel App 执行 我的问题 我不知道如何格式化要使用的有效负载php artisan q
  • Java 中保存最后 N 个元素的大小受限队列

    关于 Java 库的一个非常简单快速的问题 是否有一个现成的类可以实现Queue具有固定的最大大小 即它始终允许添加元素 但它会默默地删除头元素以为新添加的元素提供空间 当然 手动实现它很简单 import java util Linked
  • 在 Windows 10 和 PHP 7.3 中安装 AMQP

    我想在 Windows 10 中使用 PHP 7 3 安装 AMQP 以便在 symfony 4 中使用 Windows 不使用任何 apache iis nginx 并直接由 symfony 运行 一切还好 直到 我决定在项目中使用rab
  • RabbitMQ 上的 Nack 和拒绝

    我想处理消费者从队列中获取的不成功的消息并将它们重新排队 想象一下我有这样的情况 P gt foo bar baz gt C 其中 foo bar 和 baz 是消息 如果消费者读到baz但出了问题 我可以使用basic reject or
  • 定义具有多种消息类型的消息传递域

    到目前为止 我见过的大多数 F 消息传递示例都使用 2 4 种消息类型 并且能够利用模式匹配将每条消息定向到其正确的处理函数 对于我的应用程序 由于处理和所需参数的不同性质 我需要数百种独特的消息类型 到目前为止 每个消息类型都是其自己的记
  • 使用一个或多个标准 FIFO 队列实现延迟队列 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 延迟队列是一种队列 其中每条消息都有
  • Azure 有害队列计数警报规则

    在之前的一个项目中 我设法设置了一个警报规则 该规则会查看有害队列消息计数 并在队列中存在某些内容时 每天一次 使用 webhook 向 slack 发出警报 我试图找到它在 Azure 中的位置 因为看起来事情已经发生了变化 如果这不是
  • MassTransit 生成我想忽略的_skipped 队列

    任何人都可以猜出问题是什么 因为我不知道如何解决这个问题 大众运输产生 skipped队列 我不知道为什么它会生成这些队列 它是在执行发布请求响应时生成的 请求客户端是使用 MassTransit RequestClientExtensio
  • 基于多线程的 RabbitMQ 消费者

    我们有一个 Windows 服务 它监听单个 RabbitMQ 队列并处理消息 我们希望扩展相同的 Windows 服务 以便它可以监听 RabbitMQ 的多个队列并处理消息 不确定使用多线程是否可以实现这一点 因为每个线程都必须侦听 阻
  • OutOfRangeError(请参阅上面的回溯):FIFOQueue '_1_batch/fifo_queue' 已关闭并且元素不足(请求 32,当前大小 0)

    我在使用队列中张量流读取图像时遇到问题 请让我知道我犯了什么错误 下面是代码 import tensorflow as tf slim tf contrib slim from tensorflow python framework imp
  • RabbitMQ:如何创建和恢复备份

    我是 RabbitMQ 的新手 我需要一些帮助 如何备份和恢复到RabbitMQ 以及我需要保存哪些重要数据 谢谢 如果您安装了管理插件 您可以在Overview页 在底部你会看到导入 导出定义您可以使用它来下载代理的 JSON 表示形式
  • 面向服务的架构 - AMQP 或 HTTP

    一点背景 非常大的整体 Django 应用程序 所有组件都使用相同的数据库 我们需要分离服务 以便我们可以独立升级系统的某些部分而不影响其余部分 我们使用 RabbitMQ 作为 Celery 的代理 现在我们有两个选择 使用 REST 接

随机推荐

  • android 检查otg,怎么查看手机是否支持otg

    怎么查看手机是否支持otg很多同学都遇到了这个问题 那么该如何解决呢 请看IEfans小编给大家带来的查看手机是否支持otg方法一览 希望对您有所帮助 工具 原料 手机 VIVO X6S A 系统 PD1415BA A 3 13 10And
  • LeetCode141:环形链表

    给你一个链表的头节点 head 判断链表中是否有环 如果链表中有某个节点 可以通过连续跟踪 next 指针再次到达 则链表中存在环 为了表示给定链表中的环 评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置 索引从 0 开始 注意
  • Non-resolvable parent POM for解决

    在运行maven项目是出现CIA列错误提示 INFO Scanning for projects ERROR ERROR Some problems were encountered while processing the POMs FA
  • 机器学习资源大全中文版

    中午版翻译转载自 https github com jobbole awesome machine learning cn 英文版原文转载自 https github com josephmisiti awesome machine lea
  • Jeesite 登录逻辑分析

    最近项目需求研究免登录进入jeesite系统 于是对jeesite的登录逻辑进行了研究 一 当用户从url访问jeesite系统时 首先会通过下面方法 RequestMapping value adminPath login method
  • ag-grid-vue单元格合并

    原理 调用ag的合并方法时 会先找到第一个需要合并的单元格 然后设置z index 1 继续往下找 如果第二行该列仍然需要合并 则第一行刚才找到的单元格的高度会乘以2 以此类推 如果连续找到第9个依然需要合并 则 第一个找到的单元的高度 1
  • 朴素贝叶斯分类器之天气预测算法

    朴素贝叶斯分类器之天气预测算法 1 1 题目的主要研究内容 1 根据天气情况预测要不要去打网球 1 2 题目研究的工作基础或实验条件 1 硬件环境 Intel R Core TM i7 7700HQ CPU 2 软件环境 本实验的软件环境主
  • 24进制 编码实现

    coding utf8 ALPHABET abcdefghijkmnpqrstuvwxyz ALPH VALUE a 0 b 1 c 2 d 3 e 4 f 5 g 6 h 7 i 8 j 9 k 10 m 11 n 12 p 13 q 1
  • 数据库模糊查询

    模糊查询 like 通配符 代表单个任意字符 代表任意个数字符 1 查询姓 马 的学员信息 select from stu where name like 马 2 查询第二个字是 花 的学员信息 select from stu where
  • [技术发展-2]:高级研修班-软件与信息服务篇-《国际电子信息产业创新的经验及借鉴》

    作者主页 https blog csdn net HiWangWenBin 文章出处 https blog csdn net HiWangWenBing article details 117374830 目录 前言 第1章 电子信息产业发
  • C语言——库函数qsort的使用和模拟实现

    作者 敲代码 流川枫 博客主页 流川枫的博客 专栏 C语言从入门到进阶 语录 Stay hungry stay foolish 工欲善其事必先利其器 给大家介绍一款超牛的斩获大厂offer利器 牛客网 点击免费注册和我一起刷题吧 文章目录
  • Windows10中搭建ftp服务器以实现文件传输

    开启ftp服务 1 打开控制面板 程序和功能 启用或关闭Windows功能 2 找到Internet Information Services 开启以下服务 勾选之后 ftp服务开启成功 配置IIS 搭建ftp 1 Win S键搜索iis
  • R语言3.12 对应分析

    对应分析是主成分和因子分析的进一步扩展 对应分析的提出是基于因子分析的不足 因子分析方法分为R型因子分析和Q型因子分析 R型因子分析研究变量 指标 之间的相关关系 Q型因子分析研究样本之间的相关关系 但有时不仅关心变量之间或样本之间的相关关
  • js逆向--mytokencap.com站点code参数的破解

    本次分析的网站 aHR0cHM6Ly93d3cubXl0b2tlbmNhcC5jb20v 1 抓包 本次要抓取的数据如下 点击翻页按钮 发现网址没变化 说明数据的渲染是通过ajax异步加载出来的 通过抓包 发现以下接口 数据都在这个接口里边
  • Office 2021 LTSC 专业增强版 v16.0.14332.20110 集成Visio+Project

    前言 版本由远景论坛的舞阳twl大佬打包制作 包含Word Excel PPT Access Outlook OneNote OneDrive Visio Project组件 默认情况下安装Word Excel PPT Visio Proj
  • Quartus-II 13 安装

    Quartus II 13 安装 前言 一 Quartus II的安装 二 Quartus II的注册 总结 参考文章 前言 安装Quartus前请先完成Modelsim的安装 详情点击此处 Quartus II 13文件百度网盘连接 ht
  • TensorFlow学习(二)简单线性模型+梯度下降法优化

    import tensorflow as tf import numpy as ny 使用numpy生成100个点 x data ny random rand 100 y data 0 1 x data 0 2 构造一个线性模型 k tf
  • GIt在pyCharm的使用教程

    GIt在pyCharm的使用教程 目录 GIt在pyCharm的使用教程 一 Git的安装和配置 二 在pycharm中配置git 三 创建仓库 四 一些基础操作 五 建立远程仓库提交代码 一 Git的安装和配置 1 下载git git的官
  • 运用selenium库写淘宝抢购详解【3】(文末附带源码)

    每日一更 3 今天讲的是用selenium库写一个淘宝抢购程序 10 19亲测可用 1 淘宝抢购的思路和上一篇的思路类似 通过打开浏览器筛选浏览器内的标签 并点击来实现自动化 下面来想一下思路 本教程所有配套资料索取方式如下 点赞三连后Q裙
  • RabbitMQ系列(三)RabbitMQ进阶-Queue队列特性 (一)简单队列

    RabbitMQ Spring 项目整合 文章目录 RabbitMQ Spring 项目整合 一 构建Maven工程 1 新建mave项目 2 配置mq依赖 二 RabbitMQ 简单 Queue队列 1 简单队列描述 2 代码实战 2 1