Linux与window7环境下rabbitmq的安装与配合Java的应用实例

  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

       操作方式:进入后点击 字母可以开始输入或黏贴,输入结束点击ESC进行退出输入,然后输入wq进行保存就可以了,最后可命令cat /etc/profile查看更新后的结果

1.7 使环境变量生效

    source /etc/profile

1.8 验证软件是否安装成功

      另开一个CRT窗口,输入erl命令,出现如下显示结果就说明安装成功了

      

 

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 主要端口说明

              

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

 

注:activemq和rabbitmq不可以同时开启。否则容易报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值