RabbitMQ之最简单的消息的发送与接收

RabbitMQ是一个消息代理,它的核心原理非常简单:接收和发送消息,你可以把它想象成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处,RabbitMQ是一个邮箱、邮局、投递员。

我们先来看最简单的模式:一个发送者发送一条消息给一个接收者

 

注解:P是生产者,C是消费者,中间的部分是队列用来保存消费者需要接收的消息的缓冲区域(这里我们说缓存消费者需要接收的消息是因为发送者发送的消息如果没有被匹配规则匹配上就会被摒弃,不会再存储到消息队列中)。

API接口说明:

ConnectionFactoryConnectionChannel都是RabbitMQ对外提供的API中最基本的对象。

ConnectionFactory创建Connection的制造工厂。

Connection RabbitMQ基于socket链接,它封装了socket协议相关部分逻辑。

Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定QueueExchange、发布消息等。

代码示例

发送消息:

 

import java.io.IOException;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class Send01 {

	public static void main(String[] args) throws IOException {
		ConnectionFactory factory = new ConnectionFactory();
		//RabbitMQ-Server安装在本机,所以直接用127.0.0.1
		factory.setHost("127.0.0.1");
		//创建一个连接
		Connection conn = factory.newConnection();
		//创建一个通信通道
		Channel channel = conn.createChannel();
		//定义Queue名称
		String queueName = "queue01";
		//为Channel定义queue的属性,queueName为queue名称,如果queue已被创建,不再重复创建
		channel.queueDeclare(queueName, false, false,false,null);
		String msg = "Hello World!";
		//发送消息
		channel.basicPublish("", queueName, null, msg.getBytes());
		System.out.println("send message["+msg+"] to "+queueName+" success!");
		//关闭通道
		channel.close();
		//关闭连接
		conn.close();
	}
}

接收消息:


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

public class Recv01 {

	public static void main(String[] args) throws Exception{
		ConnectionFactory factory = new ConnectionFactory();
		//RabbitMQ-Server安装在本机,所以直接用127.0.0.1
		factory.setHost("127.0.0.1");
		//创建一个连接
		Connection conn = factory.newConnection();
		//创建一个通信通道
		Channel channel = conn.createChannel();
		//定义Queue名称
		String queueName = "queue01";
		//为Channel定义queue的属性,queueName为queue名称,如果queue已被创建,不再重复创建
		channel.queueDeclare(queueName, false, false,false,null);
		///*--------------以上部分和sender一样--------------------*/
		
		//接收消息配置
		QueueingConsumer consumer = new QueueingConsumer(channel);
		channel.basicConsume(queueName, true,consumer);
		//循环获取消息
		while(true){
			//获取消息,如果没有消息,这一步将会一直阻塞
			Delivery delivery = consumer.nextDelivery();
			String msg = new String(delivery.getBody());
			System.out.println("received message["+msg+"] from "+queueName);
		}
	}
}

临时队列

该例子中定义的队列queue为临时队列,通过RabbitMQ Server提供的管理工具可查看这一现象

1、运行上述代码后,打开命令框,查看消息队列,发现存在刚创建的队列

2、重启rabbitMQ的服务后重新查看,发现刚创建的队列已经不存在


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值