1编译环境
进行一些依赖文件的安装(系统必须拥有此类文件,后续安装才能正常进行)。
由于系统处于离线状态,依赖文件需要自行下载,再进行相应的安装如下:
rpm -ivh ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm
rpm -ivh ncurses-libs-5.9-14.20130511.el7_4.x86_64.rpm
rpm -ivh ncurses-base-5.9-13.20130511.el7.noarch.rpm
rpm -ivh glibc-2.17-196.el7.i686.rpm glibc-common-2.17-196.el7.x86_64.rpm
rpm -ivh ncurses-devel-5.9-13.20130511.el7.x86_64.rpm
由于各个依赖文件也存在各项依赖关系,所以在安装的时候根据提示的信息进行安装,对应的依赖文件需要什么依赖,再根据相应的依赖进行安装。
2 erlang安装
进入erlang官网进行相关文件下载,本次测试下载文件为opt_src_20.2.tar.gz。
Linux下进行操作:
tar -xvf opt_src_20.2.tar.gz;
mkdir /usr/local/erlang;
cd opt_src_20.2;
./configure --prefix=/usr/local/erlang --without-javac;
make && make install;
编译安装完成后进行环境变量的配置:
vim /etc/profile;
ERL_HOME=/usr/local/erlang
PATH=$ERL_HOME/bin:$PATH
export ERL_HOME PATH
source /etc/profile
3 rabbitmq安装
进入官网下载对应的rabbitmq安装包,本次下载版本为:rabbitmq-server-3.7.4-1.el7.noarch.rpm。
Linux下进行操作:
rpm -ivh --nodeps rabbitmq-server-3.7.4-1.el7.noarch.rpm
Rabbitmq需要开放15672与5672端口
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --reload
启动rabbitmq web管理页面,此页面是安装rabbitmq自带的一个管理控制页面,只需要自己启动就行。
rabbitmq-plugins enable rabbitmq_management
开启rabbitmq服务
rabbitmq-server
查看是否安装成功,登录部署rabbitmq服务器的端口管理页面,如本次安装的服务器为10.2.4.34,端口号为15672,页面网址为10.2.4.34:15672,登录网址出现对应的页面的内容。
此页面可以进行rabbitmq的一些管理,方便后续rabbitmq的各项数据操作。
4 rabbitmq创建用户
创建rabbitmq用户,用来进行rabbitmq连接以及登录管理页面。
rabbitmqctl add_user root root
rabbitmqctl set_user_tags root administrator
rabbitmqctl set_permissions -p / root '.*' '.*' '.*'
此时,就创建了root用户,用户可以用root账号进行相应的登录。
5 测试
本次测试用Java编写简单的生产者与消费者代码进行相关的数据传输测试,具体的流程图如下所示:
6 生产者代码
public class Producer {
public final static String QUEUE_NAME = "OneRabbitmq";//队列名称,根据此参数进行数据传递接受
public final static String Exchange_Name = "OneExchange";
public static void main(String[] args) throws IOException, TimeoutException{
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("10.2.4.34");
connectionFactory.setPort(5672);
connectionFactory.setUsername("root");
connectionFactory.setPassword("root");
Connection connection = connectionFactory.newConnection();
Channel channel = connection.createChannel();
channel.exchangeDeclare(Exchange_Name,"topic",false,false,null);
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
String message = "操作one";//传送的数据
// 发送消息
channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
// 关闭通道和连接
channel.close();
connection.close();
}
}
此时运行生产者代码,由QUEUE_NAME队列传送message数据,目前还没有消费者进行接收,那么对应的message数据进行相关的保存,直到有消费者进行接收为止。可以用rabbitmq管理页面进行监控,查看此时rabbitmq的情况。
由于目前消费者并没有接收相关的数据,所以目前由生产者产生的数据存储在rabbitmq中,一直等待消费者来进行获取。
7 消费者代码
public class Consumer {
private final static String QUEUE_NAME = "OneRabbitmq";
public static void main(String[] argv) throws java.io.IOException, java.lang.InterruptedException {
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("10.2.4.34");
connectionFactory.setPort(5672);
connectionFactory.setUsername("root");
connectionFactory.setPassword("root");
Connection connection = connectionFactory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(QUEUE_NAME, true, consumer);
while (true) {
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
System.out.println("接收到了" + QUEUE_NAME + "中的消息:" + message);
}
}
}
此时启动消费者代码,可以获取得到由生产者产生的数据message,结果如下:
再在rabbitmq管理页面进行查看,可以发现数据已经消失不存在了。
8 总结
本次测试结果证明,rabbitmq可以进行相关数据的传递给对应的消费者,且如果消费者没有进行接受,有关的数据也不会消失,而是保存在rabbitmq中,所以在一定程度上,数据的安全性得到相关的保障,故可以用rabbitmq来进行数据的传输,后续对于消费者接受的数据完整性如果不高,是否也算接受成功,还有待考证。