Rabbitmq教程翻译(一)introduction

本文翻译自rabbitmq的tutorials的六篇之一

英文原文地址:http://previous.rabbitmq.com/v3_0_x/tutorials/tutorial-one-python.html

强烈建议大家看英文文档,这里只给自己留着记录

介绍

RabbitMQ是消息代理。主要的想法很简单:它接受和转发消息。你可以认为它作为一个邮局:当您发送邮件后框,你敢肯定,邮差先生最终将传递到收件人的邮件。使用这个比喻的RabbitMQ是一个后箱,一个邮局和一个邮递员。

RabbitMQ的和邮局之间的主要区别是,它不处理纸张,而是接受,存储和转发数据的二进制斑点- 消息的事实。

RabbitMQ的,和一般的消息,使用一些专业术语。

  • 生产装置没有什么比发送。发送邮件的程序是一个生产者。我们将绘制这样,用“P”:

  • 队列是一个邮箱的名称。这里面住的RabbitMQ。虽然通过消息流的RabbitMQ和您的应用程序,他们只能存储一个队列里面。à 队列 不受任何限制,它可以存储尽可能多的讯息,只要你喜欢-它本质上是一个无限的缓冲区。许多生产者可以去到一个队列发送消息,很多消费者可以尝试从一个队列接收数据。队列将被绘制成这样,它的名字在它上面:

  • 消费也有类似的含义接收。 消费者是一个程序,主要是等待接收消息。在我们的图纸,它以“C”所示:

请注意,生产者,消费者和经纪人不必驻留在同一台机器上,确实在大多数应用中,他们不这样做。

“Hello World”的

(使用Java客户端)

在本教程的这一部分,我们将在Java中写两个程序发送一个消息生产者和消费者接收消息,并打印出来。我们将粉饰Java API中的一些细节,专注于刚上手这个非常简单的事情。这是一个“Hello World”的消息。

在下面的图中,“P”是我们的制片人,“C”是我们的消费者。在中间的方块是一个队列 - 一条消息缓冲区,RabbitMQ的不断的消费者代表。

(P) - > [| | |]  - >(C)的
The Java client library

RabbitMQ speaks AMQP, which is an open, general-purpose protocol for messaging. There are a number of clients for AMQP in many different languages. We'll use the Java client provided by RabbitMQ.

Download the client library package, and check its signature as described. Unzip it into your working directory and grab the JAR files from the unzipped directory:

$ unzip rabbitmq-java-client-bin-*.zip
$ cp rabbitmq-java-client-bin-*/*.jar ./

(The RabbitMQ Java client is also in the central Maven repository, with the groupIdcom.rabbitmq and the artifactId amqp-client.)

Now we have the Java client and its dependencies, we can write some code.


发出

(P) - > [| | |]

我们会打电话给我们的邮件发件人发送消息接收 RECV。发送端将连接到RabbitMQ的,发送一个单一的消息,然后退出。

在 Send.java,我们需要一些进口类:

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

Set up the class and name the queue:

public class Send {

  private final static String QUEUE_NAME = "hello";

  public static void main(String[] argv)
      throws java.io.IOException {
      ...
  }
}

then we can create a connection to the server:

    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

连接抽象的套接字连接,协议版本协商和认证,所以对我们的照顾。下面我们连线经纪人在本地机器上 - 因此在localhost。如果我们想连接到不同的机器上的代理,我们只需要指定它的名称或IP地址。


接下来我们创建一个渠道,这是大部分的API做事情驻留。


给我们,我们必须声明一个队列发送到,然后我们就可以发布一条消息到队列:



channel.queueDeclare(QUEUE_NAME,false,false,false,null);  

Stringmessage="Hello World!";  

channel.basicPublish("",QUEUE_NAME,null,message.getBytes());

System.out.println(" [x] Sent '"+message+"'");


声明一个队列是幂等的 - 它只会被创建,如果它已经不存在。消息内容是一个字节数组,所以你可以编码任何你喜欢的存在。
最后,我们关闭的通道和连接;

   channel.close();
   connection.close();
如果这是您第一次使用RabbitMQ的,你没有看到“发送”的提示,那么你可能会离开摸不着头脑知道什么可能是错误的。也许经纪人开始没有足够的可用磁盘空间(默认情况下,它需要至少1GB免费),因此拒绝接受消息。检查代理日志文件,以确认和减少限制,如果需要。配置文件文档会告诉你如何设置disk_free_limit。


接收


这就是我们的发件人。我们接收推从RabbitMQ的消息,所以不像单个消息发件人出版,我们将保持其运行监听消息,并打印出来。

[|||] -> (C)


The code (in Recv.java) has almost the same imports as Send:

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

该的额外QueueingConsumer是一类我们将使用缓冲推到我们的邮件服务器。
设置作为发件人是一样的,我们打开一个连接和一个通道,并宣布我们要消耗队列。请注意,此比赛的队列发送出版。

public class Recv {

  private final static String QUEUE_NAME = "hello";

  public static void main(String[] argv)
      throws java.io.IOException,
             java.lang.InterruptedException {

    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    channel.queueDeclare(QUEUE_NAME, false, false, false, null);
    System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
    ...
    }
}
请注意,我们在这里,以及申报队列。因为我们可能会开始前发送接收器,我们希望确保队列存在之前,我们试图从它使用消息。
我们告诉服务器救我们的队列中的消息。由于这将推动我们异步消息,我们提供一个回调对象的形式,将缓冲的消息,直到我们准备使用它们。那是什么QueueingConsumer。

    QueueingConsumer consumer = new QueueingConsumer(channel);
    channel.basicConsume(QUEUE_NAME, true, consumer);

    while (true) {
      QueueingConsumer.Delivery delivery = consumer.nextDelivery();
      String message = new String(delivery.getBody());
      System.out.println(" [x] Received '" + message + "'");
    }

QueueingConsumer.nextDelivery()块直到另一个消息已经投递到服务中。

这就是整个Recv.java class.

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 + "'" );
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值