译:1. RabbitMQ Java Client 之 Hello World

这些教程介绍了使用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

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

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

相关文章

weblogic问题: Unable to resolve 'jdbc.mydb'. Resolved 'jdbc'; remaining name '

现这个是由于没有找到JNDI 解决方法: 在Weblogic数据源管理中的JDBC Data Source-0的设置中设置目标选项 将服务勾选上,如默认的:AdminServer 保存后即可;

org.xml.sax.SAXParseException: The string -- is not permitted within comments.

当我报这个错的时候,我时这样解决的: 在主目录的bin\startWebLogic.cmd中添加 set JAVA_OPTIONS-Dfile.encodingUTF-8

数据库系列之关键字

http://www.w3school.com.cn/sql/sql_distinct.asp sql_distinct转载于:https://www.cnblogs.com/PrestonL/p/9767110.html

Build path -No action available/classpath .project

从SVN download 下来的项目,发现的.Java 文件和平时的不一样,并且想加入jar 进去的时候没有Java Build Path 的选项,无法链接类的源码,项目也无法发布,这里记录分享: 原因是,在项目里面找到.project &…

Idea和redis的坑

坑1:直接在Idea里面,建TestNG的Test类时,里面的多线程代码,一直会提示报错,没有任何提示,直接就test任务结束。解决方案:使用main建入口的方式进行测试,千万不要使用testng的Test注解…

基于SpringBoot 2.0正式版的SpringCloud的微服务实战项目搭建

Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。 Spring Cloud包含…

StringBuffer的用法

有一次在做项目的时候,发现一处平时都是用String的地方,用上了StringBuffer。不禁疑惑,在网上查了一下,看看他们之间的区别: 初始化: StringBuffer s new StringBuffer(); 此时初始化的对象是一个空对象…

【Docker】安装tomcat并部署应用

安装tomcat 1.拉取tomcat镜像查看镜像部署应用[rootizwz99yhul3o6y7emidjqlz ~]# docker exec -it app bashrootcb526f04d30b:/usr/local/tomcat# lsBUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf include lib …

prompt set feedback set define的详解

prompt 输出后面的信息,类似操作系统的echo命令 SQL>prompt hello world--输出 hello world set feedback 客户端执行SQL时,数据库服务器都会返回反馈信息。如: 创建表时,成功的反馈信息为“Table Created”等 feedback属…

python 学习第四十七天shelve模块

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式。 1,序列化 import shelve fshelve.open(shelve_test) names[www.96net.com.cn,"www.dc3688.com","www.baidu.com&quo…

怎么在oracle中使用for循环

测试打印语句: BEGIN sys.dbms_output.put_line(‘hello world’); END; DECLAREa number(20) :0; BEGINfor i in 1 .. 10 loop--insert into user (name) values(ss i); --写相关sqlsys.dbms_output.put_line(ss || i);end loop;commit; END; 详解&a…

structc 开源框架介绍

引言 - 一切才刚刚开始 structc 是 C 结构基础库. 简单可复用. structc - https://github.com/wangzhione/structc 之前也描述过几次 structc, 文字多代码风格少. 最近加班不多, 准备详细解说哈其思考初衷. 0.0 整体结构 structc ├── extern ├── LICENSE ├── Makefil…

charCodeAt()和charAt()的用法

语法: stringObject.charCodeAt(index) 参数index 必需,第一个字符的下标是0。如果index是负数,或者大于等于字符串的长度,则返回NaN。 作用:返回指定位置的字符的Unicode编码。这个返回值在0~65535之间的整数。 va…

“not a single-group group function”

在使用group by进行分组的时候,select 后面要查询出来的表字段 只用有两种情况: 1、在group by 子句中出现 2、或者写在聚合函数里面,像count(id)等等。 若是没有,select出来的表字段就会报错&#xff0…

jmeter笔记

Jmeter性能测试 入门Jmeter 录制脚本:使用一个叫badbody的工具录制脚步供jmeter使用,http://www.badboy.com.au/;也可以用jmeter来录制Jmeter教程 简单的压力测试linux环境jmeter测试probe监控tomcat转载于:https://www.cnblogs.com/liqipeng…

在oracle中的日期类型与String类型

to_date()作用是将字符类转化为日期类型。 具体用法:to_date(”2004-11-27”,”yyyy-mm-dd”),前者为字符串,后者为转换日期格式。 to_date(”2004-11-27 13:34:43”, ”yyyy-mm-dd hh24:mi:ss”) 将得到具体的时间 to_char()作用将日期转按一定格式换…

CSS颜色

CSS的颜色可以通过以下方法指定: 十六进制颜色RGB颜色RGBA颜色HSL色彩HSLA颜色 十六进制颜色 指定一个十六进制的颜色其组成部分是:#RRGGBB,其中RR(红色),GG(绿色)和BB(蓝…

URI 和 URL 的区别

URI : 统一资源标识符(Uniform Resource Identifier)是一个用于标识,某一互联网资源名称的字符串。 Web上可用的每种资源 -HTML文档、图像、视频片段、程序等 - 由一个通用资源标识符(Uniform Resource Identifier, 简称”URI”)进…

CAN总线(1)--初探(更新中)

前言: CAN总线可以控制可以使用Xilinx中IP核来直接实现,也可以使用专用的CAN芯片(例如:SJA1000)通过单片机和FPGA驱动控制来实现; 目前是使用控制器SJA1000来进行实现; CAN总线控制器-SJA1000 结…

使用encodeURl()进行编解码

encodeURI() 函数可把字符串作为 URI 进行编码。 在js中要使用两次编码: var name encodeURI(encodeURI(name)); 在java中解码: String name URLDecoder.decode(request.getParameter("name"), "UTF-8"); decodeURI() 函数 :…