RabbitMQ实例教程:Hello RabbitMQ World之Java实现

  RabbitMQ要实现Hello World,其实也很简单。只需一个服务器来发送消息,另外有个客户端接收消息即可。

  整体的设计流程如下:

  消息生产者发送Hello到消息队列,消息消费者从队列中接收消息。

  下载依赖Jar包

  RabbitMQ要用Java实现发送消息,就必须使用Java客户端库。目前RabbizMQ的Java客户端库最新版为为 3.5.5 。可以从Maven仓库下载,也可以直接去官网下载

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

  使用Java创建发送者


package com.favccxx.favrabbit;

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

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

public class Sender {

	private final static String QUEUE_NAME = "hello";

	public static void main(String[] argv) 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);
		String message = "Hello RabbitMQ World!";
		channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
		System.out.println(" [x] Sent ‘" + message + "‘");

	}
}

  RabbitMQ控制台监控消息队列

  运行上面的代码,从RabbitMQ控制台就可以看到刚刚发送的消息。

  使用Java接收消息

package com.favccxx.favrabbit;

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

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;

public class Receiver {

	private final static String QUEUE_NAME = "hello";

	public static void main(String[] argv)
			throws java.io.IOException, java.lang.InterruptedException, 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");

		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);
	}
}

  分别运行消息发送者和消息接收者,从RabbitMQ控制台可以看到实时的状况。

  

  到此为止,RabbitMQ的Hello World工作就结束了,是不是对消息队列有了一些好感了呢?

时间: 2024-11-03 20:50:36

RabbitMQ实例教程:Hello RabbitMQ World之Java实现的相关文章

RabbitMQ实例教程:用Java搞定工作队列

在上一节中,我们学会了使用编程的方式发送和接收一个命名好的队列.本节中我们将会使用工作队列在多个工作者之间分发任务. 工作队列的核心思想是避免立即处理高密集度必须等待完成的任务.它采用了安排任务的方式,将一个任务封装成一个消息把它放进队列.在后台运行的工作进程到时候会将它弹出并执行,这样任务队列中的任务就会被工作进程共享执行. 工作队列适用于Web应用中在一个短的HTTP请求中处理复杂任务的场景. 在上节中,我们发送了一个"Hello World!"字符串消息.现在发送多个字符串消息表

RabbitMQ实例教程:发布/订阅者消息队列

消息交换机(Exchange) RabbitMQ消息模型的核心理念是生产者永远不会直接发送任何消息给队列,一般的情况生产者甚至不知道消息应该发送到哪些队列. 相反的,生产者只能发送消息给交换机(Exchange).交换机的作用非常简单,一边接收从生产者发来的消息,另一边把消息推送到队列中.交换机必须清楚的知道消息如何处理它收到的每一条消息.是否应该追加到一个指定的队列?是否应该追加到多个队列?或者是否应该丢弃?这些规则通过交换机的类型进行定义. 交换机的类型有:direct,topic,head

RabbitMQ实例教程:主题交换机

前面的例子中,尽管我们使用了direct路由代替fanout路由解决了盲目广播的问题,但direct路由也有它的缺陷,他不能基于多个标准做路由转发. 在上面的日志系统中,如果不仅想基于日志等级做订阅,也想根据日志的发生源做订阅该怎么处理呢?这时候你可能想到了unix系统工具中的syslog服务,它不仅基于日志等级(info/warn/crit...)进行路由转发,也会根据操作(auth/cron/kern...)做路由转发. 如果是那样的话,日志系统就灵活多了,它不仅能够监听来自'cron'的关

RabbitMQ实例教程:路由选择

在前面的例子中,我们构建了一个简单的日志系统来日志消息通过广播传送到多个接受者.本文将介绍如何订阅消息的子集.比如,我们能够将关键的错误信息写到日志文件中,同时也能够在控制台打印所有的日志消息. 消息绑定(Bindings) 在前面的例子中,我们使用下面的代码方式再次绑定. channel.queueBind(queueName, EXCHANGE_NAME, ""); 绑定表述的是交换机和队列之间的关系,可以理解为队列对交换机中的消息感兴趣. 绑定的参数是 routingKey,为避

RabbitMQ实例教程:Windows下安装RabbitMQ

(1)下载RabbitMQ服务器 从RabbitMQ官网下载最新的稳定版.目前最新版本为3.5.1. (2)移除RabbitMQ老版本. 如果之前安装了老版本的话,或者想要将Erlang VM从32位升级到64位,需要手动卸载RabbitMQ服务器.因为安装过程中并不会停止或移除旧的服务. (3)安装RabbitMQ服务器 从Erlang官网下载Windows安装文件,并安装.RabbitMQ需要这个东西. 运行rabbitmq-server-3.5.1.exe,安装RabbitMQ并使用默认配

centos7 搭建docker内运行单实例rabbitmq的教程

1.安装centos7.x,配置好网络2.因为docker需要比较高版本的内核,比如使用overlayfs作为默认docker文件系统要3.18,所以先升级内核到3.18以上版本,能直接过4是最佳了检查内核uname -r 不够3.18.x的话 升级内核导入key rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgrpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elr

RabbitMQ入门教程

1.下载安装RabbitMQ windows下 先 下载Erlang 64位 其它去这里下载 http://www.erlang.org/downloads 然后 下载RabbitMQ  官网 http://www.rabbitmq.com/install-windows.html rabbitMq jar包  下载地址 maven依赖 <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp

RabbitMQ实例详解+Spring中的MQ使用

RabbitMQ实例详解 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构. Queue Queue(队列)是RabbitMQ的内部对象,用于存储消息,用下图表示. RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费. 多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不

RabbitMQ系列教程之六:远程过程调用(RPC)

远程过程调用(Remote Proceddure call[RPC]) (本实例都是使用的Net的客户端,使用C#编写) 在第二个教程中,我们学习了如何使用工作队列在多个工作实例之间分配耗时的任务. 但是,如果我们需要在远程计算机上运行功能并等待结果怎么办? 那是一个不同的故事. 此模式通常称为远程过程调用或RPC. 在本教程中,我们将使用RabbitMQ构建一个RPC系统:一个客户机和一个可扩展的RPC服务器. 由于我们没有任何值得分发的耗时任务,我们将创建一个返回斐波纳契数字的虚拟RPC服务