译: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,一经查实,立即删除!

相关文章

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

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

structc 开源框架介绍

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

CSS颜色

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

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

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

如何给代码自动添加注释?

丰富的注释和良好的代码规范,对于代码的阅读性和可维护性起着至关重要的作用。几乎每个公司对这的要求还是比较严格的,往往会形成自己的一套编码规范。但是再实施过程中,如果全靠手动完成,不仅效率低下,还难以保证真正…

js第一天

1.JS介绍 全称叫JavaScript,但不是Java,js是一门前台语言,而Java是后台语言。 js的作者是布兰登.艾奇 前台语言:运行在客户端的 后台语言:跟数据库有关 2.JS可以干什么? 页面特效,开发页面游戏&…

Ubuntu 如何为 XMind 添加快速启动方式和图标

目录 Ubuntu 如何为 XMind 添加快速启动方式和图标Ubuntu 如何为 XMind 添加快速启动方式和图标 按照教程Ubuntu16.04LTS安装XMind8并创建运行图标进行Xmind安装 下载安装包打开~/Download文件夹,解压.zip压缩包,之后在解压的文件夹中打开终端&#xff0…

Luogu P4205 [NOI2005]智慧珠游戏

P4205 [NOI2005]智慧珠游戏 题意 题目描述 智慧珠游戏拼盘由一个三角形盘件和\(12\)个形态各异的零件组成。拼盘的盘 件如图\(1\)所示 对于由珠子构成的零件,可以放到盘件的任一位置,条件是能有地方放,且尺寸合适,所有的零件都允许…

Spring Boot + Spring Cloud 构建微服务系统(三):服务消费和负载(Feign)

Spring Cloud Feign Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端。它使得编写Web服务客户端变得更加简单。我们只需要通过创建接口并用注解来配置它既可完成对Web服务接口的绑定。它具备可插拔的注解支持,包括Feign注解、JAX-RS注解。它也…

Scrapy突破反爬虫的限制

7-1 爬虫和反爬的对抗过程以及策略基本概念爬虫:自动获取网站数据的程序,关键是批量的获取反爬虫:使用技术手段防止爬虫程序的方法误伤:反爬技术将普通用户识别为爬虫,如果误伤过高,效果再好也不能用一般ip…

wpf控件

控件——载应用程序上与用户进行交互的元素 所有的控件都是继承自System.windows.Control类,该类提供了一些基本的属性 1、 设置控件对齐方式 2、 设置Tab键顺序 3、 支持绘制背景,前景和边框 4、 支持格式化文本内容的尺寸和字体 Background&#xff1a…

BZOJ1500 [NOI2005]维修数列(Splay tree)

[Submit][Status][Discuss]Description 请写一个程序,要求维护一个数列,支持以下 6 种操作:请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列…

如何解决SVN 清理失败

解决方法: 下载 sqlite3.exe 在你的清理失败的路径下查看.svn目录下是否存在一个wc.db文件,把解压好的sqlite3.exe 放在wc.db文件的同一路径下 注意:主要是用sqlite3.exe清理掉wc.db中的相关信息。 通过cmd命令行进入你清理失败的路径&am…

10-Linux与windows文件互传-pscp坑---- 'pscp' 不是内部或外部命令,也不是可运行的程序或批处理文件...

1.下载pscp工具http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html2.拷贝到C:\Windows\System32 如果考到其他文件夹,运行提示 pscp 不是内部或外部命令,也不是可运行的程序或批处理文件。 那么考到这个文件下吧!&#xff0…

MongoDB最简单的入门教程之三 使用Java代码往MongoDB里插入数据

前两篇教程我们介绍了如何搭建MongoDB的本地环境: MongoDB最简单的入门教程之一 环境搭建 以及如何用nodejs读取MongoDB里的记录: MongoDB最简单的入门教程之二 使用nodejs访问MongoDB 这篇教程我们会介绍如何使用Java代码来连接MongoDB。 如果您是基于M…

C点滴成海------Dev C++怎么修改成简体中文

第一步:选择菜单中的Tools 第二步:选择Tools中的“Envirnoment Options”,即第二个选项 第三步:选择中文并保存 将"1"的语言改成中文就行了 转载于:https://www.cnblogs.com/hahayixiao/p/9824080.html

MacOS下安装BeautifulSoup库及使用

BeautifulSoup简介 BeautifulSoup库是一个强大的python第三方库,它可以解析html进行解析,并提取信息。 安装BeautifulSoup 打开终端,输入命令:pip3 install beautifulsoup4 BeautifulSoup库小测 小测用到的html页面地址&#xff1…

P4 类、对象、类成员简介

本节内容 类(class)是显示世界事物的模型。 现实中的一架飞机>>>抽象为程序世界中的类 类与对象的关系 对象也叫做实例,是类经过实例化得到的内存中的事宜 有些类不能被实例化,如数学,我们不能说一个数学依照…

PhpStorm之操作数据库

对数据库进行基本的操作 还不清楚如何使用PhpStorm连接本地数据库的朋友看一下我的上一篇博客配置数据库连接点击已经连接好的数据库,找到下图中的 Consoles,然后点击 console(default) 3.在完成上面的操作后,就会发现在编辑器的主页面出现了…

linux的一些基本命令

一、linux的一些基本命令(使用的是CentOS7系统): 1、创建用户组,创建新用户并添加到用户组 添加用户,添加用户组命令: 增加用户:useradd -d /usr/username -m username    为用户增加密码&a…