关于项目的配置,请见 README文件。
项目服务端代码在 HareMQ/mqserver
目录中,项目客户端代码在 HareMQ/mqclient
目录中。
编译服务端,并运行服务端:
cd HareMQ/mqserver
make clean;make;
./server
运行后效果如下所示,则表示服务端运行成功。
打印的是服务端的基本信息,包括服务端监听的ip和端口,服务器启动的时间,启动服务的系统用户,程序的PID。
当然,你可以选择使用 tmux
或者其他方式,把服务部署到后台当中。
编译客户端,并运行客户端:
cd HareMQ/mqserver
make clean;make;
./client
这里可能会遇到bug,暂时还没有解决,具体可见 issue#30,临时的解决方法:如果启动遇到段错误,则重复运行 ./client
至成功。
如图所示,则客户端运行成功:
启动客户端之后,即进入了客户端的控制命令行。
命令 | 简单描述 |
---|---|
subscribe |
订阅一个队列的消息,并持续在 stdout 上消费订阅队列上的消息(需要手动退出此模式) |
publish |
推送一条消息到指定交换机中 |
publish_mode |
连续推送消息模式 |
svrstat |
检查服务器当前交换机状态、队列状态和绑定状态,这是一个阻塞接口,需要阻塞等待服务器返回结果 |
declare_exchange |
声明一台交换机 |
declare_queue |
声明一个队列 |
delete_exchange |
删除一台交换机 |
delete_queue |
删除一个队列 |
bind |
绑定一题台交换机和队列 |
unbind |
解除绑定 |
cid |
查看当前客户端使用信道的id |
cmds |
查看所有合法命令 |
exit |
退出客户端 |
clear |
清理命令行 |
logo |
打项目印logo |
cmds
功能: 查看所有合法命令。
Usage:
cmds
clear
功能:清理命令行。
Usage:
clear
运行后效果:
logo
功能:打印项目logo。
Usage:
logo
exit
功能:退出客户端
Usage:
exit
cid
功能:打印当前客户端信道id。
Usage:
cid
svrstat
功能:检查服务器当前交换机状态、队列状态和绑定状态,这是一个阻塞接口,需要阻塞等待服务器返回结果。
Usage:
svrstat
可以观察到,目前服务器上有一台交换机,一个队列,和一个绑定信息。
[!NOTE] 虽然服务器已经重启多次,但是服务器是能保留历史数据的,因此所有的信息都会从文件中加载出来,这个即为信息持久化,我在 README 中也有提到。
declare_exchange
功能:声明一台交换机。
Usage:
declare_exchange exchange_name ExchangeType durable auto_delete other_args;
@ExchangeType: TOPIC/FANOUT/DIRECT
@durable, auto_delete: true/false
@other_args format: k1=v1&k2=v2&k3=v3...
delete_exchange
功能:删除一台交换机。
Usage:
delete_exchange exchange_name
declare_queue
功能:声明一个队列。
Usage:
declare_queue queue_name durable exclusive auto_delete other_args
@durable, exclusive, auto_delete: true/false
@other_args format: k1=v1&k2=v2&k3=v3...
delete_queue
功能:删除一个队列。
Usage:
delete_queue queue_name
publish/publish_mode
功能:推送一条消息到指定交换机中/持续推送模式
Usage:
publish/publish_mode exchange_name DURABLE binding_key
@DURABLE: hare_mq::DeliveryMode::DURABLE/UNDURABLE
subscribe
功能:订阅一个队列的消息,并持续在 stdout
上消费订阅队列上的消息,在屏幕上输入 quit
+ 回车,退出该模式,并自动取消订阅。
Usage:
publish/publish_mode exchange_name DURABLE binding_key
@DURABLE: hare_mq::DeliveryMode::DURABLE/UNDURABLE
启动服务端,并启动两个客户端。
定义一台交换机,定义一个队列,并进行绑定。如果命令格式有误,则会显示usage使用说明。
一个终端利用 publish
和 publish_mode
向指定交换机推送消息。
一个终端利用 subscribe
订阅队列的消息。
两个消费者终端都可以使用quit来退出当前的模式。
为了启动客户端后可以自动化快速搭建交换机和队列以及绑定信息,因此可以提供配置文件启动方式。
Usage:
./client file_name
比如, 编写配置文件。
declare_exchange exchange1 FANOUT true false
declare_queue queue1 true false false k1=v1&k2=v2
declare_queue queue2 true false false
bind exchange1 queue1 news.pop.#
bind exchange1 queue2 queue2
配置文件格式:
mqserver
目录下的 data
目录。使用配置文件启动客户端:
每一次启动服务端或客户端,都会在可执行程序同级目录下生成该程序的日志,便于运维工作的开展。
比如服务端的日志:
[INFO][broker_server.hpp][98]
------------------- Server Start --------------------
IP Address and Port: 0.0.0.0:8085
Start Time: Fri Aug 23 23:32:31 2024
User: ffengc
Process ID: 378907
-------------------------------------------------------
[INFO][broker_server.hpp][324] connected
[INFO][broker_server.hpp][316]
New Connection:
Connection Name: server-0.0.0.0:8085#1
Local IP: 127.0.0.1:8085
Peer IP: 127.0.0.1:52790
[REQUEST][broker_server.hpp][116] <from 127.0.0.1:52790> Request: openChannelRequest
[INFO][broker_server.hpp][324] connected
[INFO][broker_server.hpp][316]
New Connection:
Connection Name: server-0.0.0.0:8085#2
Local IP: 127.0.0.1:8085
Peer IP: 127.0.0.1:52800
[REQUEST][broker_server.hpp][116] <from 127.0.0.1:52800> Request: openChannelRequest
[REQUEST][broker_server.hpp][303] <from 127.0.0.1:52790> Request: basicQueryRequest
[REQUEST][broker_server.hpp][143] <from 127.0.0.1:52790> Request: declareExchangeRequest
[REQUEST][broker_server.hpp][175] <from 127.0.0.1:52790> Request: declareQueueRequest
[REQUEST][broker_server.hpp][207] <from 127.0.0.1:52790> Request: bindRequest
...
日志文件名为: year-month-day-hour-minute_pid.log