RabbitMQ官方文档学习系列--“HelloWorld!”

本系列主要是通过翻译RabbitMQ官方文档来学习其基础知识。本篇是第一篇,利用RabbitMQ完成最简单的工作。

一、准备工作

1.RabbitMQ下载地址:http://www.rabbitmq.com/install-windows.html

           注意:需要先下载安装Erlang,然后才能安装RabbitMQ,默认地址为localhost,端口为5672

           安装完成后,可通过浏览器访问http://localhost:15672/检测是否安装成功。

二、简介

      RabbitMQ 是一个消息掮客,它负责接收消息并转发消息。你可以把它想象成是一个邮箱:当你把要邮寄的信件放入到邮箱中,你可以肯定邮递员最终会把信件投递到目的地。在这个类比中,RabbitMQ为了帮我们传达信息,就充当了邮箱,邮局和邮递员三者的角色。RabbitMQ和邮局最大的不同在于,RabbitMQ接受,存储和转发的信息是二进制的数据块而不是纸质信件。

      RabbitMQ在消息传送中使用的专业术语:

              生产者(Producer)就是消息的发送者,发送信息的程序就是生产者。

                                                                                        

              队列(queue)类似于是RabbitMQ中的邮箱名称。虽然消息在RabbitMQ和你的应用程序之间传递,但它只能被保存在队列中。队列只受主机的内存大小和硬盘大小的限制,否则可以无限增加。本质上说,队列就是一个巨大的消息缓存。多个生产者可以给一个队列发送消息,多个消费者可以从同一个队列中获取消息。

                                                                                       


              消费就是接收的意思。消费者就是大部分时间都在等待接收消息的程序。

                                                                                          

             注意:生产者(producer),消费者(consumer),掮客(broker)三者可以分别部署在不同的主机上。

三、一个简单的实验程序

下载client jar包,下载地址:点击打开链接

生产者(Producer)端程序:

package com.zyh.RabbitMQ;


import java.io.IOException;
import java.util.concurrent.TimeoutException;


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


public class Send {
private final static String QUEUE_NAME="hello";
public static void main(String[] args) throws IOException, TimeoutException{
//建立publisher-broker的连接
ConnectionFactory factory=new ConnectionFactory();
//这里连接的是本地broker,因此host是localhost
factory.setHost("localhost");
//connection 抽象化了套接字连接,并且为我们处理了协议版本协商与认证等
Connection connection=factory.newConnection();
//创建channel对象,它将要完成大部分的工作
Channel channel=connection.createChannel();

//因为我们需要将信息发送到一个queue中,所以我们先要声明一个queue
//申明一个queue具有幂等性,只有在其不存在的情况下才会被创建
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
String message="Hello World!";
//message被转换成了字节数组,所以你可以选择任意编码格式
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println("[x] Sent '"+message+"'");
//关闭通道,关闭连接
channel.close();
connection.close();


}
}

消费者端(Consumer)程序:

package com.zyh.RabbitMQ;


import java.io.IOException;
import java.util.concurrent.TimeoutException;


import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
public class Recv {
private final static String QUEUE_NAME="hello";
public static void main(String[] args) throws IOException, TimeoutException{
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 ");
//我们需要告知服务将相应的queue里的信息投递给我们
//因为broker会异步的将信息投递给我们,所以我们需要以一个对象的形式提供一个回调,利用这个对象在我们使用这些信息之前缓存信息
//这就是 DefaultConsumer这个子类所提供的功能
Consumer consumer = new DefaultConsumer(channel) {
     @Override
     public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
         throws IOException {
       String message = new String(body, "UTF-8");
       System.out.println(" [x] Received '" + message + "'");
     }
   };
   channel.basicConsume(QUEUE_NAME, true, consumer);
   System.out.println("666666666666");//证明消费端是非阻塞的
}

}

四、总结

    通过这篇教程,我们知道了RabbitMQ的作用以及它是如何工作的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值