rabbitmq学习之路(一)安装以及简单使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qiyongkang520/article/details/58302250

因为公司的一个客服系统用到了rabbitmq消息队列,所以笔者想深入学习一下,给大家一起分享下。
其实,jdk里面也有队列相关的类,例如LinkedBlockQueue。但是在实现持久化,跨应用之前存在很大的障碍,所以使用一些成熟的消息队列组件便能带来不错的效果。
rabbitmq有几个概念需要记住,如下:
Exchange:交换机,决定了消息路由规则;
Queue:消息队列;
Channel:进行消息读写的通道;
Bind:绑定了Queue和Exchange,意即为符合什么样路由规则的消息,将会放置入哪一个消息队列。
下面,笔者将分以下几个步骤进行介绍:

一、环境安装

这里,为了学习的方便,笔者选择windows版本进行安装学习。首先,因为RabbitMQ由ERLANG实现,所以需要先安装ERLANG环境,下载地址:http://erlang.org/download/otp_win64_R15B.exe,rabbitmq的下载地址如下:http://220.112.194.135:9011/www.rabbitmq.com/c3pr90ntc0td/releases/rabbitmq-server/v3.3.4/rabbitmq-server-3.3.4.exe
然后,安装完成后,进入到rabbitmq安装目录的sbin目录下,执行:rabbitmq-server -detached ,然后再执行:rabbitmq-plugins enable rabbitmq_management , 这样rabbitmq服务启动成功并且可以通过web控制台查看了。
接下来,我们添加一个管理员用户,执行:rabbitmqctl add_user admin 888888,再执行:abbitmqctl set_user_tags admin administrator ,然后就可以通过访问:http://127.0.0.1:15672/,使用刚创建的用户进行登录了。
接下来,我们单击Admin,进入配置页面,配置虚拟主机读取权限,如下:
这里写图片描述
保存后,可看到如下:
这里写图片描述
另外,rabbitmq的一些常用命令如下:
启动: ./rabbitmq-server -detached
关闭: ./rabbitmqctl stop
查看: ./rabbitmqctl status

二、一个简单的java示例

其实,rabbitmq使用起来还是挺简单的,无非是一边生产者进行生产(入队列),另一边消费者就行消费(出队列);
首先,pom依赖如下:

<!-- RabbitMq客户端 -->
    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>3.3.4</version>
    </dependency>

然后,消费者HelloProducer如下:

/**
 * Project Name:qyk_testJava
 * File Name:HelloProducer.java
 * Package Name:com.qiyongkang.mq.rabbitMq.producer
 * Date:2017年2月21日下午3:12:21
 * Copyright (c) 2017, Thinkive(http://www.thinkive.com/) All Rights Reserved.
 *
*/

package com.qiyongkang.mq.rabbitMq.producer;

import java.io.IOException;

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

/**
 * ClassName:HelloProducer <br/>
 * Function: 生产者. <br/>
 * Date:     2017年2月21日 下午3:12:21 <br/>
 * @author   qiyongkang
 * @version
 * @since    JDK 1.6
 * @see
 */
public class HelloProducer {
    //队列名称  
    private final static String QUEUE_NAME = "qyk.hello";

    public static void main(String[] args) throws IOException {
        // 创建连接连接到MabbitMQ
        ConnectionFactory factory = new ConnectionFactory();
        //设置MabbitMQ所在主机ip或者主机名
        factory.setHost("localhost");
        //创建一个连接
        Connection connection = factory.newConnection();
        //创建一个频道
        Channel channel = connection.createChannel();
        //指定一个队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        //发送的消息
        String message = "hello world!";
        //往队列中发出一条消息
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
        System.out.println("生产一条消息:" + message);
        //关闭频道和连接
        channel.close();
        connection.close();
    }
}

这里,我们放入了一个hello world到qyk.hello这个队列,执行完毕后,可以在web控制台看到,如下:
这里写图片描述
然后,消费者HelloConsumer如下:

/**
 * Project Name:qyk_testJava
 * File Name:HelloProducer.java
 * Package Name:com.qiyongkang.mq.rabbitMq.producer
 * Date:2017年2月21日下午3:12:21
 * Copyright (c) 2017, Thinkive(http://www.thinkive.com/) All Rights Reserved.
 *
*/

package com.qiyongkang.mq.rabbitMq.producer;

import java.io.IOException;

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

/**
 * ClassName:HelloProducer <br/>
 * Function: 生产者. <br/>
 * Date:     2017年2月21日 下午3:12:21 <br/>
 * @author   qiyongkang
 * @version
 * @since    JDK 1.6
 * @see
 */
public class HelloProducer {
    //队列名称  
    private final static String QUEUE_NAME = "qyk.hello";

    public static void main(String[] args) throws IOException {
        // 创建连接连接到MabbitMQ
        ConnectionFactory factory = new ConnectionFactory();
        //设置MabbitMQ所在主机ip或者主机名
        factory.setHost("localhost");
        //创建一个连接
        Connection connection = factory.newConnection();
        //创建一个频道
        Channel channel = connection.createChannel();
        //指定一个队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        //发送的消息
        String message = "hello world!";
        //往队列中发出一条消息
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
        System.out.println("生产一条消息:" + message);
        //关闭频道和连接
        channel.close();
        connection.close();
    }
}

这里,我们启动消费者,只要队列里面有数据,便会立即进行消费;如果队列是空的,消费者便会进入阻塞状态,直到有数据入此队列。
好了,今天就简单的介绍到这儿了~

猜你喜欢

转载自blog.csdn.net/qiyongkang520/article/details/58302250
今日推荐