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.
sudo yum install erlang
Bước 3: Cài đặt RabbitMQ
Cài đặt RabbitMQ bằng yum:
sudo yum install rabbitmq-server
Bước 4: Khởi động và kích hoạt rabbitMQ
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
Thêm người dùng mới:
rabbitmqctl add_user <username> <password> username: tên đăng nhập password: mật khẩu đăng nhập
Gán quyền cho người dùng:
rabbitmqctl set_user_tags <username> administrator
Gán quyền cho người dùng trên virtual host cụ thể :
rabbitmqctl set_permissions -p "/" <username> ".*" ".*" ".*"
Bước 5: Tích hợp thư viện PHP amqp trên CentOS
sudo yum install php-amqp
2.2) Cài đặt RabbitMQ trên Ubutu
Bước 1: Cập nhật hệ thống:
sudo apt update
sudo apt upgrade -y
Bước 2: Cài đặt Erlang
RabbitMQ chạy trên nền tảng Erlang, do đó bạn cần cài đặt Erlang trước.
sudo apt install erlang -y
Bước 3: Cài đặt RabbitMQ
sudo apt install rabbitmq-server -y
Bước 4: Quản lý RabbitMQ Dưới đây là một số lệnh quản lý cơ bản:
Khởi động rabbitmq:
sudo systemctl start rabbitmq-server
Dừng rabbitmq:
sudo systemctl stop rabbitmq-server
Khởi động cùng hệ thống:
sudo systemctl enable rabbitmq-server
2.3) Cấu hình trên Server Tùy Chỉnh (Ví dụ: Server 214)
Bước 1: Chuẩn bị môi trường
Cài đặt Web Server và PHP
Hệ điều hành: CentOS
Cài đặt Apache và PHP:
sudo yum install httpd php
sudo yum install php php-mysql
Bước 2: Cài đặt MySQL Server: Chạy lệnh sau để cài đặt MySQL Server trên CentOS:
sudo yum install mariadb-server
sudo yum install mariadb-server mariadb
Bước 3: Khởi động và Kích hoạt dịch vụ MySQL
sudo systemctl start mariadb
sudo systemctl enable mariadb
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:
<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'demo');
?>
Sử dụng Kết nối trong ứng dụng PHP
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ả.
Query SQL nhiều bảng và nhiều cột:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for abmsco_common_config
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_common_config`;
CREATE TABLE `abmsco_common_config` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`option_name` varchar(255) DEFAULT NULL,
`option_value` text,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2240 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for abmsco_crmentity
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_crmentity`;
CREATE TABLE `abmsco_crmentity` (
`crmid` int(19) NOT NULL,
`smcreatorid` int(19) NOT NULL DEFAULT '0',
`smownerid` int(19) NOT NULL DEFAULT '0',
`modifiedby` int(19) NOT NULL DEFAULT '0',
`setype` varchar(100) DEFAULT NULL,
`description` mediumtext,
`createdtime` datetime NOT NULL,
`modifiedtime` datetime NOT NULL,
`viewedtime` datetime DEFAULT NULL,
`status` varchar(50) DEFAULT NULL,
`version` int(19) NOT NULL DEFAULT '0',
`presence` int(1) DEFAULT '1',
`deleted` int(1) NOT NULL DEFAULT '0',
`smgroupid` int(19) DEFAULT NULL,
`source` varchar(100) DEFAULT NULL,
`label` varchar(255) DEFAULT NULL,
`recordno` varchar(255) DEFAULT NULL,
PRIMARY KEY (`crmid`) USING BTREE,
KEY `crmentity_smcreatorid_idx` (`smcreatorid`) USING BTREE,
KEY `crmentity_modifiedby_idx` (`modifiedby`) USING BTREE,
KEY `crmentity_deleted_idx` (`deleted`) USING BTREE,
KEY `crm_ownerid_del_setype_idx` (`smownerid`,`deleted`,`setype`) USING BTREE,
KEY `abmsco_crmentity_labelidx` (`label`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for abmsco_innomktauto
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto`;
CREATE TABLE `abmsco_innomktauto` (
`innomktautoid` int(11) NOT NULL DEFAULT '0',
`mkt_campain_name` varchar(128) DEFAULT NULL,
`mkt_from_name` varchar(128) DEFAULT NULL,
`mkt_sender` varchar(128) DEFAULT NULL,
`mkt_schedule` timestamp NULL DEFAULT NULL,
`mkt_batch_delivery` varchar(128) DEFAULT NULL,
`mkt_status` varchar(128) DEFAULT NULL,
`mkt_total_list` varchar(128) DEFAULT NULL,
`mkt_sent` varchar(128) DEFAULT NULL,
`mkt_unopened` varchar(128) DEFAULT NULL,
`mtk_unique_open` varchar(128) DEFAULT NULL,
`mkt_unsubcribed` varchar(128) DEFAULT NULL,
`mkt_failed_to_send` varchar(128) DEFAULT NULL,
`mkt_cvid` varchar(128) DEFAULT NULL,
`mkt_relmodule` varchar(128) DEFAULT NULL,
`mkt_fromserverid` varchar(128) DEFAULT NULL,
`tags` varchar(1) DEFAULT NULL,
`loai_chien_dich` varchar(255) DEFAULT '',
`file_ghi_am_autocall` varchar(100) DEFAULT '',
PRIMARY KEY (`innomktautoid`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for abmsco_innomktauto_action
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_action`;
CREATE TABLE `abmsco_innomktauto_action` (
`actionid` int(11) NOT NULL,
`set_field` text,
`next_stage` varchar(255) DEFAULT NULL,
`function` varchar(255) DEFAULT NULL,
PRIMARY KEY (`actionid`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for abmsco_innomktauto_campaign
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_campaign`;
CREATE TABLE `abmsco_innomktauto_campaign` (
`innomktautoid` int(11) DEFAULT NULL,
`mkt_campain_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`mkt_from_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`mkt_sender` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`mkt_schedule` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`mkt_batch_delivery` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`mkt_status` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`mkt_total_list` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`mkt_sent` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`mkt_unopened` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`mtk_unique_open` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`mkt_unsubcribed` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`mkt_failed_to_send` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`mkt_cvid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`mkt_relmodule` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`mkt_fromserverid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`tags` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`loai_chien_dich` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`file_ghi_am_autocall` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`crmid` int(19) DEFAULT NULL,
`smcreatorid` int(19) DEFAULT NULL,
`smownerid` int(19) DEFAULT NULL,
`modifiedby` int(19) DEFAULT NULL,
`setype` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`description` mediumtext COLLATE utf8_unicode_ci,
`createdtime` datetime DEFAULT NULL,
`modifiedtime` datetime DEFAULT NULL,
`viewedtime` datetime DEFAULT NULL,
`status` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`version` int(19) DEFAULT NULL,
`presence` int(1) DEFAULT NULL,
`deleted` int(1) DEFAULT NULL,
`smgroupid` int(1) DEFAULT NULL,
`source` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`recordno` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Table structure for abmsco_innomktauto_client_activity
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_client_activity`;
CREATE TABLE `abmsco_innomktauto_client_activity` (
`activityid` int(11) NOT NULL AUTO_INCREMENT,
`innomktautoid` int(11) DEFAULT NULL,
`client_id` int(11) DEFAULT NULL,
`result` varchar(255) DEFAULT NULL,
`time` datetime DEFAULT NULL,
`content_id` int(11) DEFAULT NULL,
PRIMARY KEY (`activityid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=109804 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for abmsco_innomktauto_client_list
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_client_list`;
CREATE TABLE `abmsco_innomktauto_client_list` (
`client_id` int(11) NOT NULL AUTO_INCREMENT,
`module` varchar(255) DEFAULT NULL,
`innomktautoid` int(11) DEFAULT NULL,
`crmid` int(19) DEFAULT NULL,
`current_stage` varchar(255) DEFAULT NULL,
`init_report` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`client_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=936260 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for abmsco_innomktauto_client_report_v2
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_client_report_v2`;
CREATE TABLE `abmsco_innomktauto_client_report_v2` (
`result_id` int(11) NOT NULL AUTO_INCREMENT,
`client_id` int(11) DEFAULT NULL,
`innomktautoid` int(11) DEFAULT NULL,
`content_type` varchar(50) DEFAULT NULL,
`content_id` int(11) DEFAULT NULL,
`stage_id` int(11) DEFAULT NULL,
`status` varchar(50) DEFAULT NULL,
`stage_result` varchar(255) DEFAULT NULL,
`last_update_result` datetime DEFAULT NULL,
`phase` int(11) DEFAULT NULL,
`first_run` datetime DEFAULT NULL,
`last_run` datetime DEFAULT NULL,
`satiation_time` datetime DEFAULT NULL,
`label` varchar(255) DEFAULT NULL,
`object` varchar(255) DEFAULT NULL,
PRIMARY KEY (`result_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=110000 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for abmsco_innomktauto_content
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_content`;
CREATE TABLE `abmsco_innomktauto_content` (
`contentid` int(11) NOT NULL,
`content` longtext,
`content_type` varchar(255) DEFAULT NULL,
`content_title` varchar(255) DEFAULT NULL,
`content_fields` varchar(255) DEFAULT NULL,
PRIMARY KEY (`contentid`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for abmsco_innomktauto_pause_send_queue
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_pause_send_queue`;
CREATE TABLE `abmsco_innomktauto_pause_send_queue` (
`send_queue_id` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(255) DEFAULT NULL,
`status` varchar(255) DEFAULT NULL,
`innomktautoid` int(11) NOT NULL,
`client_id` int(11) NOT NULL,
`content_id` int(11) DEFAULT NULL,
`current_stage` varchar(255) DEFAULT NULL,
`last_run` datetime DEFAULT NULL,
PRIMARY KEY (`send_queue_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for abmsco_innomktauto_queue
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_queue`;
CREATE TABLE `abmsco_innomktauto_queue` (
`queue_id` int(11) NOT NULL AUTO_INCREMENT,
`last_run` datetime DEFAULT NULL,
`function` varchar(255) DEFAULT NULL,
`client_id` int(11) NOT NULL,
`innomktautoid` int(11) DEFAULT NULL,
`current_stage` int(11) DEFAULT NULL,
`stage_status` varchar(255) DEFAULT NULL,
`action_id` int(11) DEFAULT NULL,
`trigger_id` int(11) DEFAULT NULL,
`content_id` int(11) DEFAULT NULL,
`batch` varchar(128) DEFAULT NULL,
PRIMARY KEY (`queue_id`) USING BTREE,
KEY `batch` (`batch`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1341281 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for abmsco_innomktauto_report_autocall
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_report_autocall`;
CREATE TABLE `abmsco_innomktauto_report_autocall` (
`result_id` int(11) NOT NULL,
`client_id` int(11) DEFAULT NULL,
`innomktautoid` int(11) DEFAULT NULL,
`digit` int(11) DEFAULT NULL,
`callstatus` varchar(255) DEFAULT NULL,
`pbxmanagerid` int(11) DEFAULT NULL,
PRIMARY KEY (`result_id`) USING BTREE,
CONSTRAINT `abmsco_innomktauto_report_autocall` FOREIGN KEY (`result_id`) REFERENCES `abmsco_innomktauto_client_report_v2` (`result_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for abmsco_innomktauto_report_email
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_report_email`;
CREATE TABLE `abmsco_innomktauto_report_email` (
`result_id` int(11) NOT NULL,
`client_id` int(11) DEFAULT NULL,
`innomktautoid` int(11) DEFAULT NULL,
`count_opened` int(11) DEFAULT '0',
`first_opened` datetime DEFAULT NULL,
`count_clicked` int(11) DEFAULT '0',
`first_clicked` datetime DEFAULT NULL,
`activityid` int(11) DEFAULT NULL,
`detail_error` varchar(255) DEFAULT NULL,
PRIMARY KEY (`result_id`) USING BTREE,
CONSTRAINT `abmsco_innomktauto_report_email` FOREIGN KEY (`result_id`) REFERENCES `abmsco_innomktauto_client_report_v2` (`result_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for abmsco_innomktauto_report_global
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_report_global`;
CREATE TABLE `abmsco_innomktauto_report_global` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`client_id` int(11) DEFAULT NULL,
`innomktautoid` int(11) DEFAULT NULL,
`last_update_result` datetime DEFAULT NULL,
`total_clicked` int(11) DEFAULT '0',
`total_opened` int(11) DEFAULT '0',
`total_pressed` int(11) DEFAULT '0',
`total_sent_mail` int(11) DEFAULT '0',
`total_autocall` int(11) DEFAULT '0',
`total_sent_sms` int(11) DEFAULT '0',
PRIMARY KEY (`id`) USING BTREE,
KEY `abmsco_innomktauto_report_global` (`innomktautoid`) USING BTREE,
CONSTRAINT `abmsco_innomktauto_report_global` FOREIGN KEY (`innomktautoid`) REFERENCES `abmsco_innomktauto` (`innomktautoid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=109984 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for abmsco_innomktauto_report_setfield
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_report_setfield`;
CREATE TABLE `abmsco_innomktauto_report_setfield` (
`result_id` int(11) NOT NULL,
`client_id` int(11) DEFAULT NULL,
`innomktautoid` int(11) DEFAULT NULL,
PRIMARY KEY (`result_id`) USING BTREE,
CONSTRAINT `abmsco_innomktauto_report_setfield` FOREIGN KEY (`result_id`) REFERENCES `abmsco_innomktauto_client_report_v2` (`result_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for abmsco_innomktauto_report_setfield_copy1
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_report_setfield_copy1`;
CREATE TABLE `abmsco_innomktauto_report_setfield_copy1` (
`result_id` int(11) NOT NULL,
`client_id` int(11) DEFAULT NULL,
`innomktautoid` int(11) DEFAULT NULL,
PRIMARY KEY (`result_id`) USING BTREE,
CONSTRAINT `abmsco_innomktauto_report_setfield_copy1_ibfk_1` FOREIGN KEY (`result_id`) REFERENCES `abmsco_innomktauto_client_report_v2` (`result_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for abmsco_innomktauto_report_wf
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_report_wf`;
CREATE TABLE `abmsco_innomktauto_report_wf` (
`result_id` int(11) NOT NULL,
`client_id` int(11) DEFAULT NULL,
`innomktautoid` int(11) DEFAULT NULL,
`stage_result` varchar(255) DEFAULT NULL,
`last_update_result` datetime DEFAULT NULL,
PRIMARY KEY (`result_id`) USING BTREE,
CONSTRAINT `abmsco_innnomktauto_report_wf` FOREIGN KEY (`result_id`) REFERENCES `abmsco_innomktauto_client_report_v2` (`result_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for abmsco_innomktauto_send_queue
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_send_queue`;
CREATE TABLE `abmsco_innomktauto_send_queue` (
`send_queue_id` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(255) DEFAULT NULL,
`status` varchar(255) DEFAULT NULL,
`innomktautoid` int(11) NOT NULL,
`client_id` int(11) NOT NULL,
`content_id` int(11) DEFAULT NULL,
`current_stage` varchar(255) DEFAULT NULL,
`last_run` datetime DEFAULT NULL,
PRIMARY KEY (`send_queue_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for abmsco_innomktauto_sendbulk_email
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_sendbulk_email`;
CREATE TABLE `abmsco_innomktauto_sendbulk_email` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`innomktautoid` int(11) DEFAULT NULL,
`clientid` int(11) DEFAULT NULL,
`current_stage` int(11) DEFAULT NULL,
`module` varchar(255) DEFAULT NULL,
`fromname` varchar(255) DEFAULT NULL,
`fromemail` varchar(255) DEFAULT NULL,
`toemail` varchar(255) DEFAULT NULL,
`content` longtext,
`subject` varchar(255) DEFAULT NULL,
`batch` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5540 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for abmsco_innomktauto_sendbulk_email_checkerror
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_sendbulk_email_checkerror`;
CREATE TABLE `abmsco_innomktauto_sendbulk_email_checkerror` (
`email` varchar(255) NOT NULL,
`client_id` int(11) DEFAULT NULL,
`innomktautoid` int(11) DEFAULT NULL,
`timesend` datetime DEFAULT NULL,
`contentid` varchar(255) DEFAULT NULL,
KEY `innomktauto_sendbulk_emailerror` (`email`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for abmsco_innomktauto_sendemail_smtp
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_sendemail_smtp`;
CREATE TABLE `abmsco_innomktauto_sendemail_smtp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`batch` varchar(255) DEFAULT NULL,
`innomktautoid` int(11) DEFAULT NULL,
`client_id` int(11) DEFAULT NULL,
`module` varchar(255) DEFAULT NULL,
`content_id` int(11) DEFAULT NULL,
`from_name` varchar(255) DEFAULT NULL,
`sender` varchar(255) DEFAULT NULL,
`to_email` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=10780 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Table structure for abmsco_innomktauto_stage
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_stage`;
CREATE TABLE `abmsco_innomktauto_stage` (
`stageid` int(11) NOT NULL,
`stage_type` varchar(50) NOT NULL,
`stage_name` varchar(255) NOT NULL,
`innomktautoid` int(11) NOT NULL,
`triggerid` int(11) NOT NULL,
`actionid` int(11) NOT NULL,
`contentid` int(11) NOT NULL,
`stage_label` varchar(255) NOT NULL,
`stage_presence` int(11) DEFAULT NULL,
`stage_limit_time` varchar(50) DEFAULT NULL,
PRIMARY KEY (`stageid`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for abmsco_innomktauto_stage_result
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_stage_result`;
CREATE TABLE `abmsco_innomktauto_stage_result` (
`stage_result` varchar(255) DEFAULT NULL,
`content_type` varchar(255) DEFAULT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for abmsco_innomktauto_trigger
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_trigger`;
CREATE TABLE `abmsco_innomktauto_trigger` (
`triggerid` int(11) NOT NULL,
`stage_result_condition` varchar(255) DEFAULT NULL,
`condition` text,
`delaytime` varchar(255) DEFAULT NULL,
`delaytimetype` varchar(255) DEFAULT NULL,
`last_run` datetime DEFAULT NULL,
`function` varchar(255) DEFAULT NULL,
`ready_time` datetime DEFAULT NULL,
PRIMARY KEY (`triggerid`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for abmsco_innomktauto_unsubcribes
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktauto_unsubcribes`;
CREATE TABLE `abmsco_innomktauto_unsubcribes` (
`crmid` int(11) NOT NULL,
`key` text,
`status` int(11) DEFAULT NULL,
`innomktautoid` int(11) NOT NULL,
PRIMARY KEY (`crmid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
-- ----------------------------
-- Table structure for abmsco_innomktautocf
-- ----------------------------
DROP TABLE IF EXISTS `abmsco_innomktautocf`;
CREATE TABLE `abmsco_innomktautocf` (
`innomktautoid` int(11) NOT NULL,
`unsubcribes` int(10) DEFAULT NULL,
PRIMARY KEY (`innomktautoid`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
SET FOREIGN_KEY_CHECKS = 1;
Sau khi chạy xong SQL ở trên ( chạy trong ứng dụng Navicat ) thì kết quả như hình dưới

Bước 6: Chạy thực nghiệm RabbitMQ ( Cả 2 server )
Tạo một tập tin PHP mới: Tạo một tập tin PHP mới trong project, ví dụ
index.php
.Thêm phần thư viện AMQP vào composer.json
Mở tệp composer.json
bằng trình chỉnh sửa văn bản và thêm phần "require"
với thư viện php-amqp
:
{
"require": {
"maximebf/debugbar": "^1.15",
"firebase/php-jwt": "^5.4",
"google/apiclient": "^2.11",
"phpoffice/phpspreadsheet": "1.22",
"alhimik1986/php-excel-templator": "^1.0",
"phpoffice/phpword": "^0.18.2",
"cmixin/business-time": "^1.11",
"ezyang/htmlpurifier": "4.13",
"google/cloud-storage": "^1.30",
"elasticsearch/elasticsearch": "^7.16.2",
"guzzlehttp/guzzle": "^7.4",
"slim/psr7": "^1.5",
"php-amqplib/php-amqplib": "^3.5",
"egulias/email-validator": "^2.1"
}
}
Mở terminal chạy lệnh: composer update
Demo code:
<?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:
php email/sendgrid.php 3vgLMFtlivmpAnEIfsmOgPvtZ2nI287ttc67iphH database_demo_rabbitmq
php email/smtp.php 3vgLMFtlivmpAnEIfsmOgPvtZ2nI287ttc67iphH database_demo_rabbitmq
Last updated