linux 环境下的示例 :
rabbitMQ是一个在AMQP(Advanced Message Queuing Protoco 高级消息队列协议)l协议标准基础上完整的,可服用的企业消息系统。它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rabbit MQ 是建立在Erlang OTP平台上。所以安装Rabbit MQ前必须把Erlang 语言环境安装起来。如下是Erlang与rabbitmq Linux操作系统软件百度文库下载地址:
Erlang链接:https://pan.baidu.com/s/1wuRLdUzQmvSLY1ni0B1fQg
提取码:4lmu
rabbitmq 链接:https://pan.baidu.com/s/1Q6k1UJjcF4w2rUKko1gh0Q
提取码:9onm
安装前先把这两个文件存放在Linux服务器上的某个目录,本例以/tmp/rabbitmq目录作为参考
1 Erlang 的安装过程
1.1 创建一个子目录(为解压后配置安装路径做准备)
mkdir -p /usr/local/erlang (目录名称可自定义)
1.2 进入指定存放软件的文件夹并解压文件
cd tmp/rabbitmq/;tar -zxvf otp_src_20.3.tar.gz
因为压缩包格式问题,解压时可能出现如下错误
解决方案:修改解压命令,把z去掉,改为 tar -xvf otp_src_20.3.tar.gz,如果还是出现错误,可能就是下载的软件问题了
1.3 配置安装路径(1.1步创建子目录的用处就在这里)
./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac
1.4 进行编译
make -j8( linux make -j8命令https://blog.csdn.net/clarkness/article/details/86633681 )
1.5 进行安装
make install
1.6 设置环境变量
vim /etc/profile;
在文件末尾添加:export PAHT=$PATH:/usr/local/erlang/bin
操作方式:进入后点击 i 字母可以开始输入或黏贴,输入结束点击ESC进行退出输入,然后输入wq进行保存就可以了,最后可命令cat /etc/profile查看更新后的结果
1.7 使环境变量生效
source /etc/profile
1.8 验证软件是否安装成功
另开一个CRT窗口,输入erl命令,出现如下显示结果就说明安装成功了
2 rabbitmq 的安装过程
2.1 进入指定存放软件的文件夹并解压文件
cd tmp/rabbitmq/;tar xvf rabbitmq-server-generic-unix-3.6.15.tar.xz
2.2 移动解压文件的整个文件夹到指定目录
mv rabbitmq_server-3.6.15 /usr/local/RabbitMQ
2.3 设置环境变量
vim /etc/profile;
在文件末尾添加:export PAHT=$PATH:/usr/local/RabbitMQ/sbin
2.4 使环境变量生效
source /etc/profile
2.5 安装好了就可以查看一些插件信息
进入sbin目录:cd /usr/local/RabbitMQ/sbin
查看插件列表:/rabbitmq-plugins list
启动插件管理:./rabbitmq-plugins enable rabbitmq_management
2.6 启动和关闭服务
rabbitmq 安装好后,关于服务启动和关闭操作都必须进入RabbitMQ安装文件的sbin目录.
后台服务启动命令:./rabbitmq-server -detached
启动后默认访问地址是:http://ip:15672/#/,默认登入名/密码为guest/guest,但这组默认的登入名密码只能在本地登入,远程服务器登入不了,会报如下错误(所以一般需要创建新的用户名密码):
服务关闭命令:./rabbitmqctl stop
2.7 添加用户的操作流程
2.7.1 添加用户:./rabbitmqctl add_user root 123456 (root用户名;123456密码)
2.7.2 授权用户管理员:./rabbitmqctl set_user_tags root administrator(root用户名;administrator角色名称)
2.7.3 添加虚拟机:../rabbitmqctl add_vhost root_vhost(root_vhost虚拟机名称)
2.7.4 添加用户到虚拟机上:./rabbitmqctl set_permissions -p root_vhost root ".*" ".*" ".*"(root用户名;root_vhost虚拟机名称)
用户创建完并且授权完就可以正常登入了:
2.8 RabbitMQ 主要端口说明
3 rabbitmq配合Java应用程序的使用
初初一看网络上案例琳琅满目,数不胜数,但因为依赖包版本问题,很多都跑不起来,挺可惜,本应用示例jar本地文库下载地址:链接:https://pan.baidu.com/s/1c4ZwF3DVi4f2YoSC-D-zzg 提取码:hip1
3.1 生产者应用代码:
import java.io.IOException;
import java.util.concurrent.TimeoutException;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
/**
* * RabbitMQ 生产者
* *
*
*/
public class rabbitmq_Producer {
//队列名称
private final static String QUEUE_NAME = "Queue";
public static void main(String[] args) {
// 创建连接工厂
ConnectionFactory factory = null;
// 建立到代理服务器到连接
Connection connection = null;
// 获得通道
Channel channel = null;
try {
factory = new ConnectionFactory();
//设置用户、和密码、端口号、IP地址、和虚拟机名称
factory.setUsername("root");
factory.setPassword("123456");
factory.setHost("192.168.1.11");
factory.setPort(5672);
factory.setVirtualHost("root_vhost");
// 建立到代理服务器到连接
connection = factory.newConnection();
channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String message = "hello world 努力,效率---快下班了";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
System.out.println("发送 message[" + message + "] to " + QUEUE_NAME + " success!");
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
} finally {
try {
// 关闭资源
channel.close();
connection.close();
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
}
}
3.2 消费者应用代码:
import java.io.IOException;
import java.util.concurrent.TimeoutException;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;
import com.rabbitmq.client.QueueingConsumer.Delivery;
import com.rabbitmq.client.ShutdownSignalException;
/**
* * RabbitMQ 消费者
* * @author Administrator
* *
*
*/
public class rabbitmq_Consumer {
//队列名称
private final static String QUEUE_NAME = "Queue";
public static void main(String[] args) {
// 创建连接工厂
ConnectionFactory factory = null;
// 建立到代理服务器到连接
Connection connection = null;
// 获得通道
Channel channel = null;
try {
//设置用户、和密码、端口号、虚拟机名称、和IP地址
factory = new ConnectionFactory();
factory.setUsername("root");
factory.setPassword("123456");
factory.setHost("192.168.1.11");
factory.setPort(5672);
factory.setVirtualHost("root_vhost");
// 建立到代理服务器到连接
connection = factory.newConnection();
channel = connection.createChannel();
// 1.队列名2.是否持久化,3是否局限与链接,4不再使用是否删除,5其他的属性
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 声明一个消费者,配置好获取消息的方式
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(QUEUE_NAME, true, consumer);
// 循环获取消息
while (true) {
// 循环获取信息
// 指向下一个消息,如果没有会一直阻塞
Delivery delivery = consumer.nextDelivery();
String msg = new String(delivery.getBody());
System.out.println("接收 message[" + msg + "] from " + QUEUE_NAME);
}
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
} catch (ShutdownSignalException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
// 关闭资源
channel.close();
connection.close();
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
}
}
window 环境下的示例 :
window下安装rabbitMQ erlang不安装也是可以的
链接:https://pan.baidu.com/s/1b2E-kwGUOQG3sTvy9OZMWg
提取码:orbq
复制这段内容后打开百度网盘手机App,操作更方便哦
本地安装后查看安装情况的地址:http://127.0.0.1:15672/#/
端口号:5672
登入/密码:guest/guest
示例代码:
1 生产者应用代码:
**
* * RabbitMQ 生产者
* *
*
*/
public class rabbitmq_Producer {
//队列名称
private final static String QUEUE_NAME = "Queue";
public static void main(String[] args) {
// 创建连接工厂
ConnectionFactory factory = null;
// 建立到代理服务器到连接
Connection connection = null;
// 获得通道
Channel channel = null;
try {
factory = new ConnectionFactory();
//设置用户、和密码、端口号、IP地址
factory.setUsername("guest");
factory.setPassword("guest");
factory.setHost("localhost");
factory.setPort(5672);
//factory.setVirtualHost("root_vhost"); Windows下不需要虚拟机名称
// 建立到代理服务器到连接
connection = factory.newConnection();
channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String message = "hello world 努力,效率---快下班了";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
System.out.println("发送 message[" + message + "] to " + QUEUE_NAME + " success!");
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
} finally {
try {
// 关闭资源
channel.close();
connection.close();
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
}
}
2 消费者应用代码:
/**
* * RabbitMQ 消费者
* * @author Administrator
* *
*
*/
public class rabbitmq_Consumer {
//队列名称
private final static String QUEUE_NAME = "Queue";
public static void main(String[] args) {
// 创建连接工厂
ConnectionFactory factory = null;
// 建立到代理服务器到连接
Connection connection = null;
// 获得通道
Channel channel = null;
try {
//设置用户、和密码、端口号、和IP地址
factory = new ConnectionFactory();
factory.setUsername("guest");
factory.setPassword("guest");
factory.setHost("localhost");
factory.setPort(5672);
//factory.setVirtualHost("root_vhost"); windward下不需要虚拟机名称
// 建立到代理服务器到连接
connection = factory.newConnection();
channel = connection.createChannel();
// 1.队列名2.是否持久化,3是否局限与链接,4不再使用是否删除,5其他的属性
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 声明一个消费者,配置好获取消息的方式
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(QUEUE_NAME, true, consumer);
// 循环获取消息
while (true) {
// 循环获取信息
// 指向下一个消息,如果没有会一直阻塞
Delivery delivery = consumer.nextDelivery();
String msg = new String(delivery.getBody());
System.out.println("接收 message[" + msg + "] from " + QUEUE_NAME);
}
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
} catch (ShutdownSignalException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
// 关闭资源
channel.close();
connection.close();
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
}
}