rabbitMQ在centOS7上的安裝

一、安裝erlang

安裝依賴環境

yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel

wget http://erlang.org/download/otp_src_19.0.tar.gz

解壓: tar -xvzf otp_src_19.0.tar.gz

配置
./configure --prefix=/usr/local/erlang --with-ssl -enable-threads -enable-smmp-support -enable-kernel-poll --enable-hipe --without-javac

make

make install

配置環境變量:vim /etc/profile

ERLANG_HOME=/usr/local/erlang
PATH=$PATH:$JAVA_HOME/bin:$ERLANG_HOME/bin

使配置生效: source /etc/profile

檢驗erl

[root@hjds sbin]# erl

二.安裝rabbitmq
               wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.1/rabbitmq-server-3.5.1.tar.gz
               tar -zxvf rabbitmq-server-3.5.1.tar.gz 
               cd abbitmq-server-3.5.1
               make
               make TARGET_DIR=/usr/local/rabbitmq SBIN_DIR=/usr/local/rabbitmq/sbin MAN_DIR=/usr/local/rabbitmq/man DOC_INSTALL_DIR=/usr/local/rabbitmq/doc install
               報錯處理:
                    /bin/sh: xmlto: command not found
                    /bin/sh: line 2: xmlto: command not found
                   解決:yum install xmlto

環境變量配置:

RABBIT_HOME=/usr/local/rabbitmq
PATH=$PATH:$JAVA_HOME/bin:$RABBIT_HOME/sbin

使配置生效: source /etc/profile

三、管理命令
       啓動:rabbitmq-server start
       關閉:rabbitmqctl stop
       狀態:rabbitmqctl status
四、插件
    啓動web管理插件
        rabbitmq-plugins enable rabbitmq_management
        錯誤解決:
            Error: {cannot_write_enabled_plugins_file,"/etc/rabbitmq/enabled_plugins",            enoent}
            mkdir /etc/rabbitmq

重新啓動輸入地址:localhost:15672,帳號默認爲guest,密碼guest,此帳號默認只能在本機訪問。不建議打開遠程訪問。你可以創建一個帳戶,並設置可以遠程訪問的角色進行訪問。
            如:rabbitmqctl add_user ganxiangdong ganxiangdong
            rabbitmqctl  set_user_tags  ganxiangdong administrator
五、用戶管理
     默認的guest帳戶相當於root帳戶
     rabbitmqctl add_user username password 添加帳戶
     rabbitmqctl change_password username newpassword 修改密碼
     rabbitmqctl delete_user username 刪除帳戶
     rabbitmqctl list_users 列出所有帳戶
     rabbitmqctl  set_user_tags  User  Tag 設置角色(administrator、monitoring、policymaker、management、其它)
     立即生效,不需重啓

六、代碼檢測

用Maven新建一個工程,修改POM文件,增加如下:


  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>3.5.6</version>
    </dependency>
  </dependencies>

使用官方的java-client代碼:


public class App 
{
    private final static String QUEUE_NAME = "hello";
    static boolean isBreak =false;


    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );


        ConnectionFactory factory = new ConnectionFactory();
        factory.setUsername("test");
        factory.setPassword("test123");
        factory.setHost("192.168.0.197");
        factory.setVirtualHost("/");
        factory.setPort(5672);


        try {
            Connection connection = factory.newConnection();
            Channel channel =  connection.createChannel();


            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(" [x] Received '" + message + "'");
                    isBreak=true;
                  }
                };
            channel.basicConsume(QUEUE_NAME, true, consumer);




            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            String message = "Hello World!";
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println(" [x] Sent '" + message + "'");


            while(!isBreak){
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }


            channel.close();
            connection.close();


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TimeoutException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

    }
}

ConnectionFactory填創建連接需要的參數(hostaddress、account等),然後newConnection(),得到Connection,並創建出一個Channel。 我們能用Channel構造出一個消費者Consumer用來監聽收到的消息,也可以使用channel發佈消息。RabbitMQ的消息是byte[],所以需要將字串轉成字節數組才能發送。


參考:http://blog.csdn.net/phpwww/article/details/44980261

http://blog.csdn.net/stonexmx/article/details/51850557



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章