保留消息,用户属性跑到消息体去了

版本:nanomq-0.23.3-linux-amd64-sqlite 。
桥接信息: subscription = [
{
remote_topic = “/node/319a722585e3/#”
local_topic = “”

  retain_as_published = 1
  retain_handling = 0
}

]
当我从emqx发保留消息,消息能正常传递到nanomq。
但是当客户端断开与nanomq的连接,重新连接和订阅后,发现以下问题:用户属性跑到消息体去了,破坏了消息体的json格式。这个问题并没有在老版本0.22.0出现。

Topic: /node/319a722585e3/device_listQoS: 0Retained

Q&fromserver&reqId$1e1ea990-a09f-4011-b4b5-7d5f557961a3&ts 1741832261179{“boxId”:“319a722585e3”}

刚刚尝试了二进制版本,沿用你的主题,无论是否开启sqlite,都并没有问题。其他用户相同场景也没有此问题。

请给个完整的配置来验证重现,最好能有对应的抓包文件


nanomq.conf

# NanoMQ Configuration 0.18.0

# #============================================================
# # NanoMQ Broker
# #============================================================

mqtt {
    property_size = 32
    max_packet_size = 10MB
    max_mqueue_len = 2048
    retry_interval = 10s
    keepalive_multiplier = 1.25
    
    # Three of below, unsupported now
    max_inflight_window = 2048
    max_awaiting_rel = 10s
    await_rel_timeout = 10s
}

listeners.tcp {
    bind = "0.0.0.0:1883"
}

# listeners.ssl {
# 	bind = "0.0.0.0:8883"
# 	keyfile = "/etc/certs/key.pem"
# 	certfile = "/etc/certs/cert.pem"
# 	cacertfile = "/etc/certs/cacert.pem"
# 	verify_peer = false
# 	fail_if_no_peer_cert = false
# }

listeners.ws {
    bind = "0.0.0.0:8083/mqtt"
}

http_server {
    port = 8081
    limit_conn = 2
    username = admin
    password = public
    auth_type = basic
    jwt {
        public.keyfile = "/etc/certs/jwt/jwtRS256.key.pub"
    }
}

log {
    to = [file, console]
    level = warn
    dir = "/tmp"
    file = "nanomq.log"
    rotation {
        size = 10MB
        count = 5
    }
}

auth {
    allow_anonymous = true
    no_match = allow
    deny_action = ignore
    
    cache = {
        max_size = 32
        ttl = 1m
    }
    
    # password = {include "/etc/nanomq_pwd.conf"}
    # acl = {include "/etc/nanomq_acl.conf"}
}

sqlite {
    disk_cache_size = 102400
    mounted_file_path = "/usr/local/etc/"
    flush_mem_threshold = 100
    resend_interval = 5000
}

include "/etc/nanomq_bridge.conf"

nanomq_bridge.conf

# #====================================================================
# # MQTT Broker Bridge
# #====================================================================

bridges.mqtt.emqx1 = {
  server = "mqtt-tcp://172.16.1.20:1883"
  proto_ver = 5
  clientid = "319a722585e3"
  keepalive = "60s"
  clean_start = false
  username = "public"
  password = "public123"
  will = {
  	topic = "/node/319a722585e3/status/post"
  	qos = 1
  	retain = false
  	payload = "{\"status\": \"offline\"}"
  	properties = {
    	user_property = {
    	}
  	}
  }
  
  forwards = [
    {
      remote_topic = ""
      local_topic = "/#"
    }
  ]
  subscription = [
    {
      remote_topic = "/node/319a722585e3/#"
      local_topic = ""

      retain_as_published = 1
      retain_handling = 0
    }
  ]
  # 最大并行进程数
  max_parallel_processes = 2
  # 消息发送队列的最大长度
  max_send_queue_len = 32
  # 消息接收队列的最大长度
  max_recv_queue_len = 128
}

bridges.mqtt.cache {
	# # Max message limitation for caching
	# # ( 0 means ineffective )
	# # Value: 1-infinity
	disk_cache_size = 102400
	# # Mounted file path 
	# #
	# # Value: path
	mounted_file_path="/usr/local/etc/"
	
	# # The threshold of flushing messages to flash. 
	# #
	# # Value: 1-infinity
	flush_mem_threshold = 3
	
	# # Resend interval (ms)
	# # The interval for resending the messages after failure recovered. (not related to trigger)
	# # 
	# # Value: 1-infinity 
	resend_interval = 5000
}

mqtt_client.db已经是删除了,重新生成的。
不知道如何提供抓包文件。只能提供–log_level debug
2025-03-18 16:56:01 [68776] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1825 decode_pub_message: cmd: 3, retain: 0, qos: 0, dup: 0, remaining length: 200
2025-03-18 16:56:01 [68776] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1873 decode_pub_message: topic: [$SYS/brokers/connected], len: [22], qos: 0
2025-03-18 16:56:01 [68776] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1918 decode_pub_message: used pos: [24]
2025-03-18 16:56:01 [68776] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1930 decode_pub_message: payload: , len = 176
2025-03-18 16:56:01 [68776] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1481 handle_pub: pipe_info size: [0]
2025-03-18 16:56:01 [68776] DEBUG /home/runner/work/nanomq/nanomq/nanomq/apps/broker.c:645 server_cb: WAIT ^^^^ ctx13 ^^^^
2025-03-18 16:56:01 [68776] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1582 free_pub_packet: free topic
2025-03-18 16:56:01 [68776] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1598 free_pub_packet: free payload
2025-03-18 16:56:01 [68776] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1604 free_pub_packet: free pub_packet
2025-03-18 16:56:01 [68776] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:94 init_pipe_content: pub_handler: init pipe_info
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nng/src/sp/protocol/mqtt/nmq_mqtt.c:1148 nano_pipe_recv_cb: Processing subinfo done
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/apps/broker.c:342 server_cb: RECV ^^^^ ctx14 ^^^^

2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/sub_handler.c:68 decode_sub_msg: remainLen: [8] packetid : [11086]
2025-03-18 16:56:01 [68781] INFO /home/runner/work/nanomq/nanomq/nanomq/sub_handler.c:95 decode_sub_msg: topic: [/#] len: [2] pid [11086]
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/sub_handler.c:319 sub_ctx_handle: topicLen: [2] body: [/#]
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nng/src/supplemental/nanolib/mqtt_db.c:623 search_insert_node: topic is: , node->topic is:
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nng/src/supplemental/nanolib/mqtt_db.c:623 search_insert_node: topic is: #, node->topic is: node
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nng/src/supplemental/nanolib/mqtt_db.c:637 search_insert_node: searching unequal
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nng/src/supplemental/nanolib/mqtt_db.c:385 dbtree_node_new: New node: [#]
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/sub_handler.c:408 sub_ctx_handle: end of sub ctx handle.

2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/sub_handler.c:251 encode_suback_msg: remain: [4] varint: [4 0 0 0] len: [1] packetid: [2b 4e]
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/apps/broker.c:454 server_cb: retain msg [0x7e9c00000ec0] size [1]

2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:4071 decode_buf_properties: remain len 114 prop len 68 curpos 0x7e9c00001121 endpos 0x7e9c00001165
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:3786 property_parse: id: 38, value: ‘ts → 1741832261179’ (STR_PAIR)
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:3786 property_parse: id: 38, value: ‘reqId → 1e1ea990-a09f-4011-b4b5-7d5f557961a3’ (STR_PAIR)
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1825 decode_pub_message: cmd: 3, retain: 1, qos: 0, dup: 0, remaining length: 114
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1873 decode_pub_message: topic: [/node/319a722585e3/device_list], len: [30], qos: 0
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1918 decode_pub_message: used pos: [32]
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1930 decode_pub_message: payload: [D], len = 82
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1647 encode_pub_message: start encode message
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1684 encode_pub_message: after topic and id len in msg already [32]
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1737 encode_pub_message: after payload len in msg already [115]
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1747 encode_pub_message: header len [2] remain len [115]

2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1795 encode_pub_message: end encode message
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1582 free_pub_packet: free topic
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1598 free_pub_packet: free payload
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1604 free_pub_packet: free pub_packet
2025-03-18 16:56:01 [68781] DEBUG /home/runner/work/nanomq/nanomq/nanomq/apps/broker.c:743 server_cb: SEND ^^^^ ctx14 ^^^^
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/apps/broker.c:342 server_cb: RECV ^^^^ ctx15 ^^^^

2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1825 decode_pub_message: cmd: 3, retain: 0, qos: 0, dup: 0, remaining length: 170
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1873 decode_pub_message: topic: [/319a722585e3/heartbeat], len: [23], qos: 0
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:4071 decode_buf_properties: remain len 170 prop len 20 curpos 0x7e9c140069da endpos 0x7e9c140069ee
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:3786 property_parse: id: 38, value: ‘ts → 1742288163583’ (STR_PAIR)
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1895 decode_pub_message: property len: 20
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1918 decode_pub_message: used pos: [46]
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1930 decode_pub_message: payload: [{“systemInfo”: {“cpuUsage”: 0.2, “cpuTemp”: 37.0, “diskUsage”: 23.3, “memUsage”: 16.3, “upTime”: 96993}, “deviceStatus”: {}}], len = 124
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nng/src/supplemental/nanolib/mqtt_db.c:734 collect_clients: Searching client:
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nng/src/supplemental/nanolib/mqtt_db.c:754 collect_clients: Searching client:
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nng/src/supplemental/nanolib/mqtt_db.c:756 collect_clients: add node_t:
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nng/src/supplemental/nanolib/mqtt_db.c:702 collect_clients: Find # tag
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1481 handle_pub: pipe_info size: [1]
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/apps/broker.c:645 server_cb: WAIT ^^^^ ctx15 ^^^^
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1647 encode_pub_message: start encode message
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1684 encode_pub_message: after topic and id len in msg already [25]
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1737 encode_pub_message: after payload len in msg already [170]
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1747 encode_pub_message: header len [3] remain len [170]

2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1795 encode_pub_message: end encode message
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/bridge.c:291 bridge_publish_msg: bridge: publish to ‘/319a722585e3/heartbeat’
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:776 nni_mqtt_msg_encode_fixed_header: 170 aa 1 c1 fd
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nng/src/supplemental/mqtt/mqtt_codec.c:776 nni_mqtt_msg_encode_fixed_header: 170 aa 1 c1 fd
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1582 free_pub_packet: free topic
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1589 free_pub_packet: free properties
2025-03-18 16:56:04 [68788] DEBUG /home/runner/work/nanomq/nanomq/nanomq/bridge.c:1339 bridge_send_cb: bridge to mqtt-tcp://www.wpkj.net:18830 msg sent
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1598 free_pub_packet: free payload
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:1604 free_pub_packet: free pub_packet
2025-03-18 16:56:04 [68778] DEBUG /home/runner/work/nanomq/nanomq/nanomq/pub_handler.c:94 init_pipe_content: pub_handler: init pipe_info
2025-03-18 16:56:16 [68784] DEBUG /home/runner/work/nanomq/nanomq/nng/src/mqtt/protocol/mqtt/mqtt_client.c:759 mqtt_timer_cb: Send pingreq (sock0x58af479f44f8)(60000ms)
2025-03-18 16:56:21 [68782] DEBUG /home/runner/work/nanomq/nanomq/nanomq/apps/broker.c:342 server_cb: RECV ^^^^ ctx16 ^^^^

2025-03-18 16:56:21 [68782] DEBUG /home/runner/work/nanomq/nanomq/nanomq/apps/broker.c:645 server_cb: WAIT ^^^^ ctx16 ^^^^
2025-03-18 16:56:21 [68782] DEBUG /home/runner/work/nanomq/nanomq/nanomq/apps/broker.c:733 server_cb: broker has nothing to do
^C2025-03-18 16:56:24 [68771] ERROR /home/runner/work/nanomq/nanomq/nanomq/apps/broker.c:108 sig_handler: signal signumber: 2 received!

使用你的配置文件开启sqlite确实出现了,是一个sqlite 消息反序列化的V4/V5协议兼容的bug,已经在0.23.4 里修复 你试试

谢谢,测试已完成修复

1 个赞