Hướng dẫn deploy rabbit đối với Module: InnoMKTAuto
1) Giới Thiệu
RabbitMQ là một hệ thống xử lý thông điệp mã nguồn mở (open-source message broker) được sử dụng để truyền và xử lý thông điệp giữa các ứng dụng và dịch vụ. Đây là một giải pháp mạnh mẽ cho việc xây dựng các hệ thống phân tán, các ứng dụng liên quan đến xử lý thông điệp và nhiều tình huống khác.
Trong tài liệu này, chúng ta sẽ hướng dẫn cách triển khai RabbitMQ trên môi trường máy chủ Linux sử dụng gói cài đặt chính thống và tích hợp cơ bản với PHP
2) Triển khai RabbitMQ
2.1) Cài đặt RabbitMQ trên CentOS sử dụng yum
Bước 1: Cài đặt EPEL Repository
EPEL (Extra Packages for Enterprise Linux) là một kho lưu trữ chứa các gói bổ sung cho hệ điều hành dựa trên RHEL (Red Hat Enterprise Linux) như CentOS.
sudo yum install epel-release
Bước 2: Cài đặt Erlang
RabbitMQ yêu cầu Erlang để hoạt động, vì vậy bạn cần cài đặt Erlang trước.
Sau khi khởi động dịch vụ, hãy chạy lệnh bảo mật để đặt mật khẩu cho tài khoản root của MySQL:
sudo mysql_secure_installation
Bước 4: Tạo cơ sở dữ liệu và người dùng
Đăng nhập vào MySQL với tài khoản root:
sudo mysql -u root -p
Tạo cơ sở dữ liệu:
CREATE DATABASE your_db_name;
Tạo người dùng và cấp quyền cho cơ sở dữ liệu:
CREATE USER 'your_db_user'@'localhost' IDENTIFIED BY 'your_db_password';
GRANT ALL PRIVILEGES ON your_db_name.* TO 'your_db_user'@'localhost';
FLUSH PRIVILEGES;
Sử dụng mysqli_connect trong PHP
Tạo tệp config.php hoặc tệp cấu hình tương tự để cấu hình kết nối đến cơ sở dữ liệu:
Sau khi đã cấu hình config.php và kết nối MySQL trong tệp cấu hình, bạn có thể sử dụng biến $conn để thực hiện các truy vấn và thao tác với cơ sở dữ liệu.
Tạo index.php
<?php
// Include tệp cấu hình
require_once('config.php');
$conn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (!$conn) {
die("Kết nối thất bại: " . mysqli_connect_error());
}
// Thực hiện truy vấn
$sql = "SELECT * FROM abmsco_innomktauto";
$result = mysqli_query($conn, $sql);
// Kiểm tra và xử lý kết quả
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
echo "ID: " . $row['innomktautoid'] . " - Tên: " . $row['mkt_status'] . "<br>";
}
} else {
echo "Không có dữ liệu.";
}
// Đóng kết nối
mysqli_close($conn);
?>
Để tạo một cơ sở dữ liệu và bảng trong MySQL
Tạo 1 file demo.php
<?php
require_once('config.php');
$conn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (!$conn) {
die("Kết nối thất bại: " . mysqli_connect_error());
}
// Bắt đầu giao dịch
mysqli_begin_transaction($conn);
// Tạo cơ sở dữ liệu
$createDbQuery = "CREATE DATABASE IF NOT EXISTS your_database_name";
if (!mysqli_query($conn, $createDbQuery)) {
mysqli_rollback($conn);
echo "Lỗi trong quá trình tạo cơ sở dữ liệu: " . mysqli_error($conn);
exit;
}
// Chọn cơ sở dữ liệu để sử dụng
mysqli_select_db($conn, 'your_database_name');
// Tạo bảng trong cơ sở dữ liệu
$createTableQuery = "CREATE TABLE IF NOT EXISTS `your_table_name` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`column1` varchar(255) DEFAULT NULL,
`column2` text,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8";
if (!mysqli_query($conn, $createTableQuery)) {
mysqli_rollback($conn);
echo "Lỗi trong quá trình tạo bảng: " . mysqli_error($conn);
exit;
}
// Nếu tất cả các truy vấn thành công, thực hiện giao dịch
mysqli_commit($conn);
echo "Tạo cơ sở dữ liệu và bảng thành công.";
mysqli_close($conn);
?>
Ứng dụng Navicat
Navicat là một ứng dụng quản lý và quản lý cơ sở dữ liệu rất phổ biến.
Mở Navicat.
Chọn "Connection" hoặc "Kết nối" từ thanh công cụ hoặc trong menu "File".
Điền các thông tin kết nối như tên miền hoặc địa chỉ IP của máy chủ cơ sở dữ liệu, cổng, tên người dùng và mật khẩu.
Chọn "Test Connection" hoặc "Kiểm tra kết nối" để kiểm tra xem kết nối có thành công hay không.
Sau khi kết nối thành công, đặt tên cho kết nối và nhấn OK.
Query (Truy vấn) dữ liệu Navicat:
Trong cửa sổ chính của Navicat, chọn "Query" hoặc "Truy vấn" từ thanh công cụ hoặc trong menu "Database".
Viết truy vấn SQL vào khung trống.
Nhấn nút "Execute" hoặc "Thực hiện" để thực thi truy vấn và xem kết quả.
<?php
require_once 'vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
$connection = new AMQPStreamConnection('10.0.1', 5672, 'demo', 'demo');
$channel = $connection->channel();
$queueName = 'hello';
$channel->queue_delete($queueName);
$channel->queue_declare($queueName, false, false, false, false);
$messageBody = 'Hello, RabbitMQ!';
$message = new AMQPMessage($messageBody);
$channel->basic_publish($message, '', $queueName);
echo " [x] Sent '$messageBody'\n";
$channel->close();
$connection->close();
?>
2.4) Chạy thực nghiệm RabbitMQ đối với nhiều khách hàng
A) Ở server 212
Mở terminal chạy lệnh:
php modules/InnoMKTAuto/cron/rabbitmq/portal_data.php 3vgLMFtlivmpAnEIfsmOgPvtZ2nI287ttc67iphH database_demo
Trong đó
unique_com_id tương ứng với mỗi khách hàng khác nhau
Ví dụ:vgLMFtlivmpAnEIfsmOgPvtZ2nI287ttc67iphH
Tên database cần truyền vào ở server 212:
database_demo
B) Ở server 214:
Mở terminal chạy lệnh: