RabbitMQ 是一个负责发送和接收消息的消息中间件。你能够把它形容成一个邮局,当你把信件丢到邮箱后,邮局的人就会把信件送到你指定的接收人 手中。不一样的是 RabbitMQ 处理的是二进制数据,而非纸质的信件。
以下图所示,RabbitMQ 由以下几个部分组成, Publisher(消息生产者),Consumer(消息消费者) 以及Exchange,Queue,Bindings。 关于后三者,这里照搬官网的说法: Queue 就像你要去的目的地城市 Exchange 像你在始发地乘坐的航班 Bindings 就比如路线图,有 0个 或 多个路线能够帮助你到达目的地。
RabbitMQ 有以下几种工做模式:html
简单模式服务器
工做队列模式3d
发布/订阅模式code
路由器模式htm
topics 模式中间件
这里先对简单模式,作一个简单的介绍,其余模式会在后续的文章中一一介绍。对象
先来看一张图blog
从图中能够看到,简单模式突出了三个对象,教程
1. Producer 发送 message 的一个程序 2. Queue 存储消息的一个“盒子”,多个生产者能够往同一个队列发送消息。多个消费者能够接收来自同一个队列的消息。 3. Consumer 等待接收队列中消息的程序
运行如下代码的前提是,已经在本地或者服务器安装了 RabbitMQ,(顺便插一句,RabbitMQ 的默认端口是 5762,RabbitMQ 的后台管理的端口是15672)安装过程请参照 RabbitMQ 安装教程rabbitmq
public class RbSender { private static String QUEUE_NAME = "default"; private static String msg = "hello world!"; public static void main(String[] args){ try{ ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); // 声明一个队列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); channel.basicPublish("", QUEUE_NAME, null, msg.getBytes()); }catch(Exception e){ } } }
public class RbReceiver { private static String QUEUE_NAME = "default"; public static void main(String[] args){ try{ ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); // 声明一个队列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 回调 DeliverCallback deliverCallback = (consumerTag, delivery) -> { String message = new String(delivery.getBody(), "UTF-8"); System.out.println(" [x] Received '" + message + "'"); }; // channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { }); }catch(Exception e){ } } }