RabbitMQ如何学习?那些网站可以学习?

RabbitMQ(教程:}

RabbitMQ和邮局的主要区别是,它不是用来处理纸张的,它是用来接收、存储和发送消息(message)这种二进制数据的。

一般提到RabbitMQ和消息,都会用到一些专有名词。

生产(Producing)意思就是发送。发送消息的程序就是一个生产者(producer)。我们一般用"P"来表示:

RabbitMQ如何学习?那些网站可以学习?  第1张

队列(queue)就是邮箱的名称。消息通过你的应用程序和RabbitMQ进行传输,它们能够只存储在一个队列(queue)中。 队列(queue)没有任何限制,你要存储多少消息都可以——基本上是一个无限的缓冲。多个生产者(producers)能够把消息发送给同一个队列,同样,多个消费者(consumers)也能够从同一个队列(queue)中获取数据。队列可以绘制成这样(图上是队列的名称):

RabbitMQ如何学习?那些网站可以学习?  第2张

消费(Consuming)和获取消息是一样的意思。一个消费者(consumer)就是一个等待获取消息的程序。我们把它绘制为"C":

RabbitMQ如何学习?那些网站可以学习?  第3张

需要指出的是生产者、消费者、代理需不要待在同一个设备上;事实上大多数应用也确实不在会将他们放在一台机器上。

Hello World!

(使用the Java Client)

在教程的这部分,我们将要用Java写两个类;一个生产者(producer),它只发送一条消息,和一个消费者,它接受消息然后打印消息出来.我们将掩盖一些Java API中的细节,专注于让这个简单的Hello World程序跑起来.

我们的大致的设计是这样的:

RabbitMQ如何学习?那些网站可以学习?  第4张

生产者(producer)把消息发送到一个名为“hello”的队列中。消费者(consumer)从这个队列中获取消息。

The Java client library

RabbitMQ可以有多种协议.这个教程使用AMQP 0-9-1协议,这个协议是一个开源的,多用途的消息协议.我们将使用RabbitMQ给出的java客户端来体验RebbitMQ.

下载rabbitmq的java客户端库,解压然后获取我们要用的jar包

安装过程依赖于pip和git-core两个包,你需要先安装它们。 (RabbitMQ的java客户端在maven的中央仓库也有,它的groupId是com.rabbitmq,artifactId是amqp-client)

现在我们有了rabbitmq的Java客户端库和它的依赖,我们可以开始敲代码了.

发送消息

RabbitMQ如何学习?那些网站可以学习?  第5张

sender将会连接RabbitMQ,发送一个消息,然后退出

在Send.java里面,我们需要导入一些类;

import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.Connection;import com.rabbitmq.client.Channel;建立这个类,以及给queue命名.

public class Send { private final static String QUEUE_NAME = "hello"; public static void main(String[] argv){ throws java.io.IOException { }}然后我们创建连接:

ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");Connection connection = factory.newConnection();Channel channel = connection.createChannel();这个连接封装了一个socket,同时处理好了消息协议的版本和认证.这里我们连接上了在本地(localhost)的一个中间人(broker),如果你想要连接别的主机上的中间人,只需要修改一下主机名字或者IP地址

下面,我们创建一个隧道(channel),这个隧道对象里面有我们需要的API.

要发送消息,我们必须先声明一个队列.

channel.queueDeclare(QUEUE_NAME , false , false , false , null);String message = "Hello World";channel.basicPublish("",QUEUE_NAME,null,message.getBytes());System.out.println(" [x] Sent '"+message+"'");声明一个队列是幂等操作 - 它将只在它不存在的时候被创建.消息的内容是一个字节数组

转载请说明出处
网资源分享 » RabbitMQ如何学习?那些网站可以学习?

发表评论

欢迎 访客 发表评论