RabbitMQ安装详解

安装(centos系统)

第一步: 下载rabbitmq安装包
第二步: 安装erlang
1) 安装Erlang Solutions仓库到你的系统(目的在于让你可以使用yum安装到最新版本的erlang, 如果不设置, yum安装的erlang版本通常太低)
      

wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm

2) yum install -y erlang
因为rabbitmq是使用erlang语言实现, 所以需要安装erlang依赖;这里提供的RabbitMQ是最新版3.6.9, 所需的erlang版本最低为 R16B-03,否则编译时将失败,版本过低会报如下错误:
这里写图片描述

第三步: 安装socat

yum install -y socat

否则报如下错误: 
这里写图片描述 

第四步: 安装RabbitMQ

rpm -ivh rabbitmq-server-3.6.9-1.el6.noarch.rpm

第五步: 启动
    

sudo service rabbitmq-server start  #启动
sudo service rabbitmq-server stop  #关闭
sudo service rabbitmq-server restart  #重启
sudo service rabbitmq-server status  #查看状态

注:启动时有可能报错 “ERROR: node with name “rabbit” already running on…”,
解决方法:
ps aux | grep epmd
ps aux | grep erl
找出rabbit运行的进程,并 kill, 再次执行启动

第六步:配置网页插件

sudo rabbitmq-plugins enable rabbitmq_management

配置完成之后可通过浏览器访问后台管理端: http://localhost:15672/ (默认端口是15672,默认用户guest 密码guest 默认用户仅能在本地访问)

第七步:远程访问配置
默认网页是不允许访问的,需要增加一个用户修改一下权限,命令如下:

# 添加用户
sudo rabbitmqctl add_user admin admin
# 添加权限
sudo rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
# 修改用户角色
sudo rabbitmqctl set_user_tags admin administrator

然后就可以远程访问了,然后可直接配置用户权限等信息。

简单实例

1、下载 rabbitmq-client.jar 或使用Maven依赖包

<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>4.1.0</version>
</dependency>

配置类:

public class MQConfig {
    // 消息队列名称
    public final static String QUEUE_NAME = "hello";
    // 主机名
    public static final String HOST = "localhost";
    // 用户名
    public static final String USER_NAME = "admin";
    // 密码
    public static final String PASSWORD = "admin";
}

2、消息发送端:

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

public class ProducerClient {

    public static void main(String[] args) throws Exception {
        // 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost(MQConfig.HOST);
        factory.setUsername(MQConfig.USER_NAME);
        factory.setPassword(MQConfig.PASSWORD);
        // 创建连接
        Connection connection = factory.newConnection();
        // 创建消息通道 
        Channel channel = connection.createChannel();
        // 生成一个消息队列
        channel.queueDeclare(MQConfig.QUEUE_NAME, false, false, false, null);
        String message = "hello rabbitmq";
        // 发布消息,第一个参数表示路由(Exchange名称),""则表示使用默认消息路由
        channel.basicPublish("", MQConfig.QUEUE_NAME, null, message.getBytes());
        System.out.println("Sent '" + message + "'");

        // 关闭消息通道和连接  
        channel.close();
        connection.close();
    }
}

3、消息接收端:

import com.rabbitmq.client.*;

import java.io.IOException;

public class ConsumerClient {
    static boolean isBreak = false;

    public static void main(String[] args) throws Exception {
        // 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost(MQConfig.HOST);
        factory.setUsername(MQConfig.USER_NAME);
        factory.setPassword(MQConfig.PASSWORD);
        // 创建连接
        Connection connection = factory.newConnection();
        // 创建消息通道 
        Channel channel = connection.createChannel();
        // 消息队列
        channel.queueDeclare(MQConfig.QUEUE_NAME, false, false, false, null);
        System.out.println("Waiting for messages...");
        // 消费者
        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("Received '" + message + "'");
                isBreak = true;
            }
        };
        channel.basicConsume(MQConfig.QUEUE_NAME, true, consumer);

        while (!isBreak) {
            Thread.sleep(1000);
        }

        channel.close();
        connection.close();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章