这些教程介绍了使用RabbitMQ创建消息传递应用程序的基础知识。您需要安装RabbitMQ服务器才能完成教程

1. 打造第一个Hello World 程序

RabbitMQ是一个消息代理:它接受和转发消息。你可以把它想象成一个邮局:当你把你想要发布的邮件放在邮箱里时,你可以确定先生或女士邮递员最终将邮件发送给你的收件人。

在这个比喻中,RabbitMQ是邮政信箱,邮局和邮递员。

RabbitMQ和邮局的主要区别在于它不处理纸张,而是接受,存储和转发二进制数据块 - 消息。

英文原文地址:https://www.rabbitmq.com/tutorials/tutorial-one-java.html

2 "Hello World"使用 Java 客户端

在本教程的这一部分中,我们将用Java编写两个程序; 一个发送单个消息的生产者,以及接收消息并将其打印出来的消费者。

我们将详细介绍Java API中的一些细节,专注于这个非常简单的事情,以便开始使用。 这是一个消息传递的“Hello World”。

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

RabbitMQ 有许多不同语言的RabbitMQ客户端。 这里我们将使用RabbitMQ提供的Java客户端。

2.1  下载相关依赖Jar 包

下载RabbitMQ提供的Java客户端以及它的依赖(SLF4J API and SLF4J Simple)

将这些文件复制到工作目录中,并跟着教程复制Java文件。

Tips:

RabbitMQ Java客户端也位于中央Maven存储库中,其中包含groupId com.rabbitmq和artifactId amqp-client

请注意SLF4J Simple对于教程来说已经足够了,但是您应该在生产环境中使用像Logback 这样的完整日志库。

关于Maven 等其他下载方式请移步

Java Client

  • On Maven Central: RabbitMQ Java client.
  • Quick download: Binary | Source
  • Javadoc
  • All Java client downloads
  • Older versions

2.2 编写代码

我们拥有Java客户端及其依赖关系,那么我们接下来开始写代码。

由于是学习使用RabbitMQ,我们这里使用 STS 来写这个项目。

1. 打开STS,新建一个名字叫做 RabbitMQ_HelloWorld_Sample  的 Java Project。

2. 新建一个叫做libs的文件夹,我们将上面三个jar 复制到我们的项目中,然后并添加依赖

完成后项目结构如图所示

3. 编写生产者类

我们会打电话给我们的消息发布者(发送者)发送和我们的消息使用者(接收者)Recv。 发布者将连接到RabbitMQ,发送一条消息,然后退出

创建Send.java 文件,关于代码的讲解在注释里:

import java.util.concurrent.TimeoutException;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;public class Send {//设置消息队列的名称private final static String QUEUE_NAME="hello"; public static void main(String[] args) throws java.io.IOException, TimeoutException{ /** * 创建一个到RabbitMQ Server 的连接 * 连接抽象出套接字连接,并为我们处理协议版本协商和身份验证等。 * 在这里,我们连接到本地机器上的代理 - 因此是本地主机。 * 如果我们想连接到另一台机器上的代理,我们只需在此指定其名称或IP地址。 * */ ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); /** * 接下来我们创建一个Channel 对象,这是大部分用于完成任务的API驻留的地方。 * 要想发送出去,我们必须声明一个队列来执行发送,那么我们可以将消息发布到队列中: * */ 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 + "'"); //最后我们关闭这些连接对象  channel.close(); connection.close(); } } 

执行成功后你将看到这样的内容:

Tips: ,

如果这是您第一次使用RabbitMQ,并且您没有看到“已发送”消息,那么您可能会抓住您的头脑,想知道会出现什么问题?

也许代理启动时没有足够的可用磁盘空间(默认情况下它至少需要200 MB空闲空间),因此拒绝接受消息。

检查代理日志文件以确认并在必要时减少限制。 配置文件文档将告诉你如何设置disk_free_limit。

还有一种可能是你的RabbitMQ 没有启动,执行下面命令再次尝试即可。

rabbitmq-service.bat start

 4. 编写消费者

这就是我们的出版商。 我们的消费者推送来自RabbitMQ的消息,因此与发布单个消息的发布者不同,我们将继续运行以收听消息并将其打印出来。

创建一个Recv.java 文件,代码讲解在注释里面

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;import java.io.IOException;
import java.util.concurrent.TimeoutException;import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel; import com.rabbitmq.client.Consumer; import com.rabbitmq.client.DefaultConsumer; import com.rabbitmq.client.Envelope; /** * 消费者 * 额外的DefaultConsumer是一个实现Consumer接口的类,我们将使用它来缓存由服务器推送给我们的消息。 * */ public class Recv { private final static String QUEUE_NAME="hello"; public static void main(String[] args) throws IOException, TimeoutException { /** * 设置与发布者相同; * 我们打开一个连接和一个通道,并声明我们将要使用的队列。 * 请注意,这与发送发布到的队列相匹配 * */ 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"); /** * 我们即将告诉服务器将队列中的消息传递给我们。 * 由于它会异步推送消息,因此我们以对象的形式提供回调,该消息将缓冲消息,直到我们准备好使用它们。 * 这是一个DefaultConsumer子类的作用。 * */ Consumer consumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String message = new String(body, "UTF-8"); System.out.println(" [x] Received '" + message + "'"); } }; channel.basicConsume(QUEUE_NAME, true, consumer); } }

执行成功后

我们可以看到我们的消费者收到了消息队列生产者刚发布的消息。

本篇完~

转载于:https://www.cnblogs.com/xingyunblog/p/9761344.html

译:1. RabbitMQ Java Client 之 Hello World相关推荐

  1. 译:6.RabbitMQ Java Client 之 Remote procedure call (RPC,远程过程调用)

    在  译:2. RabbitMQ 之Work Queues (工作队列)  我们学习了如何使用工作队列在多个工作人员之间分配耗时的任务. 但是如果我们需要在远程计算机上运行一个函数并等待结果呢?嗯,这 ...

  2. rabbitmq+topic+java_译:5.RabbitMQ Java Client 之 Topics (主题)

    我们使用的是direct(直接交换),而不是使用只能进行虚拟广播的 fanout(扇出交换),并且有可能选择性地接收日志. 虽然使用direct(直接交换)改进了我们的系统,但它仍然有局限性 - 它不 ...

  3. (RabbitMQ) Java Client API Guide

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 本篇翻译的是RabbitMQ官方文档关 ...

  4. mq 接口 java_Rabbitmq Java Client Api详解

    AMQP AMQP协议是一个高级抽象层消息通信协议,RabbitMQ是AMQP协议的实现. 基础概念快速入门 每个rabbitmq-server叫做一个Broker,等着tcp连接进入. 在rabbi ...

  5. Rabbitmq java.util.concurrent.TimeoutException小问题解决

    最近在研究rabbitmq的各个工作模式时. 出现了一个rabbitmq java.util.concurrent.TimeoutException异常 java.util.concurrent.Ti ...

  6. MemCached java client 1.5.1 性能测试

    去年,我曾经多 1.3.2 版本的 java client 很不满意,具体见 http://hi.baidu.com/jabber/blog/category/Memcached 今年,它推出了两个新 ...

  7. [Kerberos] Java client访问kerberos-secured cluster

    使用java client访问kerberos-secured cluster,最重要的是先从admin那里拿到可用的keytab文件,用来作认证.接下来就是调整连接的配置.以下先用连接hdfs为例进 ...

  8. java thrift client_使用thrift的java client调用python server

    上面这篇文章的例子是使用java client调用python server中的helloString方法来打印client传输过去的字符串 thrift文件,hello.thrift service ...

  9. MariaDB Java Client 1.1.0 发布

    MariaDB Java Client 1.1.0 发布了,该版本主要是修复数据源 metadata 相关的 bug,以及和 ConnectorJ 不兼容的地方,值得关注的有: 保存和 Connect ...

最新文章

  1. 产品经理必备知识之网页设计系列(一)-创建出色用户体验
  2. ubuntu/Linux下 提示“conda:未找到命令”
  3. boost::function_types::function_arity用法的测试程序
  4. hibernate正向生成数据库表以及配置——Teacher.java
  5. redis 系列17 持久化 AOF
  6. STM32工作笔记0027---理解电阻的串联和并联
  7. 关于ASP调用.net WebService 的标准例子
  8. C# 仿windows资源管理器
  9. Educoder:JavaScript学习手册十一:JSON
  10. 【方向盘】“江郎才尽”的周杰伦,出道已21周年
  11. 如何免费将一个PDF拆分成多个文件?
  12. 【html】网页常用分享代码大全(前端必备)
  13. c语言可编写的游戏,占卜子女兴盛大全篇
  14. php 磁盘配额,samba服务器安装+磁盘配额笔记
  15. 一条大蟒蛇和一条小毒蛇
  16. 脉冲星测时软件TEMPO2安装
  17. “桥接”和“NAT”方式区别
  18. 致远OA合并处理策略
  19. pta 7-29 螺旋矩阵
  20. 零基础也能用ChatGPT写代码,简直不要太爽

热门文章

  1. php mysql group by_php – 如何在mysql查询中解决“不在GROUP BY中”错误
  2. linux 文件怎么不让删,请问如何设置权限,可以禁止用户删除文件
  3. Java并发编程实战————可重入内置锁
  4. uds帧格式_如何看懂UDS诊断报文
  5. python中文本文件r_Python如何读写文本文件
  6. 如何设置oracle_home变量,oracle-如何在Ubuntu 9.x上正确设置ORACLE_HOME变量?
  7. ROS基本概念 文件系统 创建ROS软件包 ROS中的一些命令
  8. (BFS)Catch That Cow(poj3278)
  9. 功率谱 幅值谱_语音合成中的Mel谱和MFCC谱无区别
  10. python 子线程返回值_python-从线程返回值