安裝(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();
}
}