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