RabbitMQ学习1--安装和简单JAVA实例

开篇,我们要学习RabbitMQ,它是个啥呢?消息队列产品。这消息队列(MQ)能干啥呢??

详细的可以参考这里http://my.oschina.net/piorcn/blog/340421。

里面有一点写的很好:

消息代理实现了发布者和订阅者在时间、空间和流程三个方面的解耦:

  • 时间解耦—-发布方和订阅方无需同时在线就能够进行消息传输,消息中间件通过存储转发提供了这种异步传输的能力;

  • 空间解耦——发布方和订阅方都无需知道对方的物理地址、端口,甚至无需知道对方的逻辑名字和个数;

  • 流程解耦——发布方和订阅方在发送和接收数据时并不阻塞各自的控制流程。

好吧。很强大是不?那我们来看看这东西怎么用。

首先RabbitMQ是个服务,我们要先把它安装上,并运行起来。

RabbitMQ安装

GG大法。找到RabbitMQ的官网下载新版。http://www.rabbitmq.com/download.html

我的虚机是ubuntu的,直接下个deb包就是了。下载完双击打开,install。

装哪去了呢?/usr/sbin下有几个rabbitmq开头的命令:

image

rabbitmq的老家在/usr/lib/rabbitmq,bin下几个常用的指令和配置的链接,内容都在lib下。

RabbitMQ学习1--安装和简单JAVA实例_第1张图片

好。让我们把rabbitmq服务启来。执行

rabbitmq-server

RabbitMQ学习1--安装和简单JAVA实例_第2张图片

这里的broker,你可以理解为就是一个MQ的服务了。用netstat 指令看一下端口。rabbitmq默认的端口是5672,现在已经是在监听状态了。

RabbitMQ学习1--安装和简单JAVA实例_第3张图片

呃。这就完了?

有个很有用的东西:web管理界面。我们得知道这服务现在在干啥吧。怎么启动呢?。管理界面是个插件,用以下的指令打开。

rabbitmq-plugins enable rabbitmq_management

进入localhost:15672,用户名guest:guest。

ok,一会我们会用到。

简单实例

服务启来了,怎么试一下呢?先来说几个概念。

MQ是用来通信消息的,也就是说这消息要有人投递到MQ中,有人从MQ中的消费掉消息。投递的角色叫Producter,消费的角色叫Consumer。

那消息到了MQ放哪儿呢?有一个类似信箱的概念叫QUEUE,就是一个存放消息的地方。

我们要分别创建一个Producter和一个Consumer来测试一下。

很开心。rabbitMQ有提供javaclient,来与MQ通信。在前面的下载页面有。

先从Producter开始,三步,建连接,绑定队列,发送数据。

建连接:

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("10.88.102.167");
factory.setUsername("root");
factory.setPassword("123123");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();

绑定队列:

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

发送数据,数据为字节数组,灵活性很高:

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

嗯。来个完整的例子,发送者,不停向队列放入数据。

public class HelloSender {private final static String QUEUE_NAME = "hello";public static void main(String[] args) throws IOException,
            InterruptedException {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("10.88.102.167");
        factory.setUsername("root");
        factory.setPassword("123123");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        channel.queueDeclare(QUEUE_NAME, true, false, false, null);
        int i = 1;
        while (true) {
            String message = "Hello World!" + i++;
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println(" [x] Sent '" + message + "'");
            Thread.sleep(100);
        }
    }
}

那Consumer呢?三步,建连接,绑定队列,接收数据。

建连接:同Producter

绑定队列:

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

接收数据:

QueueingConsumer.Delivery delivery = consumer.nextDelivery();byte[] msg = delivery.getBody();

完整的例子:

public class HelloConsumer {private final static String QUEUE_NAME = "hello";public static void main(String avg[]) throws IOException,
            java.lang.InterruptedException {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("10.88.102.220");
        factory.setUsername("root");
        factory.setPassword("123123");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
        QueueingConsumer consumer = new QueueingConsumer(channel);
        channel.queueDeclare(QUEUE_NAME, true, false, false, null);
        channel.basicConsume(QUEUE_NAME, true, consumer);
        while (true) {
            QueueingConsumer.Delivery delivery = consumer.nextDelivery();
            byte[] msg = delivery.getBody();
            String message = new String(msg);
            System.out.println(" [x] Received '" + message + "'");
        }
    }

}

RabbitMQ学习1--安装和简单JAVA实例_第4张图片RabbitMQ学习1--安装和简单JAVA实例_第5张图片

进入web界面,点QUEUE。是不是有个hello?还能看到消息的负载。

RabbitMQ学习1--安装和简单JAVA实例_第6张图片

一切顺利不是么?

你可能感兴趣的:(RabbitMQ学习1--安装和简单JAVA实例)