RabbitMQ 简单的 Hello World 程序

巡检领域红外热成像相机镜头焦距选择方法总结 摘要:巡检机器人红外热成像相机镜头焦距的选择需综合考虑检测距离、视场角、目标分辨率等核心要素。短焦距(4-6mm)适用于室内近距离巡检,中焦距(12-19mm)适合变电站等中等距离场景,长焦距(25-50mm)则用于光伏板等远距离检测。选型需遵循焦距计算公式f=SL×d,确保目标占据≥3×3像元,同时考虑机器人安装空间、环境适应性及软件联动需求。建议通过样机实测或仿真软件验证选型合理性,以实现对设备故障的精准识别。 阅读详情

要想使用RabbitMQ客户端的API,首先要引入依赖。

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

无论是生产消息还是消费消息,都要先获取RabbitMQ的连接!

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("49.232.202.201");
        //factory.setPort(5672);//默认端口是5672可以不设置
        factory.setUsername("gosuncn");
        factory.setPassword("123456");
        factory.setVirtualHost("/gosuncn");//根据虚拟主机权限设置,设置具有可访问权限的虚拟主机。

创建一个连接工厂,设置主机、端口、用户名、密码、虚拟主机等信息。

Connection connection = factory.newConnection();

通过连接工厂,获取一个信道 Channel ,通过信道进行数据传输;那么信道是什么?

我们知道:RabbitMQ通过TCP连接实现AMQP协议数据的交换,但TCP连接的创建和销毁都是非常消耗资源的!于是,RabbitMQ就通过信道的方式进行数据传输,具体来说,如果把TCP连接比作是一个大的管道,那么信道就是TCP这个大管道中的一个小管道。

Channel channel = connection.createChannel();

信道可以声明一个队列:如果声明的队列不存在,就创建一个队列;若已存在,就不创建。

        /**
         * String queue 队列名称
         * boolean durable 是否持久化
         * boolean exclusive 是否排外[比如:一个消费者已经连接该队列,如果设置为true,其他消费者就无法连接该队列]
         * boolean autoDelete 是否自动删除[没有信道连接该队列时,是否自动删除该队列]
         * Map<String, Object> arguments 参数
         */
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);

Tip:若一个队列已经声明被创建,那么队列的属性就不可以更改,否则抛出异常。

channel.queueDeclare(QUEUE_NAME, false, false, false, null);

再执行以下代码就会,抛出异常!

channel.queueDeclare(QUEUE_NAME, false, true, false, null);

属性不可再更改了!

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

public class SendMessage {
    private final static String QUEUE_NAME = "hello";
    private final static String MESSAGE = "Hello World";
    public static void main(String[] args) {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("49.232.202.201");
        //factory.setPort(5672);//默认端口是5672可以不设置
        factory.setUsername("gosuncn");
        factory.setPassword("123456");
        factory.setVirtualHost("/gosuncn");//根据虚拟主机权限设置,设置具有可访问权限的虚拟主机。
        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
            /**
             * String queue 队列名称
             * boolean durable 是否持久化
             * boolean exclusive 是否排外[比如:一个消费者已经连接该队列,如果设置为true,其他消费者就无法连接该队列]
             * boolean autoDelete 是否自动删除[没有信道连接该队列时,是否自动删除该队列]
             * Map<String, Object> arguments 参数
             */
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            channel.basicPublish("", QUEUE_NAME, null, MESSAGE.getBytes());
            System.out.println("message [" + MESSAGE + "] be sent");
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}

将连接和信道声明在try后的括号中,可自动调用关闭方法。

上面代码,第一次运行会创建一个名为hello的队列,第二次运行就不会创建了,这样可以保证虚拟主机中有一个名为hello的队列。

channel.basicPublish("", QUEUE_NAME, null, MESSAGE.getBytes());

第一个参数是交换机的名称,"" 表示默认交换机,类型其实是属于直连交换机,以后会具体介绍交换机类型。

第二个参数是路由的名称,在连接默认交换机时,路由键其实就是队列的名称。

第三个参数是属性对象。

第四个参数是发送的消息字节数组。

运行结果:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
message [Hello World] be sent

Process finished with exit code 0


接下来,我们再看看消费者代码

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

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class ReceiveMessage {

    private final static String QUEUE_NAME = "hello";

    public static void main(String[] args) throws IOException, TimeoutException {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("49.232.202.201");
        //factory.setPort(5672);//默认端口是5672可以不设置
        factory.setUsername("gosuncn");
        factory.setPassword("123456");
        factory.setVirtualHost("/gosuncn");//根据虚拟主机权限设置,设置具有可访问权限的虚拟主机。
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        /**
         * String queue 队列名称
         * boolean durable 是否持久化
         * boolean exclusive 是否排外[比如:一个消费者已经连接该队列,如果设置为true,其他消费者就无法连接该队列]
         * boolean autoDelete 是否自动删除[没有信道连接该队列时,是否自动删除该队列]
         * Map<String, Object> arguments 参数
         */
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        channel.basicConsume(QUEUE_NAME, true, (consumerTag, message) -> {
            System.out.println("DeliverCallback's consumerTag is {" + consumerTag + "}");
            System.out.println("消费消息的内容 = " + new String(message.getBody()));
        }, consumerTag -> System.out.println("CancelCallback's consumerTag is {" + consumerTag + "}"));
    }
}

前面都是同样的声明,不同的是:

第一个:我们并没有将Connection和Channel写在try的括号里。因为,我们不能关闭消费者,我们需要等待接收消息到来。

Connection connection = factory.newConnection();
Channel channel = connection.createChannel();

第二个:同样是要声明一个队列,来确保虚拟主机中,有这么一个队列存在,不然会抛出异常!但是不同的是我们需要消费消息:

        channel.basicConsume(QUEUE_NAME, true, (consumerTag, message) -> {
            System.out.println("DeliverCallback's consumerTag is {" + consumerTag + "}");
            System.out.println("消费消息的内容 = " + new String(message.getBody()));
        }, consumerTag -> System.out.println("CancelCallback's consumerTag is {" + consumerTag + "}"));

第一个参数:队列的名称。
第二个参数:是否自动确认消息。
第三个参数:收到消息后的消息回调。
第四个参数:消息被取消时的回调。

ReceiveMessage程序启动后,将进入阻塞状态,一直等待消息!


测试运行,第一步将ReceiveMessage程序启动,程序阻塞
在这里插入图片描述
第二步:运行SendMessage程序
在这里插入图片描述
图中,看到程序结束,消息被发送到了RabbitMQ中。紧接着,之前的ReceiveMessage程序收到消息,并输出的消息内容,如图:
在这里插入图片描述
第三步:再运行SendMessage程序一次,ReceiveMessage程序又收到一条消息
在这里插入图片描述
客官!到这里,RabbitMQ基本的操作和运行就结束了。拜拜~~

Xilinx FPGA平台GTX简易使用教程(四)GTX IP核配置教程 干货来了,GTX IP核配置,搬砖全靠它~~ 阅读详情

相关推荐

闲人闲谈PS之一项目库存跨公司业务STO解决方案--SAP闲人的开篇

写这篇文章之前,简单说一下发这篇文章的动机。也算是在SAP这一行干了快10多年,在对一个模块了解越来越深入,越发觉自己的SAP知识浅薄。总的来说,和多数顾问一样,对于**标准功能**的应用业务场景理解还是存在或多或少的知识盲区。 因为一个偶然,看到SAP团子君的文章,分享了很多干货文章。这也是自己一直想做的时候,不管水平高低与否,分享本身就意味着提升。好了废话不多说,先在优快云上发一篇吧,困惑自己将近10年的问题的解决方案。 业务场景:在项目型企业中,通常会有这样的业务,母公司和客...

SAP闲人的博客 9267

RabbitMQ:简单模式(Hello World)

先来看看RabbitMQ架构图Broker:接收和分发消息的应用, RabbitMQ Server 就是 Message Broker: 出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似 于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出 多个 vhost ,每个用户在自己的 vhost 创建 exchange / queue 等Connection。

梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记 1225

ABP多租户实现

abp会调用ITenantStore.Find(Guid)方法去查tenant是否存在。要骗过abp就得自己实现ITenantStore并替换原来的实现。abp会自动解jwt里的tenant id,并且尝试验证它。这时候我们之前实现的ITenantStore就可以骗过abp。你要不想骗它也成,反正这个类是可以依赖注入的,你爱咋验证就咋验证。不用open id dict,只用jwt,让abp轻起来。在原来生成jwt的地方加入tenantId。module上也要加DependsOn。

m0_46704355的博客 471

SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.

报错: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 添加依赖 <dependency> <groupId&

彭世瑜的博客 1209

YOLOv8的Anchor-Free革新:从中心点预测到动态IoU匹配的全面解析

本文深入解析了YOLOv8采用Anchor-Free(无锚框)设计的核心优势与实现机制。通过摒弃预设锚框,模型直接预测目标中心点与宽高,结合解耦头、动态IoU匹配及Varifocal Loss等创新,显著简化了训练流程并提升了检测精度,尤其在小目标检测和模型泛化能力上表现突出。

weixin_29094301的博客 356

【ARM CoreLink 系列 4.2 -- NI-700 Function units 详细介绍】

CoreLink NI-700的ASNI(AXI系统网络接口)完成者单元负责接收并处理来自AXI请求者设备的请求。这些单元将事务打包成根据NI-700通用传输(GT)协议的Flits,并将GT响应Flits解包成AXI响应。AXI与GT协议之间的请求、数据和响应事务的转换:确保AXI事务可以被NI-700网络正确处理,并将GT协议的响应正确转换回AXI响应。入站事务的突发拆分。

CodingCos的博客 1322

RabbitMQ入门:“hello world”

RabbitMQ入门RabbitMQ简介简介开发环境核心概念"hello world"入门案例 RabbitMQ简介 简介 RabbitMQ作为一个消息中间件,是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现,从本质上来说,它负责接受生产者的消息,并传递给消费者,在两者之间,根据你给的路由和缓冲规则,进行传递。应用场景主要是异步处理,应...

weixin_46250898的博客 538

理想L9高通QAM8797座舱域控制器全拆解|全网独家复现 硬件架构升级、电源散热优化、多屏低延迟交互、车机系统赋能高端智能座舱落地

随着智能汽车向舱驾一体、全域智能化、多模交互方向迭代,传统单一功能座舱芯片已无法满足多屏高刷渲染、全车AI语音、车内视觉感知、高速车载通信的叠加算力需求。2026款全新理想L9作为旗舰级智能SUV,全面搭载高通新一代旗舰座舱域控制器QAM8797,搭配自研马赫M100 AI芯片、国产车规主控芯片,构建起高性能、高可靠、低延迟的车载中央计算平台。

getusushu的博客 378

【RabbitMQ教程】“Hello World”工作队列模式

1、将‘Hello World工作队列模式’单独抽出来细讲,目的是借助这个模式好好讲一下rabbitmq的‘自动ACK’和‘手动ACK’。2、代码中的每一步,都演示了rabbitmq管理界面的变化;

qq_43783527的博客 681

[密码学实战]密评考试训练系统v1.0程序及密评参考题库(获取路径在文末)(二十四)

本系统将密码学理论与软件工程实践相结合,为密评备考提供了高效解决方案。随着《密码法》的深入实施,掌握密评知识将成为信息安全从业者的核心竞争力。立即开始您的密码安全专家之旅!(注:实际应用请以最新发布版本为准)

曼岛_的博客 797

optee技术简介

OP-TEE(Open Portable Trusted Execution Environment)是一种开源的可信执行环境(TEE),专为ARM TrustZone架构设计。TEE是一种独立的执行环境,运行在主操作系统之外,为敏感任务提供安全的计算空间,如加密、身份验证、密钥管理等。

baron-周贺贺-代码改变世界ctw 1279

RabbitMQ 的概念

文章目录RabbitMQ 的概念1. 四大核心概念2. RabbitMQ 核心部分3. 各个名词介绍 RabbitMQ 的概念 RabbitMQ 是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑 RabbitMQ 是一个快递站,一个快递员帮你传递快件。RabbitMQ 与快递站的主要区别在于,它不处理快件而是接收,存储和转发消息数据。 1. 四大核心概念 生产者 产生数据发送消息的程序是生

兮动人 610

leaflet 综合教程170+ 【目录 】(已包含162篇文章)

vue+leaflet系列教程旨在为开发者提供简单快捷的,。在每一个示例中,解释相应的API知识点,做到。注意本示例目录中的内容可能加载是vue+openlayers的示例, 本目录是要加载vue+leaflet的示例,只是内容少,逐渐更新中。

大剑师兰特的GIS世界 1万+

Hello World 一个简单的Java程序来介绍RabbitMQ的使用

Hello world 在这一部分中,将使用 Java编写两个程序。发送单个消息的生产者和接收消息并打印出来的消费者。并介绍其中的一些细节。 在下图中,P 是生产者,C 是消费者。中间的框是一个队列,RabbitMQ代表使用者保留的消息缓冲区。 2.1 依赖 <!--rabbitmq依赖--> <dependency> <groupId>com.rabbitmq</groupId>

qie ting feng yin的博客 1258

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

RabbitMQ消息队列(二):"Hello, World"[转]

2. Sending 第一个program send.cs:发送Hello world 到queue。正如我们在上篇文章提到的,你程序的第9行就是建立连接,第12行就是创建channel,第14行创建名字为hello的queue。 1 using System; 2 using RabbitMQ.Client; 3 using System.Text; 4 5

末路狂奔》》》》 558

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

RabbitMQ消息队列(二):”Hello, World“

本文将使用Python(pika 0.9.8)实现从Producer到Consumer传递数据”Hello, World“。首先复习一下上篇所学:RabbitMQ实现了AMQP定义的消息队列。它实现的功能”非常简单“:从Producer接收数据然后传递到Consumer。它能保证多并发,数据安全传递,可扩展。和任何的Hello world一样,它们都不复杂。我们将会设计两个程序,一个发送Hello...

weixin_33755557的博客 74

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

RabbitMQ学习笔记[2]-RabbitMQ消息模型-基本消息模型

RabbitMQ is a message broker: it accepts and forwards messages. You can think about it as a post office: when you put the mail that you want posting in a post box, you can be sure that Mr. or Ms. Mailperson will eventually deliver the mail to your recipie.

春盏 247

RabbitMQ Tutorials简介

RabbitMQ Tutorials These tutorials cover the basics of creating messaging applications using RabbitMQ. You need to have the RabbitMQ server installed to go through the tutorials, please see the ins

GarfieldEr007的专栏 1162

RabbitMQ 学习笔记(一):简单介绍及"Hello World"

RabbitMQ 简单介绍:RabbitMQ是一个消息代理,即它的功能为:接受和转发消息。你可以把它想象成一个邮局:当你把你想要的邮件放在邮箱里,你可以肯定邮差先生最终会把邮件送到你的收件人那里。在这个类比中,RabbitMQ相当于一个邮筒、一个邮局和一个邮差。RabbitMQ与邮局的主要区别在于,它不处理纸张,而是接受、存储和转发数据的二进制数据。RabbitMQ和一般的消息传递使用到一些术语:生

大葱敏的博客 7562

RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例

你是否听说过或者使用过?你是否听说过或者使用过?你是否听说过或者使用过?提到这几个词,用过的人,也许觉得很简单,没用过的人,也许觉得很复杂,至少在我没使用消息队列之前,听别人提到消息队列,都感觉很复杂,很高深。好了,言归正传,本篇博客我们就讲解下什么是消息队列,RabbitMQ环境的安装配置,最后通过一个Hello World示例了解下RabbitMQ的使用方法。

weixin_62421895的博客 1088

rabbitmq入门 hello world

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34150224的博客 110

RabbitMQ通讯方式第一讲:Hello World

从官方文档出发,了解RabbitMQ的通讯方式

hdk5855的博客 752

RabbitMQ(1): docker-compose安装rabbitmq及简单使用Hello World

编写docker-compose.yml version: '3' services: rabbitmq: image: rabbitmq:3.8.3-management container_name: rabbitmq restart: always hostname: myRabbitmq ports: - 15672:15672 - 5672:5672 volumes: - ./data:/var/lib/rab

月守护的博客 2631

RabbitMQ——Hello World

文章目录1、RabbitMQ四个核心概念1.1、四大核心概念1.2、各个名词介绍1.3、安装2、Hello World2.1、依赖2.2、消息生产者 1、RabbitMQ四个核心概念 RabbitMQ 是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑 RabbitMQ 是一个快递站,一个快递员帮你传递快件。 RabbitMQ 与快递站的主要区别在于,它不处理快件而是接收,存储和转发消息数据。 1.

前尘忆梦的博客 971

3. RabbitMQ 的(Hello World) 和 RabbitMQ 的(Work Queues)工作队列

在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。

weixin_61635597的博客 1494

RabbitMQ - 第一个 Hello World 程序:Java 版快速实现

RabbitMQ入门指南:Java实现Hello World 本文介绍了使用Java实现RabbitMQ基础消息队列的快速入门方法。首先概述了RabbitMQ的核心概念和优势,包括生产者、消费者、队列等组件的作用。然后详细讲解了环境准备步骤,推荐使用Docker安装RabbitMQ服务端。文章提供了完整的Maven项目配置,并展示了生产者和消费者的基础实现代码,通过简单的"Hello World"消息传递演示了RabbitMQ的基本工作流程。代码注释详细解释了每个关键步骤的功能,帮助读者

千淘万漉虽辛苦,吹尽狂沙始到金 2万+
上一篇: RabbitMQ在CentOS7上的RPM方式安装
下一篇: RabbitMQ工作队列模式
盖了帽
博客等级 码龄8年 17粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值