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();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章