RabbitMQ入门教程 For Java【1】 - Hello World

RabbitMQ官方入门教程中文版(java)第一部分 Hello World RabbitMQ是一种消息中间件:简单来说,它可以负责接收和发送消息。你可以把RabbitMQ想象成是一个邮局:当你想寄一封信的时候你会把信放进邮箱里,因为你确信邮递员会帮你把这封信送到收件人的手中。在这个比喻中,RabbitMQ扮演的就是邮箱,邮局和邮递员这样的角色。 要说起RabbitMQ和邮局最大的不同,那应该是MQ并不是处理纸质信息,取而代之的是负责接收,存储和发送二进制数据块——或者是... 阅读详情

RabbitMQ入门教程 For Java【1】 - Hello World

       RabbitMQ是消息代理。从本质上说,它接受来自生产者的信息,并将它们传递给消费者。在两者之间,它可以根据你给它的路由,缓冲规则进行传递消息。
       如果你的工作中需要用到RabbitMQ,那么我建议你先在电脑上安装好RabbitMQ服务器,然后打开eclipse,跟这我的教程一步步的学习RabbitMQ,这样你会对RabbitMQ有一个全面的认识,而且能打好一个很好的基础。如果你只是了解一下,那就随便看看吧。

我的开发环境:

操作系统:Windows7 64bit 

开发环境: JDK 1.7 - 1.7.0_55

开发工具: Eclipse Kepler SR2

RabbitMQ版本:  3.6.0

Elang版本: erl7.2.1

关于Windows7下安装RabbitMQ的教程请先在网上找一下,有空我再补安装教程。

源码地址

https://github.com/chwshuang/rabbitmq.Git


一、专业术语

1. 生产者:


       在现实生活中就好比制造商品的工厂,他们是商品的生产者。生产者只意味着发送。发送消息的程序称之为一个生产者。我们用“P”表示: 


2. 队列:

        队列就像存放商品的仓库或者商店,是生产商品的工厂和购买商品的用户之间的中转站。队列就像是一个仓库或者流水线。在RabbitMQ中,信息流从你的应用程序出发,来到RabbitMQ的队列,所有信息可以只存储在一个队列中。队列可以存储很多的消息,因为它基本上是一个无限制的缓冲区,前提是你的机器有足够的存储空间。多个生产者可以将消息发送到同一个队列中,多个消费者也可以只从同一个队列接收数据。这就是队列的特性。队列用下面的图表示,图上面是队列的名字: 


3. 消费者

        消费者就好比是从商店购买或从仓库取走商品的人,消费的意思就是接收。消费者是一个程序,主要是等待接收消息。我们的用“C”表示 



注意:

        生产者,消费者和队列(RabbitMQ)不必部署在同一台机器上。实际在生产环境的大多数应用中,他们都是分开部署的。




二、“Hello World”

1. 说明

        在本教程中,我们我们通过2个java程序,一个发送消息的生产者,和一个接收信息并打印的消费者。想要了解rabbitmq,必须了解一些最基础的内容,我们先从一些代码片段来了解产生信息和接收消息的流程和方法。在编写代码前,我们先来用户一张图表示要做的事,在下图中,“P”是我们的生产者,“C”是我们的消费者。在中间红色框是代表RabbitMQ中的一个消息队列。箭头指向表示信息流的方向。 

                                                                                                                                                    


2. 项目目录 

        在eclipse中创建一个rabbitmq的Java项目,然后在项目下建一个名为lib的source folder, 然后将rabbitmq官网下载的rabbitmq-java-client-bin-3.6.0.rar解压出rabbitmq-client.jar拷贝到lib目录,如果创建的是Maven项目,只需要添加如下依赖:

[plain]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. <dependencies>  
  2.         <dependency>  
  3.             <groupId>com.rabbitmq</groupId>  
  4.             <artifactId>amqp-client</artifactId>  
  5.             <version>3.6.0</version>  
  6.         </dependency>  
  7.         ... ...  
  8.     </dependencies>  

然后在src目录下创建一个com.aitongyi.rabbit.helloworld包,最后项目目录如下:




3.  消息生产者


[plain]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. import com.rabbitmq.client.Channel;  
  2. import com.rabbitmq.client.Connection;  
  3. import com.rabbitmq.client.ConnectionFactory;  
  4.   
  5. /**  
  6.  * 消息生产者  
  7.  *   
  8.  * @author hushuang  
  9.  *   
  10.  */  
  11. public class P {  
  12.   
  13.     private final static String QUEUE_NAME = "hello";  
  14.   
  15.     public static void main(String[] argv) throws Exception {  
  16.         // 创建连接工厂  
  17.         ConnectionFactory factory = new ConnectionFactory();  
  18. //      设置RabbitMQ地址  
  19.         factory.setHost("localhost");  
  20. //      创建一个新的连接  
  21.         Connection connection = factory.newConnection();  
  22. //      创建一个频道  
  23.         Channel channel = connection.createChannel();  
  24. //      声明一个队列 -- 在RabbitMQ中,队列声明是幂等性的(一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同),也就是说,如果不存在,就创建,如果存在,不会对已经存在的队列产生任何影响。   
  25.         channel.queueDeclare(QUEUE_NAME, false, false, false, null);  
  26.         String message = "Hello World!";  
  27. //      发送消息到队列中  
  28.         channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));  
  29.         System.out.println("P [x] Sent '" + message + "'");  
  30. //      关闭频道和连接  
  31.         channel.close();  
  32.         connection.close();  
  33.     }  
  34. }  




4. 消息消费者


[plain]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. import com.rabbitmq.client.*;  
  2. import java.io.IOException;  
  3.   
  4. /**  
  5.  * 消息消费者  
  6.  *   
  7.  * @author hushuang  
  8.  *   
  9.  */  
  10. public class C {  
  11.   
  12.     private final static String QUEUE_NAME = "hello";  
  13.   
  14.     public static void main(String[] argv) throws Exception {  
  15.         // 创建连接工厂  
  16.         ConnectionFactory factory = new ConnectionFactory();  
  17. //      设置RabbitMQ地址  
  18.         factory.setHost("localhost");  
  19. //      创建一个新的连接  
  20.         Connection connection = factory.newConnection();  
  21. //      创建一个频道  
  22.         Channel channel = connection.createChannel();  
  23. //      声明要关注的队列 -- 在RabbitMQ中,队列声明是幂等性的(一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同),也就是说,如果不存在,就创建,如果存在,不会对已经存在的队列产生任何影响。  
  24.         channel.queueDeclare(QUEUE_NAME, false, false, false, null);  
  25.         System.out.println("C [*] Waiting for messages. To exit press CTRL+C");  
  26. //      DefaultConsumer类实现了Consumer接口,通过传入一个频道,告诉服务器我们需要那个频道的消息,如果频道中有消息,就会执行回调函数handleDelivery  
  27.         Consumer consumer = new DefaultConsumer(channel) {  
  28.             @Override  
  29.             public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {  
  30.                 String message = new String(body, "UTF-8");  
  31.                 System.out.println("C [x] Received '" + message + "'");  
  32.             }  
  33.         };  
  34. //      自动回复队列应答 -- RabbitMQ中的消息确认机制,后面章节会详细讲解  
  35.         channel.basicConsume(QUEUE_NAME, true, consumer);  
  36.     }  
  37. }  



5. 运行测试


        如果在windows7下,你需要先双击【RabbitMQ Server\rabbitmq_server-3.6.0\sbin】目录下的rabbitmq-server.bat,来启动RabbitMQ服务。负责,运行我们的程序时,会提示【java.net.ConnectException: Connection refused: connect】

C [*] Waiting for messages. To exit press CTRL+CC [x] Received 'Hello World!'
        先运行消费者服务器来关注【hello】这个队列的情况。

[plain]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. C [*] Waiting for messages. To exit press CTRL+C  

C [*] Waiting for messages. To exit press CTRL+CC [x] Received 'Hello World!'
        然后再运行生产者端,发送消息到队列中:

[plain]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. P [x] Sent 'Hello World!'  

C [*] Waiting for messages. To exit press CTRL+CC [x] Received 'Hello World!'
        再切换到消费者端的控制台,查看日志:

[plain]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. C [*] Waiting for messages. To exit press CTRL+C  
  2. C [x] Received 'Hello World!'  


6. 总结

        从上面的日志,我们就算是对RabbitMQ 的消息流有了一个基本的了解,如果你想更进一步,请进入到第二章-Work Queues的教程


本教程所有文章:

RabbitMQ入门教程 For Java【1】 - Hello World  - 你好世界! 

RabbitMQ入门教程 For Java【2】 - Work Queues   - 工作队列

RabbitMQ入门教程 For Java【3】 - Publish/Subscribe - 发布/订阅

RabbitMQ入门教程 For Java【4】 - Routing -  消息路由

RabbitMQ入门教程 For Java【5】 - Topic  -  模糊匹配

RabbitMQ入门教程 For Java【6】 - Remote procedure call (RPC) - 远程调用



提示

由于本教程中rabbitmq是在本机安装,使用的是默认端口(5672)。 
如果你的例子运行中的主机、端口不同,请进行必要设置,否则可能无法运行。
如果你对rabbitmq有更多想法,可以通过GitHub项目成员找到我们的邮件地址联系他们:https://github.com/orgs/rabbitmq/people
RabbitMQ入门教程(三):Hello World Hello World示例功能简介功能描述:生产者将消息发送到队列(队列的名字为hello)中,消费者从队列中获取消息。一:生产者首先引入RabbitMQ的Java客户端依赖&lt;dependency&gt; &lt;groupId&gt;com.rabbitmq&lt;/groupId&gt; &lt;artifactId&gt;amqp-client&lt;/artifactId&gt; &lt;ver 阅读详情

相关推荐

等保: Postgresql配置ssl链接

等保: postgresql配置ssl链接完整方案和避坑指南

weixin_43557605的博客 4382

RabbitMQ的使用

1、MQ是什么 MQ: Message Quene 消息队列 队列: 一种数据结构,先进先出 消息队列: 本质是个队列,只不过存放的是消息而已 消息中间件: 简单来说就是用来传输消息的中间载体 MQ的作用: 流量消峰(解决高并发) 模块之间的异步通信 MQ的框架很多,比如ActiveMQ,RabbitMQ,RocketMQ,kafka,而我们使用的就是RabbitMQ 2、Rabbit...

X_Q_B_J的博客 1269

从零开始用飞牛fnas搭建集成DeepSeek-R1的远程AI工作台

从零开始用飞牛fnas搭建集成DeepSeek-R1的远程AI工作台

AI+全栈,AI+应用,实操落地,前沿技术 3807

RabbitMQ 入门教程看这一篇就够了

RabbitMQ是一个开源的,在AMQP基础上完整的,可复用的企业消息系统。支持主流的操作系统,Linux、Windows、MacOX等多种开发语言支持,Java、Python、Ruby、.NET、PHP、C/C++、node.js等AMQP,即 Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

程序员子龙 554

FastDDS之共享内存

transport层负责为DDS用户数据收发和服务发现提供通信。包含UDP,TCP,SHM。

u010378559的博客 3086

Rocky Linux 9 离线环境Docker部署全攻略:从依赖打包到服务启动

本文详细介绍了在Rocky Linux 9纯离线环境中部署Docker的完整流程。从在联网环境精准下载Docker静态二进制包及所有系统依赖RPM包,到在隔离服务器上按顺序安装依赖、部署二进制文件、配置systemd服务并进行权限与网络调优,提供了从零到一的可复现实战指南。文章重点解决了离线部署的核心难题,并分享了搭建私有镜像仓库等进阶技巧,是运维人员在严格网络管控环境下部署容器服务的必备参考。

pytorchlight8的博客 138

RabbitMQ使用教程

RabbitMQ使用教程,一文解决入门难题

Mr. Wu's blog 1万+

高通平台power_supply 框架下添加第三方充电IC的驱动方法

1.power_supply电源框架介绍: power supply framework在kernel/drivers/power/下。内核抽象出来power supply子系统为驱动提供了统一的框架。 功能包括: 1.抽象PSY设备的共性,向用户空间提供统一的API; 2.为底层PSY驱动的编写,提供简单、统一的方式,同时封装并实现公共逻辑。 power supply class位于d...

Change 1万+

RibbitMQ 实战教程

dfghjkl;'

Hbernet的博客 695

使用Metasploit生成木马控制Windows系统

使用Metasploit生成木马控制Windows系统

weixin_56956399的博客 2508

手把手教你学simulink(16.2)--基于Simulink的高通滤波器(High-Pass Filter)项目

基于Simulink的高通滤波器(High-Pass Filter)项目的详细实例介绍。这个项目将重点放在高通滤波器的设计、实现和仿真上,帮助你理解和应用高通滤波器在信号处理中的作用。

MHD0815的博客 926

硬核,RabbitMQ入门使用教程,详细到哭

RabbitMQ 简介 RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、 安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在

Javanewspaper的博客 1万+

ML.NET在工业上位机中的深度应用:如何用C#实现10ms级预测推理?

模型要“够用就好”:工业场景的规律往往不复杂,别迷信深度学习,FastTree、线性模型足够应付80%的场景,且速度快3-5倍;预处理“能省就省”:离线做90%的特征工程,实时只处理动态变化的10%,这是突破10ms的关键;代码“贴近硬件”:用struct、数组池、SIMD等“非托管技巧”写C#,避免GC成为实时性瓶颈;测试“模拟极端”:在目标工控机上用100%负载(同时跑PLC通信、运动控制、视觉检测)测试推理延迟,确保极端情况下仍达标。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 742

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

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

weixin_62421895的博客 1088

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

大葱敏的博客 7562

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

RabbitMQ通讯方式第一讲:Hello World

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

hdk5855的博客 752

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

RabbitMQ (消息队列)专题学习02 Hello World

基于RabbitMQ实现HelloWorld入门级实例,详细的步骤解释以及原理解析

u014548782的专栏 1901

1. RabbitMQ之Hello World

文章目录1. 消息队列作用2. 消息队列分类3. RabbitMQ工作原理4. RabbitMQ服务器安装5. HelloWorld程序 RabbitMQ消息队列本质上是一个先进先出的队列。 1. 消息队列作用 1. 流量消峰 举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正 常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订单超过一万后不允许用户下单。使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时

u010502101的博客 681

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

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

weixin_61635597的博客 1494

RabbitMQ入门:“hello world”

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

weixin_46250898的博客 538

java调用rabbitmq_RabbitMQ实例教程:Hello RabbitMQ World之Java实现

RabbitMQ要实现Hello World,其实也很简单。只需一个服务器来发送消息,另外有个客户端接收消息即可。整体的设计流程如下:消息生产者发送Hello到消息队列,消息消费者从队列中接收消息。下载依赖Jar包RabbitMQ要用Java实现发送消息,就必须使用Java客户端库。目前RabbizMQ的Java客户端库最新版为为 3.5.5 。可以从Maven仓库下载,也可以直接去官网下载。co...

weixin_33452735的博客 220

RabbitMQ 实战教程(一) Hello World

准备 本教程假定 RabbitMQ 已在标准端口(5672) 的 localhost 上安装并运行。如果使用不同的主机,端口或凭据,连接设置将需要调整。 介绍 RabbitMQ 是一个消息代理:它接受并转发消息。你可以将其视为邮局:当你将要发布的邮件放在邮箱中时,您可以确信 Postman 先生最终会将邮件发送给收件人。在这个比喻中,RabbitMQ 是一个邮箱,邮局和邮递员。 Rabbi...

咖啡的博客 545
上一篇: 最近研究RabbitMQ的一些心得
下一篇: RabbitMQ使用简记
赢阡
博客等级 码龄10年 6粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值