baetyl-broker
更新时间:2022-10-26
简介
baetyl-broker 基于Golang语言开发,是一个单机版的消息订阅和发布中心,采用 MQTT3.1.1 协议,可在低带宽、不可靠网络中提供可靠的消息传输服务。其作为 baetyl 框架端侧的消息中间件,为所有服务提供消息驱动的互联能力。
目前支持 4 种接入方式:TCP、SSL(TCP + SSL)、WS(Websocket)及 WSS(Websocket + SSL),MQTT 协议支持度如下:
- 支持
Connect
、Disconnect
、Subscribe
、Publish
、Unsubscribe
、Ping
等功能 - 支持 QoS 等级 0 和 1 的消息发布和订阅
- 支持
Retain
、Will
、Clean Session
- 支持订阅含有
+
、#
等通配符的主题 - 支持符合约定的 ClientID 和 Payload 的校验
- 支持认证鉴权,在传输层使用 tls 证书做双向认证,在应用层支持 ACL 权限控制
- 暂时 不支持 Client 的 Keep Alive 特性以及 QoS 等级 2 的发布和订阅
配置说明
baetyl-broker 的全量配置文件如下,并对配置字段做了相应解释:
YAML
1listeners: # [必须]监听地址,例如:
2 - address: tcp://0.0.0.0:1883 # tcp 连接
3 - address: ssl://0.0.0.0:1884 # ssl 连接,ssl 连接必须配置证书
4 ca: example/var/lib/baetyl/testcert/ca.crt # Server 的 CA 证书路径
5 key: example/var/lib/baetyl/testcert/server.key # Server 的服务端私钥路径
6 cert: example/var/lib/baetyl/testcert/server.crt # Server 的服务端公钥路径
7 anonymous: true # 如果 anonymous 为 true,服务端对该端口不进行 ACL 验证
8 - address: ws://0.0.0.0:8883/mqtt # ws 连接
9 - address: wss://0.0.0.0:8884/mqtt # wss 连接,wss 连接必须配置证书
10 ca: example/var/lib/baetyl/testcert/ca.crt # Server 的 CA 证书路径
11 key: example/var/lib/baetyl/testcert/server.key # Server 的服务端私钥路径
12 cert: example/var/lib/baetyl/testcert/server.crt # Server 的服务端公钥路径
13 anonymous: false # 如果 anonymous 为 true,服务端对该端口不进行 ACL 验证
14principals: # ACL 权限控制,支持账号密码和证书认证
15 - username: test # 用户名
16 password: hahaha # 密码
17 permissions: # 权限控制
18 - action: pub # pub 权限
19 permit: ["test"] # 允许的 topic,支持通配符
20 - action: sub # pub 权限
21 permit: ["test"] # 允许的 topic,支持通配符
22 - username: client # 如果密码为空,username 表示客户端证书的 common name,用于做证书连接的客户端的 ACL 验证
23 permissions: # 权限控制
24 - action: pub # pub 权限
25 permit: ["#"] # 允许的 topic,支持通配符
26 - action: sub # pub 权限
27 permit: ["#"] # 允许的 topic,支持通配符
28session: # 客户端 session 相关的设置
29 maxClients: 0 # 服务端最大客户端连接数,如果为 0 或者负数表示不做限制
30 maxMessagePayloadSize: 32768 # 可允许传输的最大消息长度,默认 32768 字节(32K),最大值为 268,435,455字节(约256MB) - 1
31 maxInflightQOS0Messages: 100 # QOS0 消息的飞行窗口
32 maxInflightQOS1Messages: 20 # QOS1 消息的飞行窗口
33 resendInterval: 20s # 消息重发间隔,如果客户端在消息重发间隔内没有回复确认(ack),消息会一直重发,直到客户端回复确认或者 session 关闭
34 persistence: # 消息持久化相关配置
35 store: # 底层存储插件配置
36 driver: boltdb # 底层存储插件,默认 boltdb
37 source: var/lib/baetyl/broker.db # 存储文件路径
38 queue: # 存储
39 batchSize: 10 # 消息通道缓存大小
40 expireTime: 24h # 消息过期时间间隔,在此间隔前的消息在下次清理时会被清理掉
41 cleanInterval: 1h # 消息清理间隔,后台会按照此间隔定期清理过期消息
42 writeTimeout: 100ms # 批量写超时间隔,按照此间隔进行写操作,如果间隔时间内,缓存满了,也会触发写操作
43 deleteTimeout: 500ms # 批量删除已确认消息超时间隔,按照此间隔进行对已确认的消息进行删除操作,如果间隔时间内,已确认消息缓存满了,也会触发删除操作
44 sysTopics: ["$link", "$baidu"] # 系统主题
45
46logger: # 日志
47 level: info # 日志等级
demo示例
接下来给出一个配置 demo,可以快速接入 broker:
YAML
1session:
2 sysTopics: ["$link", "$baetyl"]
3logger:
4 level: debug
5 encoding: console
6listeners:
7 - address: 'tcp://0.0.0.0:8883'
8principals:
9 - username: test
10 password: test
11 permissions:
12 - action: pub
13 permit:
14 - '#'
15 - action: sub
16 permit:
17 - '#'
说明:
- 需要在baetyl-broker当中添加一条【(容器外)8883:8883(容器内)】的端口映射。
- baetyl-broker会默认加载系统证书,使用tls方式认证,容器内端口是50010