RabbitMQ--Hello World(基础详解)

在这里插入图片描述

文章目录

  • 先决条件
  • RabbitMQ 初识
  • RabbitMQ--Hello World
    • 发送
    • 接收

更多相关内容可查看

先决条件

本教程假定 RabbitMQ 已安装并在标准端口 (5672) 上运行。如果你 使用不同的主机、端口或凭据,连接设置将需要 调整。如未安装可查看Windows下载安装RabbitMQ客户端(2024最新篇)

RabbitMQ 初识

RabbitMQ 是一个消息代理:它接受和转发消息。你可以想想 关于它作为邮局:当您将要投递的邮件放入 邮箱,您可以确定信函承运人最终会送达 邮寄给您的收件人。在这个类比中,RabbitMQ 是一个邮箱,一个帖子 办公室和信使。

RabbitMQ 和邮局之间的主要区别在于它没有 而是处理纸张,而是接受、存储和转发二进制数据 blob \u2012 消息。

RabbitMQ 和一般的消息传递使用一些术语。

  • 生产无非是发送。发送消息的程序 是制片人
  • 队列是 RabbitMQ 中邮箱的名称。虽然消息会流动 通过 RabbitMQ和您的应用程序,它们只能存储在队列中。队列仅受主机的内存和磁盘限制的约束,它是 本质上是一个大型消息缓冲区。
  • 许多生产者可以发送发送到一个队列的消息,许多使用者可以尝试从一个队列接收数据。
  • 表示队列的方式:queue_name
  • 消费与接受具有相似的含义。消费者就是一个程序 主要等待接收消息

请注意,生产者、消费者和代理不必驻留在同一个主机;事实上,在大多数应用程序中,它们不会。一个应用程序可以同时是生产者和消费者也是如此。

RabbitMQ–Hello World

我们将用 Java 编写两个程序;一个 发送单条消息的生产者,以及接收 消息并打印出来。我们将在 Java API,专注于这个非常简单的事情,只是为了得到 开始。这是一个消息传递的“Hello World”。

在下图中,“P”是我们的生产者,“C”是我们的消费者。这 中间的框是一个队列 - RabbitMQ 保留的消息缓冲区 代表消费者。

P
你好
C

发送

P
hello

我们将消息发布者(发送者)和消息使用者(接收者)称为 。发布者将连接到 RabbitMQ,发送一条消息, 然后退出。
我们需要导入一些类:


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

设置类并命名队列:

public class Send {private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {...}
}

然后,我们可以创建与服务器的连接

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
try (Connection connection = factory.newConnection();Channel channel = connection.createChannel()) {
}

该连接抽象了套接字连接,并负责处理 协议版本协商和认证等为我们服务。这里 我们连接到本地机器上的 RabbitMQ 节点 - 因此是 localhost。如果我们想连接到另一个节点上的节点 机器,我们只需在此处指定其主机名或 IP 地址

接下来我们创建一个通道,这是大多数 API 用于获取 完成的事情驻留。请注意,我们可以使用 try-with-resources 语句 因为两者都实现了. 这样,我们就不需要在代码中显式关闭它们。ConnectionChanneljava.lang.AutoCloseable

要发送,我们必须声明一个队列供我们发送到;然后我们可以发布一条消息 到队列中,所有这些都在 try-with-resources 语句中:

channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String message = "Hello World!";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");

声明队列是幂等的 - 只有在不声明的情况下才会创建它 已经存在。消息内容是字节数组,因此可以进行编码 随便你喜欢什么。

发送不起作用!
如果这是您第一次使用 RabbitMQ,并且您没有看到“已发送” 消息,那么你可能会挠头,想知道什么可以 错了。也许代理是在没有足够的可用磁盘空间的情况下启动的 (默认情况下,它至少需要 200 MB 可用空间),因此拒绝 接受消息。检查代理日志文件以确认并减少 必要时限制。配置 文件文档将向您展示如何设置 .disk_free_limit

生产者总体代码如下(便于大家复制粘贴)

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.nio.charset.StandardCharsets;public class Send {private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");try (Connection connection = factory.newConnection();Channel channel = connection.createChannel()) {channel.queueDeclare(QUEUE_NAME, false, false, false, null);String message = "Hello World!";channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8));System.out.println(" [x] Sent '" + message + "'");}}
}

接收

我们的消费者会收听来自 RabbitMQ,所以与发布单个消息的发布者不同,我们将让使用者保持运行以侦听消息并将其打印出来。

你好
C

我们将用于缓冲服务器推送给我们的消息的额外界面。DeliverCallback

设置与发布者相同;我们打开一个连接和一个 channel,并声明我们将要从中使用的队列。 请注意,这与发布到的队列匹配。

public class Recv {private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");Connection connection = factory.newConnection();Channel channel = connection.createChannel();channel.queueDeclare(QUEUE_NAME, false, false, false, null);System.out.println(" [*] Waiting for messages. To exit press CTRL+C");}
}

请注意,我们也在此处声明队列。因为我们可能会开始 消费者先于发布者,我们要确保队列存在 在我们尝试从中消费消息之前。

我们为什么不使用 try-with-resource 语句来自动关闭 通道和连接?通过这样做,我们只需制作程序即可 继续前进,关闭所有东西,然后退出!这会很尴尬,因为 我们希望在消费者倾听的同时,这个过程仍然有效 异步地让消息到达。

我们将告诉服务器将来自 队列。由于它将异步推送我们消息,因此我们提供了一个 以对象的形式进行回调,该对象将缓冲消息,直到 我们已准备好使用它们。这就是子类的作用。DeliverCallback

DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody(), "UTF-8");System.out.println(" [x] Received '" + message + "'");
};
channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });

消费者总体代码(便于大家复制粘贴)

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
import java.nio.charset.StandardCharsets;public class Recv {private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");Connection connection = factory.newConnection();Channel channel = connection.createChannel();channel.queueDeclare(QUEUE_NAME, false, false, false, null);System.out.println(" [*] Waiting for messages. To exit press CTRL+C");DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody(), StandardCharsets.UTF_8);System.out.println(" [x] Received '" + message + "'");};channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });}
}

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

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

相关文章

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:桥梁结构安全监测

中国铁路设计集团有限公司(简称中国铁设),原铁道第三勘察设计院集团有限公司(铁三院),是中国国家铁路集团有限公司所属的唯一设计企业,成立于1953年,总部位于天津市,是以…

f4pga环境搭建教程

f4pga环境搭建教程 背景介绍 FOSS Flows For FPGA (F4PGA) project,是一套开源的FPGA工具链,号称the GCC of FPGAs,作用是将写的硬件描述语言(verilog或VHDL)转化为可以在FPGA上运行的可执行文件(bit文件…

滨江区代理记账——专业、便捷的服务,让您的企业更加规范、高效

随着社会经济的发展和企业的规模扩大,依法纳税、做好财务工作变得越来越重要,而代理记账,就是这样一个专业的服务平台,为满足广大企业和个体户的会计需求,帮助他们规范财务管理,提高效率。 代理记账可以帮助…

基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析

原文链接:基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247606139&idx4&snf94ec30bfb5fa7ac0320403d49db3b66&chksmfa821e9ccdf5978a44a9ba96f6e04a121c0bbf63beea0940b385011c0b…

MLU370-M8 chattts-ui快速出击

目录 一、paas平台环境选择二、代码环境准备1.代码下载2.环境安装modelsopetransformersaccelerate 3.常规pip安装4.代码修改4.代码修改 三.算法启动 一、paas平台环境选择 驱动选择:5.10.22及以上 镜像选择:pytorch2.1 二、代码环境准备 1.代码下载…

李廉洋:6.6黄金原油怎么看?今日行情分析及最新策略。

黄金消息面分析:美指走强未能抑制金价升势。黄金价格大幅上涨,在美国公布喜忧参半的经济数据后,金价与周二的走势发生180度大转弯,这些数据可能保证美联储设定的借贷成本降低。美国10年期基准国债收益率下跌3个基点,至…

Spring Cloud工程添加子模块打包后文件为war包而非jar包

Spring Cloud工程添加子模块打包后文件为war包而非jar包 Spring Cloud子模块打出的包通常是JAR包而非WAR包,这是因为Spring Cloud主要基于Spring Boot构建,而Spring Boot默认打包为可执行JAR包。然而,如果遇到了Spring Cloud子模块打成了WAR…

【论文阅读】SELF-RAG,让模型决策和反思检索

关于LLM何时使用RAG的问题,原本是阅读了关于ADAPT-LLM模型的那篇论文,被问到与SELF-RAG有何区别。所以,大概看了一下SELF-RAG这篇论文,确实很像,这些基于LLM针对下游任务的模型架构和方法,本来就很像。不过…

【Mybatis】源码分析-自定义框架

1、自定义持久层框架 1.1、分析JDBC操作问题 package blnp.net.cn.jvm.demos;import java.sql.*;/*** <p></p>** author lyb 2045165565qq.com* createDate 2024/5/24 14:24*/ public class JdbcTest {public static void main(String[] args) {Connection conne…

红酒保存中的软木塞与瓶身保护

云仓酒庄雷盛红酒&#xff0c;以其卓着的品质和精美的包装赢得了众多消费者的喜爱。在红酒的保存过程中&#xff0c;软木塞与瓶身保护是至关重要的环节。本文将深入探讨这两方面的问题&#xff0c;以帮助消费者更好地理解和欣赏云仓酒庄雷盛红酒。 首先&#xff0c;我们来谈谈软…

gitee上传整个项目文件夹

1.访问git官网并下载 Git 如下图&#xff1a; 点击download&#xff0c;然后选择合适的版本进行下载&#xff1a; 如下图&#xff0c;我下载的是2.32.0.2版本&#xff0c;64位windows版。 下载完之后&#xff0c;直接点击安装。 然后根据向导&#xff0c;一路默认到安装完成。…

SL3160 替换PN6008 耐压150V 降5V输出降压恒压芯片 脚位一样

在电子工程领域&#xff0c;芯片替换是一项常见且至关重要的任务。今天&#xff0c;我们将详细探讨SL3160芯片如何替换PN6008芯片&#xff0c;重点关注两者在耐压150V和降5V输出降压恒压方面的性能对比&#xff0c;以及它们脚位一致性的优势。 我们来了解一下SL3160和PN6008这两…

Java工程师的行业的生命周期

在现代商业环境中&#xff0c;理解行业的生命周期是每一个企业家、经理人以及市场分析师必须掌握的关键知识。行业的生命周期不仅决定了企业的战略方向&#xff0c;也影响着资源配置、产品开发、市场营销等各个方面。认识行业生命周期的重要性在于它能够帮助企业在不同的阶段采…

关于vue2 antd 碰到的问题总结下

1.关于vue2 antd 视图更新问题 1.一种强制更新 Vue2是通过用Object…defineProperty来设置数据的getter和setter实现对数据和以及视图改变的监听的。对于数组和对象这种引用类型来说&#xff0c;getter和setter无法检测到它们内部的变化。用这种 this.$set(this.form, "…

搜狗输入法的软键盘怎么关闭

我的搜狗输入法软件盘和typora中ctrlshiftk冲突了&#xff0c;关闭软键盘

2024.6.9周报

目录 摘要 ABSTRACT 一、文献阅读 1、相关信息 2、摘要 3、文献解读 1、Introduction 2、文章主要贡献 3、模型架构 4、实验 4、结论 二、代码实现 总结 摘要 本周我阅读了一篇题目为《Unlocking the Potential of Transformers in Time Series Forecasting with …

如何理解与学习数学分析——第二部分——数学分析中的基本概念——第8章——可微性

第2 部分&#xff1a;数学分析中的基本概念 (Concepts in Analysis) 8. 可微性(Differentiability) 本章讨论梯度(gradients)/斜率(slopes)和切线(tangent)&#xff0c;指出常见的误解并解释如何避免这些误解。将可微性的定义与图形表示联系起来&#xff0c;展示如何将其应用…

【2024】零基础Python 快速入门篇

2023年是AI的元年&#xff0c;AI的爆火不仅推动了科技领域的进步&#xff0c;更让 Python 语言成为了这一变革中的关键角色。 Python 语言简单易懂&#xff0c;语法清晰明了&#xff0c;懂一点英语的都能学得会。很适合在职场摸爬滚打多年的前端组长作为捅破天花板的语言&…

Linux服务器扩容及磁盘分区(LVM和非LVM)

Linux扩容及磁盘分区&#xff08;LVM和非LVM&#xff09; 本文主要介绍了阿里云服务器centos的扩容方法&#xff1a;非LVM分区扩容方法&#xff08;系统盘&#xff09;&#xff0c;以及磁盘改LVM并分区&#xff08;数据盘&#xff09;。主要是ext4文件系统及xfs磁盘scsi MBR分…

【轻量化】YOLOv10: Real-Time End-to-End Object Detection

论文题目&#xff1a;YOLOv10: Real-Time End-to-End Object Detection 研究单位&#xff1a;清华大学 论文链接&#xff1a;http://arxiv.org/abs/2405.14458 代码链接&#xff1a;https://github.com/THU-MIG/yolov10 推荐测试博客&#xff1a;YOLOv10最全使用教程&#xff0…