`

Java学习——rabbitmq(simple)

 
阅读更多

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)
分享到:
评论

相关推荐

    MQ消息队列之——RabbitMQ

    学习RabbitMQ的学习笔记

    rabbitMQ实战java版-rabbitMQ-demo.zip

    《RabbitMQ实战Java版——基于rabbitMQ-demo.zip的详解》 在当今的分布式系统中,消息队列作为异步处理、解耦组件的关键技术,得到了广泛应用。RabbitMQ作为一款开源的消息代理和队列服务器,以其稳定性和易用性...

    使用Java编写的RabbitMQ连接池方法

    RabbitMQ客户连接池的Java实现。我们刚开始也是采用这种方式来实现的,但做压力测试时,发现这种每次新建Connection和新建Channel是非常耗时的,在大并发下,一般都要8毫秒左右,慢的话,好多都是几十毫秒。因此我们...

    基于Java语言的RabbitMQ学习与实践设计源码

    本项目是一款基于Java语言的RabbitMQ学习与实践设计源码,共计78个文件,涵盖29个Java源文件、14个Markdown文档、8个XML配置文件、5个属性文件、4个Git忽略规则文件、4个命令行脚本文件、3个JAR包文件、2个PNG图片...

    Java使用RabbitMq的一个简单demo

    在IT行业中,消息队列(Message Queue)是一种重要的中间件技术,它允许...在这个简单的demo中,我们学习了如何创建连接、声明交换机和队列、发送和接收消息,这些都是RabbitMQ的基础操作,为更高级的用法打下了基础。

    java rabbitmq动态注册,监听实现

    在Java开发中,RabbitMQ是一个非常流行的开源消息队列系统,它基于AMQP(Advanced Message Queuing Protocol)协议,提供了高效、可靠的异步通信能力。在这个场景中,"java rabbitmq动态注册,监听实现"涉及到的主要...

    RabbitMQ Java测试客户端

    它涵盖了连接管理、消息发送与接收的基本流程,对于学习和理解RabbitMQ在Java环境下的应用非常有帮助。在实际开发中,你可以根据项目需求调整这些示例,例如增加错误处理、消息确认机制、使用工作队列模型等,以实现...

    rabbitMQ学习笔记

    rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ...

    java使用rabbitMq服务

    【Java使用RabbitMQ服务】 RabbitMQ是一款开源的消息队列系统,广泛应用于分布式系统中的消息传递。本文将简要介绍如何在Java环境中使用RabbitMQ,包括安装、基本结构、消息发送模式以及高级特性。 ### 1. 安装 在...

    Rabbitmq工具类,java工具类RabbitmqUtil

    在Java开发中,RabbitMQ是一个非常流行的开源消息队列系统,它基于AMQP(Advanced Message Queuing Protocol)协议,用于高效地处理异步任务和解耦系统组件。`RabbitmqUtil` 是一个专门为Java开发者设计的工具类,...

    RabbitMQ工具类封装实现

    首先,`MQSubscribeService.java`代表的是订阅者服务,它是接收和处理来自RabbitMQ的消息的组件。在封装订阅者线程时,通常会包括以下关键知识点: 1. **创建连接和通道**:使用`ConnectionFactory`创建与RabbitMQ...

    java版本RabbitMQ实例.rar.rar

    Java版本的RabbitMQ实例是...这个Java版本的RabbitMQ实例是学习如何在Java项目中集成消息队列的宝贵资源。通过它,开发者可以掌握RabbitMQ的核心概念,以及如何在实际场景中利用这些概念构建健壮的、可扩展的应用程序。

    Java全能学习面试手册——Java面试题库.zip

    Java全能学习面试手册——Java面试题库.zip 01 7道消息队列ActiveMQ面试题!.pdf 02 10道Java高级必备的Netty面试题!.pdf 03 10道Java面试必备的设计模式面试题!.pdf 04 10个Java经典的List面试题!.pdf 05 10个...

    rabbitMQ Java开发案例

    javaAPI SpringMVC 集成rabbitMQ 很全的例子,实现了生产消费,重复消费等功能

    javaAPI SpringMVC 集成rabbitMQ 实现了生产消费,重复消费等功能

    在Java开发中,SpringMVC框架常用于构建Web应用程序,而RabbitMQ是一个流行的开源消息队列系统,基于Advanced Message Queuing Protocol (AMQP)。本文将深入探讨如何使用Java API和SpringMVC来集成RabbitMQ,实现...

    rabbitmq教程

    RabbitMQ 三种Exchange.wps————————三种exchange解释及代码 rabbitmq结构.wps————————rabbitmq架构简介 rabbitmq入门.pdf——————入门的文档 RabbitMQ研究与应用.pdf——————简单的研究

    rabbitmq简单java实例

    要开始使用RabbitMQ,我们需要在Java项目中添加RabbitMQ的Java客户端库——`rabbitmq-client.jar`。这可以通过Maven或Gradle的依赖管理工具轻松完成。例如,在Maven的`pom.xml`文件中添加以下依赖: ```xml ...

    java中间件之rabbitmq

    ### Java中间件之RabbitMQ详解 #### 一、RabbitMQ简介 ##### 1.1 RabbitMQ是什么 RabbitMQ是一款开源的消息中间件,基于AMQP (Advanced Message Queuing Protocol) 协议构建,主要使用Erlang语言编写。RabbitMQ...

    springboot+RabbitMq交换器Direct的demo

    在提供的压缩包文件`rabbitmq_direct`中,可能包含了实现上述功能的源代码,包括Spring Boot项目的结构、配置文件、发送和接收消息的Java类等。读者可以下载这个文件,根据说明运行代码,以更好地理解和实践RabbitMQ...

    java面试——SpringCloud面试专题.zip

    这份"java面试——SpringCloud面试专题.zip"资源很可能包含了关于Spring Cloud的深度面试指南,旨在帮助求职者准备Spring Cloud相关的技术问题。以下是对Spring Cloud关键知识点的详细解析: 1. **Spring Cloud概述...

Global site tag (gtag.js) - Google Analytics