RabbitMQ 入门

RabbitMQ 简介

RabbitMQ 是一个负责发送和接收消息的消息中间件。你能够把它形容成一个邮局,当你把信件丢到邮箱后,邮局的人就会把信件送到你指定的接收人
手中。不一样的是 RabbitMQ 处理的是二进制数据,而非纸质的信件。

RabbitMQ 模型

以下图所示,RabbitMQ 由以下几个部分组成, Publisher(消息生产者),Consumer(消息消费者)
以及Exchange,Queue,Bindings。

关于后三者,这里照搬官网的说法:
Queue 就像你要去的目的地城市
Exchange 像你在始发地乘坐的航班
Bindings 就比如路线图,有 0个 或 多个路线能够帮助你到达目的地。


几种工做模式

RabbitMQ 有以下几种工做模式:html

  1. 简单模式服务器

  2. 工做队列模式3d

  3. 发布/订阅模式code

  4. 路由器模式htm

  5. topics 模式中间件

1. 简单模式

这里先对简单模式,作一个简单的介绍,其余模式会在后续的文章中一一介绍。对象

先来看一张图blog

从图中能够看到,简单模式突出了三个对象,教程

1. Producer  
发送 message 的一个程序
2. Queue 
存储消息的一个“盒子”,多个生产者能够往同一个队列发送消息。多个消费者能够接收来自同一个队列的消息。
3. Consumer
等待接收队列中消息的程序

代码

运行如下代码的前提是,已经在本地或者服务器安装了 RabbitMQ,(顺便插一句,RabbitMQ 的默认端口是 5762,RabbitMQ 的后台管理的端口是15672)安装过程请参照 RabbitMQ 安装教程rabbitmq

1. 生产者

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){

	}
	}

}

2. 消费者

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

}
相关文章
相关标签/搜索