【微服务即时通讯项目】系统联调

目录

一.环境配置

1.1.Qt在线安装

1.2.安装vcpkg

二.联调

2.1.运行程序

2.1.1.服务端准备

2.1.2.客户端准备

2.2.测试

2.2.1.用户+密码注册一个用户,并修改用户信息

2.2.2.邮箱注册登陆另外一个用户+好友功能

2.2.2.四种类型的消息发送+语音转文字+删除好友

2.2.群聊


我们这里虽然没有写出客户端,但是我们完全可以借助我们写好的客户端来测试我们的服务器。

一.环境配置

1.1.Qt在线安装

首先我们可以去下载一下Qt:

https://download.qt.io/

这里就根据你自己的电脑型号选择,我选择的是第一个

下载之后,我们将这个文件放到我们需要安装的那个目录里面,例如我就把它放到这个目录里面

接下来我们打开windows命令行

复制代码
cd D:\Qt

然后我就执行下面这个

复制代码
qt-online-installer-windows-x64-4.11.0.exe --mirror https://mirrors.ustc.edu.cn/qtproject/

注意最前面的这个.exe文件就是我们下载的这个文件名,那么后面这个网址是我们的国内中科大Qt镜像源

如果说我们安装过程中出现了失败,那么我们应该换镜像源重新试试看

国内Qt镜像网站

那么我是使用了中科大的镜像源安装成功的

如果我们使用powershell,则需要修改一下我们的命令

复制代码
.\qt-online-installer-windows-x64-4.11.0.exe --mirror https://mirrors.ustc.edu.cn/qtproject/

一运行起来,就会弹出窗口**(注意:整个安装过程是需要联网的!!!)**

这里大家自己去注册账号密码

这里我们选择自定义安装,注意选择好我们的安装目录

我们直接选择是

然后进入下面这个

我们直接选择下面这个

然后我们按照下面那样子选择即可

然后我们点击下一步即可。我们就慢慢等待安装完成。

注意:安装过程千万不能断网。

注意:做这个项目,我们的机器必须安装有VS2019或者更⾼版本

下载完成后,如果没有创建本地方式,点击开始搜索

我们点击

1.2.安装vcpkg

复制代码
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
bootstrap-vcpkg.bat

如果遇到下面这种错误

我们就换成下面这个

复制代码
.\bootstrap-vcpkg.bat

注意:这里需要开一下加速器。

这样子我们就下载到了这个vcpkg.exe了

有了这个vcpkg,我们就能去安装protobuf(注意这里需要开加速器)

复制代码
.\vcpkg.exe install protobuf protobuf:x64-windows

过程类似下面这个

如果说大家一直卡在这里不动,我们先ctrl+C终止进程。

然后我们可以选择点击那个链接去浏览器里面下载,然后放到我们的downloads目录里面

然后我们重新执行下面这个命令即可

复制代码
.\vcpkg.exe install protobuf protobuf:x64-windows

完成的情况如下:

然后我们去那个目录vcpkg.exe存在的目录里面,点击下面这个目录

我们点击下面这个目录

这个x64-windows里面就是protobuf的安装目录。

里面存放了protobuf的所有源码和工具

这里就有我们protobuf的库

二.联调

2.1.运行程序

2.1.1.服务端准备

现在我们回到我们的服务器,我们来到这个目录下面

执行下面这个命令

复制代码
mkdir build && cd build && cmake .. && make

就这样子漫长的等待,大概10分钟左右。

我们发现这个build目录怎么什么东西都没有,其实都存在于这个Service里面。

我们回到build目录里来,然后我们执行下面这个命令

复制代码
make install

我们去安装一下,注意我们这里已经写好了,会安装到我们的<构建目录>/bin/里面去

例如,如果你在项目根目录下创建了 build 文件夹并进入其中运行 cmake ..,那么:

  • 构建目录就是 /path/to/project/build
  • 安装后的可执行文件位于 /path/to/project/build/bin/

而其他几个CMakeLists.txt里面则是

所以,就是安装到<构建目录>/bin/里面去了。

现在就安装好了,那么我们在运行这些程序之前呢,我们应该先清理我们服务器这边对应进程的数据。

在MySQL数据库中执行下面这些语句

cpp 复制代码
use IMS;
TRUNCATE TABLE chat_session_member;
TRUNCATE TABLE friend_apply;
TRUNCATE TABLE friend_relation;
TRUNCATE TABLE message;
TRUNCATE TABLE chat_session;
TRUNCATE TABLE user;

在Redis数据库里面执行下面这个

cpp 复制代码
flushall

在ES控制台里面执行下面这个(5601端口)

cpp 复制代码
DELETE /user
DELETE /message

对于RabbitMQ,我们需要去使用浏览器

javascript 复制代码
主机IP:15672

然后

往下面就能看到

点击这个就能删除这个队列

往下

点击这个就能删除交换机.


现在我们打开7个终端,依次运行起来

2.1.2.客户端准备

注意:至于客户端代码怎么写的,我们这里先不介绍,我们这里就是为了验证我们服务器的功能是否完整,如果说想要知道客户端代码是怎么写的,那么其实很简单,我们后续会教。

首先我们先去我们的代码网址里面把我们的客户端代码克隆下来,然后我们打开QT,点击下面的打开项目

我们选择我们的CMakeLists.txt文件,

点击确认即可,然后点击打开之后可能会出现下面这些,不过不用慌张

直接点确定,点击完之后会说要配置我们的项目,我们直接选择下面这个来,这个是选择构建套件的选择,我们这里选择MinGW构建套件(构建速度很快)

然后我们在后面点击右下角的这个

那么就开始构建我们的客户端项目了。构建好之后就是下面这样子。

然后我们找到我们下面这个NetClient.cpp,里面存放着我们服务端的地址信息

我们进去修改一下

把这里的地址换成我们服务器那边的网关子服务的地址信息

端口号,我们在网关子服务里面设定的如下所示:

更改完毕,我们就运行一下

这个编译时长其实是有一点久的啊!!

2.2.测试

2.2.1.用户+密码注册一个用户,并修改用户信息

我们这里登录注册一共有4种界面,分别对应

  • 用户名+密码登录
  • 用户名+密码注册
  • 邮箱+验证码登录
  • 邮箱+验证码注册

那么我们就先分别使用2种方法来进行注册一个新用户

我们先注册一个用户:小明,密码是123456

我们点击注册,注册之后它其实是下面这样子的,直接跳转到登陆界面来了,验证码那一栏会清空

然后我们去看看服务器的用户子服务

这个时候我们可以去看看我们的MySQL数据库里面的情况

当然Redis和ES我们都可以去看看

cpp 复制代码
GET /user/_search
{
  "query": { "match_all": {} },
  "size": 100
}

完全没有问题。

我们登陆进去看看

我们点击那个头像

那么我们在这里可以更改我们的昵称,签名,头像

我们现在就一个一个来修改一下

我们点击回车

设置好之后,我们可以去这个服务端的用户子服务这里看看情况,一点问题都没有

我们可以去MySQL数据看一下,完全没有问题

去ES里面

这里其实涉及到了文件上传子服务的上传单个文件,我们可以去看看这个文件存放在服务器的哪里

就是在这个data目录里面

是不是就和我们数据库的那个对上了??

完美

事实上,这里其实是可以设置我们的邮箱的

但是我们不在这里设置,我们换一个用户来设置一下

2.2.2.邮箱注册登陆另外一个用户+好友功能

输入我们的邮箱号,并且点击发送验证码

注册成功之后,自动跳转到登陆界面来了

我们也可以去看看用户子服务

包括MySQL数据库和ES

cpp 复制代码
mysql> select * from user;
+----+--------------------+--------------------+-----------------------------+----------+------------------+--------------------+
| id | user_id            | nickname           | description                 | password | email            | avatar_id          |
+----+--------------------+--------------------+-----------------------------+----------+------------------+--------------------+
|  1 | 74a3-2b016880-0000 | 小刚               | 没有什么可以阻挡我          | 123456   | NULL             | c744-07089f03-0000 |
|  2 | 047b-39274ca4-0004 | 047b-39274ca4-0004 | NULL                        | NULL     | 9135@qq.com | NULL               |
+----+--------------------+--------------------+-----------------------------+----------+------------------+--------------------+
2 rows in set (0.00 sec)

完全没有问题!!!!

我们直接登陆进去

我们这里更改一下邮箱

注意,这里是需要给我们更改后的邮箱发邮件的

我们去看

我们去看MySQL数据

cpp 复制代码
mysql> select * from user;
+----+--------------------+--------------------+-----------------------------+----------+---------------------+--------------------+
| id | user_id            | nickname           | description                 | password | email               | avatar_id          |
+----+--------------------+--------------------+-----------------------------+----------+---------------------+--------------------+
|  1 | 74a3-2b016880-0000 | 小刚               | 没有什么可以阻挡我          | 123456   | NULL                | c744-07089f03-0000 |
|  2 | 047b-39274ca4-0004 | 047b-39274ca4-0004 | NULL                        | NULL     | 17207007302@139.com | NULL               |
+----+--------------------+--------------------+-----------------------------+----------+---------------------+--------------------+
2 rows in set (0.00 sec)

完全没有问题。

接下来我们试一下添加好友

那么我们可以去这个MySQL数据库看看

然后我们登录到小刚那个账号那边去

然后

可以看到,确实是发来了一条这个好友请求,那么我们点击同意试试看

可以看就是多了一个会话,

我们可以去数据库看看

比较的完美

2.2.2.四种类型的消息发送+语音转文字+删除好友

我们打开这个聊天框

发送一条纯文本消息

发送之后,如果出现了Bug,那么我们可以去消息队列那里看看

如果这个为0,就有2种情况,消费完了,根本没发送给我们的消息队列

我们换一个用户看看

可以看到,收到了这个消息

我们去数据库看看

复制代码
mysql> select * from message;
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+---------+-----------+-----------+
| id | message_id         | chat_session_id    | user_id            | message_type | create_time         | content                     | file_id | file_name | file_size |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+---------+-----------+-----------+
|  1 | 1b98-2736c357-0000 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 |            0 | 2026-04-04 02:19:56 | 你好,小刚!!!!          |         |           |         0 |
|  2 | db92-33693f88-0001 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 |            0 | 2026-04-04 02:25:23 | 很高兴认识你                |         |           |         0 |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+---------+-----------+-----------+
2 rows in set (0.00 sec)

我们去ES看看

复制代码
GET /message/_search
{
  "query": { "match_all": {} },
  "size": 100
}

都没有什么问题。我们可以去试试看这个聊天记录查询功能(注意只支持纯文本消息的查询)

都是一点问题都没有!!!

那么接下来我们发送一下我们其他类型的消息

我们去数据库看看

复制代码
mysql> select * from message;
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-----------+------------+
| id | message_id         | chat_session_id    | user_id            | message_type | create_time         | content                     | file_id            | file_name | file_size  |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-----------+------------+
|  1 | 1b98-2736c357-0000 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 |            0 | 2026-04-04 02:19:56 | 你好,小刚!!!!          |                    |           |          0 |
|  2 | db92-33693f88-0001 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 |            0 | 2026-04-04 02:25:23 | 很高兴认识你                |                    |           |          0 |
|  3 | ce80-7b47239c-0002 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 |            1 | 2026-04-04 03:08:18 |                             | 6c61-47d017d0-0000 |           | 2616239327 |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-----------+------------+
3 rows in set (0.00 sec)

我们也可以去这个file_server的data目录里面看看

看到了吧,果然是多了一个文件。注意另外一个文件是用户小刚更改头像时传递上来的文件。

那么我们接着发送我们的文件消息

我们去数据库看看

复制代码
mysql> select * from message;
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
| id | message_id         | chat_session_id    | user_id            | message_type | create_time         | content                     | file_id            | file_name               | file_size  |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
|  1 | 1b98-2736c357-0000 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 |            0 | 2026-04-04 02:19:56 | 你好,小刚!!!!          |                    |                         |          0 |
|  2 | db92-33693f88-0001 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 |            0 | 2026-04-04 02:25:23 | 很高兴认识你                |                    |                         |          0 |
|  3 | ce80-7b47239c-0002 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 |            1 | 2026-04-04 03:08:18 |                             | 6c61-47d017d0-0000 |                         | 2616239327 |
|  4 | 3632-9626bf57-0003 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 |            2 | 2026-04-04 03:14:21 |                             | cd34-974dae0f-0001 | 传感器_第四讲.pdf       |    2191602 |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
4 rows in set (0.00 sec)

同样的去data目录看看

怎么样,是不是就多了一个文件。

那么我们接着发送语音消息

注意是按住来录音的

也确实是多了一个

复制代码
mysql> select * from message;
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
| id | message_id         | chat_session_id    | user_id            | message_type | create_time         | content                     | file_id            | file_name               | file_size  |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
|  1 | 1b98-2736c357-0000 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 |            0 | 2026-04-04 02:19:56 | 你好,小刚!!!!          |                    |                         |          0 |
|  2 | db92-33693f88-0001 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 |            0 | 2026-04-04 02:25:23 | 很高兴认识你                |                    |                         |          0 |
|  3 | ce80-7b47239c-0002 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 |            1 | 2026-04-04 03:08:18 |                             | 6c61-47d017d0-0000 |                         | 2616239327 |
|  4 | 3632-9626bf57-0003 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 |            2 | 2026-04-04 03:14:21 |                             | cd34-974dae0f-0001 | 传感器_第四讲.pdf       |    2191602 |
|  5 | d105-c86d6bb0-0005 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 |            3 | 2026-04-04 04:37:18 |                             | adbf-9d8365c9-0003 |                         |    2191602 |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
5 rows in set (0.00 sec)

我们这里看看语音转文字,到语音哪里,点击鼠标右键

过一会

可以!!!!非常的完美。

我们登录到小刚这个用户这里来看看

非常完美!!!

我们最后来试试删除好友

我们点击OK

可以看到,聊天会话删除了,我们去服务器看看

可以看到,这些好友关系是删除了,但是这些聊天记录其实没有被删除

复制代码
mysql> select * from chat_session;
0 rows in set (0.00 sec)

mysql> select * from chat_session_member;
0 rows in set (0.00 sec)

mysql> select * from message;
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
| id | message_id         | chat_session_id    | user_id            | message_type | create_time         | content                     | file_id            | file_name               | file_size  |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
|  1 | 1b98-2736c357-0000 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 |            0 | 2026-04-04 02:19:56 | 你好,小刚!!!!          |                    |                         |          0 |
|  2 | db92-33693f88-0001 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 |            0 | 2026-04-04 02:25:23 | 很高兴认识你                |                    |                         |          0 |
|  3 | ce80-7b47239c-0002 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 |            1 | 2026-04-04 03:08:18 |                             | 6c61-47d017d0-0000 |                         | 2616239327 |
|  4 | 3632-9626bf57-0003 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 |            2 | 2026-04-04 03:14:21 |                             | cd34-974dae0f-0001 | 传感器_第四讲.pdf       |    2191602 |
|  5 | d105-c86d6bb0-0005 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 |            3 | 2026-04-04 04:37:18 |                             | adbf-9d8365c9-0003 |                         |    2191602 |
+----+--------------------+--------------------+--------------------+--------------+---------------------+-----------------------------+--------------------+-------------------------+------------+
5 rows in set (0.00 sec)

这些聊天记录还堆积在我们的服务器里面,这个是我们服务端的bug,我们会在后续进行改进

2.2.群聊

我们这里多创建2个用户来

我们登录进去小明这个账号

我们登录另外两个用户去同意一下

然后我们小明

我们勾选一下小红,然后点击完成

我们发现就多了一个群聊,我们可以去数据库看看

复制代码
mysql> select * from chat_session;
+----+--------------------+-------------------+-------------------+
| id | chat_session_id    | chat_session_name | chat_session_type |
+----+--------------------+-------------------+-------------------+
|  1 | 4bc8-8225709a-0000 |                   |                 1 |
|  2 | bfa8-03fc60d6-0003 |                   |                 1 |
|  3 | 9796-19b51835-0004 |                   |                 1 |
|  4 | b139-7341d740-0005 | 新的群聊          |                 2 |
+----+--------------------+-------------------+-------------------+
4 rows in set (0.00 sec)
mysql> select * from chat_session_member;
+----+--------------------+--------------------+
| id | chat_session_id    | user_id            |
+----+--------------------+--------------------+
|  1 | 4bc8-8225709a-0000 | 74a3-2b016880-0000 |
|  2 | 4bc8-8225709a-0000 | 047b-39274ca4-0004 |
|  3 | bfa8-03fc60d6-0003 | 8014-4d206743-0006 |
|  4 | bfa8-03fc60d6-0003 | d859-1c24c5ce-0007 |
|  5 | 9796-19b51835-0004 | 74a3-2b016880-0000 |
|  6 | 9796-19b51835-0004 | d859-1c24c5ce-0007 |
|  7 | b139-7341d740-0005 | d859-1c24c5ce-0007 |
|  8 | b139-7341d740-0005 | 74a3-2b016880-0000 |
|  9 | b139-7341d740-0005 | 8014-4d206743-0006 |
+----+--------------------+--------------------+
9 rows in set (0.00 sec)

当然,我们这里还没有实现下面3个功能

  • 群聊名称的修改
  • 退出群聊
  • 新增加成员

完全没有问题!!!

可以说,我们的微服务即时通讯系统服务端是一点问题都没有的!!

相关推荐
tianbaolc6 小时前
Claude Code 源码剖析 模块一 · 第六节:autoDream 自动记忆整合
人工智能·ai·架构·claude code
小二·6 小时前
零信任架构深度实践:从身份到数据的全链路零信任实施指南
架构
@不误正业6 小时前
AI Agent多轮对话管理:3大架构源码级实现与性能对比(附鸿蒙实战)
人工智能·架构·harmonyos
q5431470878 小时前
Partition架构
架构
小程故事多_808 小时前
Anthropic 内部架构曝光,Claude Code 如何用 Harness 驾驭强智能
人工智能·架构·aigc·harness
自然语8 小时前
人工智能之数字生命 认知架构白皮书 第8章
人工智能·架构
却话巴山夜雨时i9 小时前
互联网大厂Java面试场景:从基础到微服务的循序渐进提问
java·数据库·spring·微服务·面试·消息队列·技术栈
小超同学你好10 小时前
Transformer 20. Qwen 3 架构介绍:模块详解与相对 Qwen 1 / Qwen 2 的演进
人工智能·语言模型·架构·transformer