RabbitMQ是一个message broker(消息代理),接收生产者产生的消息并发送给接收者,中途可以自定义路由分发,缓存,持久化消息等。下面写个简单的消息发送接收。(不同于ZMQ的消息传递,RabbitMQ在内存中维持了一个高效的队列,消费者还没启动时,消息会被存储到队列中不会丢失)
首先启动RabbitMQ服务(windows启动方法,我这里下载的最新版3.0.1做学习测试)
C:\Program Files\RabbitMQ Server\rabbitmq_server-3.0.1\sbin>rabbitmq-service.bat start bin doc erts-5.9.3.1 lib releases usr C:\Program Files\erl5.9.3.1\erts-5.9.3.1\bin\erlsrv: Service RabbitMQ started.
生产者Send.java
package test; import java.io.IOException; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class Send { public static void main(String[] args) throws IOException { // 创建一个连接连接服务器 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); //factory.setPort(1987); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); // 声明一个队列,可以对队列做配置,如持久化等。然后往队列发送数据 channel.queueDeclare("queue1", false, false, false, null); String message = "test message"; channel.basicPublish("", "queue1", null, message.getBytes()); System.out.println(" [x] Sent '" + message +"'"); channel.close(); connection.close(); } }
消费者Recv.java
package test; import java.io.IOException; import com.rabbitmq.client.Channel; import com.rabbitmq.client.ConsumerCancelledException; import com.rabbitmq.client.QueueingConsumer; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.ShutdownSignalException; public class Recv { public static void main(String[] args) throws IOException, ShutdownSignalException, ConsumerCancelledException, InterruptedException { // 创建一个连接接收数据 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); //factory.setPort(1987); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); // 等待消息 QueueingConsumer consumer = new QueueingConsumer(channel); channel.basicConsume("queue1", true, consumer); while(true){ //nextDelivery阻塞直到收到下一条消息 QueueingConsumer.Delivery delivery = consumer.nextDelivery(); String message = new String(delivery.getBody()); System.out.println(" [x] Received '" + message + "'"); } } }
运行如下:
首先添加环境变量
root # export CLASSPATH=$CLASSPATH:/path/to/rabbitmq-jar root # javac -cp .:* Recv.java Send.java
开启两个终端分别模拟生产者和消费者
root # java -cp .:* Recv [x] Received 'test message' root # java -cp .:* Send [x] Sent 'test message'
注:磁盘剩余空间需要至少1Gb,不然会提示 connection refused ,这个剩余空间大小可以配置
root # java -cp .:* Recv Exception in thread "main" java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:529) at com.rabbitmq.client.ConnectionFactory.createFrameHandler(ConnectionFactory.java:445) at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:504) at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:533) at Recv.main(Recv.java:15)
相关推荐
学习RabbitMQ的学习笔记
《RabbitMQ实战Java版——基于rabbitMQ-demo.zip的详解》 在当今的分布式系统中,消息队列作为异步处理、解耦组件的关键技术,得到了广泛应用。RabbitMQ作为一款开源的消息代理和队列服务器,以其稳定性和易用性...
RabbitMQ客户连接池的Java实现。我们刚开始也是采用这种方式来实现的,但做压力测试时,发现这种每次新建Connection和新建Channel是非常耗时的,在大并发下,一般都要8毫秒左右,慢的话,好多都是几十毫秒。因此我们...
本项目是一款基于Java语言的RabbitMQ学习与实践设计源码,共计78个文件,涵盖29个Java源文件、14个Markdown文档、8个XML配置文件、5个属性文件、4个Git忽略规则文件、4个命令行脚本文件、3个JAR包文件、2个PNG图片...
在IT行业中,消息队列(Message Queue)是一种重要的中间件技术,它允许...在这个简单的demo中,我们学习了如何创建连接、声明交换机和队列、发送和接收消息,这些都是RabbitMQ的基础操作,为更高级的用法打下了基础。
在Java开发中,RabbitMQ是一个非常流行的开源消息队列系统,它基于AMQP(Advanced Message Queuing Protocol)协议,提供了高效、可靠的异步通信能力。在这个场景中,"java rabbitmq动态注册,监听实现"涉及到的主要...
它涵盖了连接管理、消息发送与接收的基本流程,对于学习和理解RabbitMQ在Java环境下的应用非常有帮助。在实际开发中,你可以根据项目需求调整这些示例,例如增加错误处理、消息确认机制、使用工作队列模型等,以实现...
首先,`MQSubscribeService.java`代表的是订阅者服务,它是接收和处理来自RabbitMQ的消息的组件。在封装订阅者线程时,通常会包括以下关键知识点: 1. **创建连接和通道**:使用`ConnectionFactory`创建与RabbitMQ...
rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ...
【Java使用RabbitMQ服务】 RabbitMQ是一款开源的消息队列系统,广泛应用于分布式系统中的消息传递。本文将简要介绍如何在Java环境中使用RabbitMQ,包括安装、基本结构、消息发送模式以及高级特性。 ### 1. 安装 在...
在Java开发中,RabbitMQ是一个非常流行的开源消息队列系统,它基于AMQP(Advanced Message Queuing Protocol)协议,用于高效地处理异步任务和解耦系统组件。`RabbitmqUtil` 是一个专门为Java开发者设计的工具类,...
Java版本的RabbitMQ实例是...这个Java版本的RabbitMQ实例是学习如何在Java项目中集成消息队列的宝贵资源。通过它,开发者可以掌握RabbitMQ的核心概念,以及如何在实际场景中利用这些概念构建健壮的、可扩展的应用程序。
Java全能学习面试手册——Java面试题库.zip 01 7道消息队列ActiveMQ面试题!.pdf 02 10道Java高级必备的Netty面试题!.pdf 03 10道Java面试必备的设计模式面试题!.pdf 04 10个Java经典的List面试题!.pdf 05 10个...
javaAPI SpringMVC 集成rabbitMQ 很全的例子,实现了生产消费,重复消费等功能
在Java开发中,SpringMVC框架常用于构建Web应用程序,而RabbitMQ是一个流行的开源消息队列系统,基于Advanced Message Queuing Protocol (AMQP)。本文将深入探讨如何使用Java API和SpringMVC来集成RabbitMQ,实现...
RabbitMQ 三种Exchange.wps————————三种exchange解释及代码 rabbitmq结构.wps————————rabbitmq架构简介 rabbitmq入门.pdf——————入门的文档 RabbitMQ研究与应用.pdf——————简单的研究
要开始使用RabbitMQ,我们需要在Java项目中添加RabbitMQ的Java客户端库——`rabbitmq-client.jar`。这可以通过Maven或Gradle的依赖管理工具轻松完成。例如,在Maven的`pom.xml`文件中添加以下依赖: ```xml ...
### Java中间件之RabbitMQ详解 #### 一、RabbitMQ简介 ##### 1.1 RabbitMQ是什么 RabbitMQ是一款开源的消息中间件,基于AMQP (Advanced Message Queuing Protocol) 协议构建,主要使用Erlang语言编写。RabbitMQ...
在提供的压缩包文件`rabbitmq_direct`中,可能包含了实现上述功能的源代码,包括Spring Boot项目的结构、配置文件、发送和接收消息的Java类等。读者可以下载这个文件,根据说明运行代码,以更好地理解和实践RabbitMQ...
这份"java面试——SpringCloud面试专题.zip"资源很可能包含了关于Spring Cloud的深度面试指南,旨在帮助求职者准备Spring Cloud相关的技术问题。以下是对Spring Cloud关键知识点的详细解析: 1. **Spring Cloud概述...