rabbitmq部署及配置與驗證

1. 場景描述

朋友項目須要弄個測試環境,稍微幫忙了下,系統不復雜,可是須要本身安裝mysql、Reids、Es、RabbitMq等,Mq主要用在同步用戶信息與發送站內消息和短信上,RabbitMq之前沒記錄,恰好又從新走了一遍,記錄下部署、測試、常見問題,有須要的朋友,拿走不謝!java

2.解決方案

2.1 mq部署

安裝說明,版本沒有用最新的版本,用的2018年的3.6.15,最新的在github上下載太慢了。mysql

2.1.1 安裝erlang語言相關包
[root@ruanjianlaowang ~]# yum install epel-release
[root@ruanjianlaowang ~]# yum install erlang
[root@ruanjianlaowang ~]# wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
[root@ruanjianlaowang ~]# rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
2.1.2 安裝rabbitmq
[root@ruanjianlaowang ~]#  wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-3.6.15-1.el7.noarch.rpm

[root@ruanjianlaowang ~]# yum install rabbitmq-server-3.6.15-1.el7.noarch.rpm

#開啓容許遠程訪問
[root@ruanjianlaowang ~]# cat /etc/rabbitmq/rabbitmq.config
             [{rabbit, [{loopback_users, []}]}].

假如文件或者內容不存在,添加下(3.6.6版本沒有)
[root@ruanjianlaowang ~]# vi /etc/rabbitmq/rabbitmq.config
[root@ruanjianlaowang ~]# rabbitmq-plugins enable rabbitmq_management

#安裝延遲插件,特定場景,非必須
[root@ruanjianlaowang ~]# cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.15/plugins

[root@ruanjianlaowang ~]# wget https://dl.bintray.com/rabbitmq/community-plugins/rabbitmq_delayed_message_exchange-0.0.1.ez
[root@ruanjianlaowang ~]# rabbitmq-plugins enable rabbitmq_delayed_message_exchange

#防火牆放行端口號
[root@ruanjianlaowang ~]# firewall-cmd --add-port=15672/tcp --permanent
[root@ruanjianlaowang ~]# firewall-cmd --add-port=5672/tcp --permanent

#啓動關閉查看等命令
[root@ruanjianlaowang ~]# service rabbitmq-server start
[root@ruanjianlaowang ~]# service rabbitmq-server status
[root@ruanjianlaowang ~]# service rabbitmq-server restart
[root@ruanjianlaowang ~]# service rabbitmq-server stop
啓動成功圖:

rabbitmq部署及配置與驗證

2.1.3 控制檯新增用戶和虛擬機

(1)控制檯地址:http://45.122.146.23:15672/#/(阿里雲的服務器,ip改爲本身安裝mq的地址linux

rabbitmq部署及配置與驗證

(2)兩個端口,控制檯:15672,消息通信:5672git

rabbitmq部署及配置與驗證

(3)添加用戶github

rabbitmq部署及配置與驗證

(4)添加虛擬hostweb

其實相似linux中的文件,默認是/目錄下,建立一個虛擬host便於區分。spring

rabbitmq部署及配置與驗證

(5)關聯用戶和虛擬hostsql

點擊用戶,會彈出賦權的頁面apache

rabbitmq部署及配置與驗證

(6)配置完成springboot

rabbitmq部署及配置與驗證

2.2 rabbitmq驗證

直接用官方提供的驗證代碼,更改下配置就能夠,兩個類一個發送消息,一個接受消息。

2.2.1 官網demo地址:

https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/java/Send.java

2.2.2 測試

(1)idea下測試,springboot項目,兩個depency就能夠了,pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.laowang</groupId>
    <artifactId>mqtest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mqtest</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

效果圖以下:

rabbitmq部署及配置與驗證

(2)消息推送類:Send.java

package com.laowang.mqtest.hello;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.nio.charset.StandardCharsets;
public class Send {
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
//        factory.setHost("localhost");
        factory.setHost("45.122.146.23");
        factory.setPort(5672);
        factory.setVirtualHost("ruanjianlaowang");
        factory.setUsername("ruanjianlaowang");
        factory.setPassword("123");

        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            String message = "Hello World!";
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8));
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}

(3)消息接受類Recv.java:

package com.laowang.mqtest.hello;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
public class Recv {
    private final static String QUEUE_NAME = "hello";
    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
//        factory.setHost("localhost");
        factory.setHost("45.122.146.23");
        factory.setPort(5672);
        factory.setVirtualHost("ruanjianlaowang");
        factory.setUsername("ruanjianlaowang");
        factory.setPassword("123");

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

        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), "UTF-8");
            System.out.println(" [x] Received '" + message + "'");
        };
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
    }
}

說明:鏈接信息更改成你本身的鏈接信息。

(4)執行效果圖

發送類:

rabbitmq部署及配置與驗證

接受類,發送了三次。
rabbitmq部署及配置與驗證

2.3 問題總結:

(1) 虛擬host建立能夠帶「/」,也能夠不帶,配置的要注意。

(2) 防火牆記得放開端口號。


I’m 「軟件老王」,若是以爲還能夠的話,關注下唄,後續更新秒知!歡迎討論區、同名公衆號留言交流!

相關文章
相關標籤/搜索